задача такая:
в DeviceIoControl первым параметром указать дискриптор области памяти.
делаю так
chData = GlobalAlloc (GMEM_ZEROINIT, 20 * 1024);
if (!DeviceIoControl(
chData,
IOCTL_FILEDISK_OPEN_MEDIA,
&open_media_information,
sizeof(OPEN_MEDIA_INFORMATION),
NULL,
0,
&nread,
NULL
))
в итоге ошибка номер 6 (инвалидный хэндл).
если в chData загоняю дескриптор файла все работает
chData = CreateFile(...
как мне сделать с памятью???
Здравствуйте, Аноним, Вы писали:
А>задача такая:
А>в DeviceIoControl первым параметром указать дискриптор области памяти.
А>делаю так
А>А>chData = GlobalAlloc (GMEM_ZEROINIT, 20 * 1024);
А>if (!DeviceIoControl(
А> chData,
А> IOCTL_FILEDISK_OPEN_MEDIA,
А> &open_media_information,
А> sizeof(OPEN_MEDIA_INFORMATION),
А> NULL,
А> 0,
А> &nread,
А> NULL
А> ))
А>
А>в итоге ошибка номер 6 (инвалидный хэндл).
А>если в chData загоняю дескриптор файла все работает
А>chData = CreateFile(...
А>как мне сделать с памятью???
дескрипторы — это описатели, что есть понятие абстрактное и для разных объектов представляет собой совершенно разные вещи.
В МСДН написано что данная функция работает только с дескрипторами полученными при помощи функции CreateFile.
[msdn]
hDevice
[in] Handle to the device on which the operation is to be performed. The device is typically a volume, directory, file, or stream. To retrieve a device handle, use the CreateFile function. For more information, see Remarks.
[/msdn]
какая задача побудила на такие свершения? может уточнение задачи поможет совершенно иной подход найти.
Здравствуйте, Аноним, Вы писали:
А>задача такая:
А>в DeviceIoControl первым параметром указать дискриптор области памяти.
А>делаю так
А>А>chData = GlobalAlloc (GMEM_ZEROINIT, 20 * 1024);
А>if (!DeviceIoControl(
А> chData,
А> IOCTL_FILEDISK_OPEN_MEDIA,
А> &open_media_information,
А> sizeof(OPEN_MEDIA_INFORMATION),
А> NULL,
А> 0,
А> &nread,
А> NULL
А> ))
А>
А>в итоге ошибка номер 6 (инвалидный хэндл).
Хороший пример не умения читать документацию
DeviceIoControl первым параметром требует handle полученный с помощью CreateFile, как раз для этого GlobalAlloc и возвращает тип HGLOBAL — что-бы

думали сначала чем "пихать" куда попало.
А>если в chData загоняю дескриптор файла все работает
А>chData = CreateFile(...
А>как мне сделать с памятью???
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.