我知道,我们可以从使用METHOD_IN_DIRECT.But的IOCTL驱动程序中获得输出缓冲器,可以使用OSR _IN_ Direct /METHOD_OUT_Direct传递输入缓冲区。我在OSR上发现,方法_IN_Direct/METHOD_OUT_Direct只适用于输出buffer.Why输入,输入输入总是直接IO缓冲。
发布于 2014-10-13 02:43:15
如果控制代码是用METHOD_IN_DIRECT定义的,那么DeviceIoControl具有以下签名:
BOOL WINAPI DeviceIoControl(
_In_ HANDLE hDevice,
_In_ DWORD dwIoControlCode,
_In_opt_ LPVOID lpInBuffer1,
_In_ DWORD nInBuffer1Size,
_In_opt_ LPVOID lpInBuffer2,
_In_ DWORD nInBuffer2Size,
_Out_opt_ LPDWORD lpBytesReturned,
_Inout_opt_ LPOVERLAPPED lpOverlapped
);请注意,有两个输入缓冲区(都包含设备驱动程序读取的数据)和没有输出缓冲区(因此设备驱动程序不能将任何数据返回到用户模式)。
第一个输入缓冲区lpInBuffer1被复制到系统缓冲区,因此应该是相对较小的。如果控制代码不需要两个输入缓冲区,lpInBuffer1将是NULL。
第二个输入缓冲器lpInBuffer2通过Direct提供给设备驱动程序,因此适合于大型缓冲区和/或与DMA或PIO一起使用。
应该注意的是,Windows似乎不包括任何使用METHOD_IN_DIRECT进行用户模式访问的控制代码的驱动程序。(在驱动程序之间传递的一些控制代码中使用。)但是,第三方设备驱动程序可以提供使用此方法的控制代码。
https://stackoverflow.com/questions/26329328
复制相似问题