Может ли DeviceIoControl в качестве входного и выходного буфера принимать один и тот же адрес (т.е. чтобы данные, передаваемые в драйвер, переписывались драйвером и возвращались в юзер по прежнему - переданному - адресу) Перепробовал кучу флагов - ни в какую OutputBuffer возвращается с данными, которые передавал как InputBuffer.
А почему нет? Вот пример из Бестскриптовского SDK strcpy(bufHead->Signature, "LOCOS97 "); res = :eviceIoControl( hDevice, CtlCode, Buffer, BufferSize, Buffer, BufferSize, &lBytesReturned, NULL); ::CloseHandle(hDevice); if (!res) return FALSE; if (strncmp(bufHead->Signature,"LS06CXX ",8) != 0 return FALSE; Сигнатура в буфере меняется точно. IOCTL описаны так: #define IOCTL_PRIVATE_MAP_BCDISK \ CTL_CODE(IOCTL_DISK_BASE, 0x803, METHOD_IN_DIRECT,\ FILE_ANY_ACCESS)
<font color="gray][ cresta</font><!--color--><font color="gray]: Может ли DeviceIoControl в качестве входного и выходного буфера принимать один и тот же адрес ]</font><!--color--> Может. nOutBufferSize проверь (не 0 ли).