DeviceIoControl

时间:2023-03-09 22:22:20
DeviceIoControl

DeviceIoControl是kernel32中的函数,包含的头文件为winbase.h。

BOOL DeviceIoControl(

HANDLE hDevice,                   // 设备句柄

DWORD dwIoControlCode,      // Io控制命令

LPVOID lpInBuffer,                // 应用程序传递给驱动程序的输入缓冲区指针

DWORD nInBufferSize,          // 应用程序传递给驱动程序的输入缓冲区字节数

LPVOID lpOutBuffer,             // 驱动程序返回给应用程序的输出缓冲区指针

DWORD nOutBufferSize,        // 驱动程序返回给应用程序的输出缓冲区字节数

LPDWORD lpBytesReturned,   // 返回输出字节数

LPOVERLAPPED lpOverlapped  // 异步调用时指向的OVERLAPPED指针

);   // 返回:非0成功;0失败,并设置GetLastError()

第一个参数hDevice是操作设备的句柄,该句柄要通过CreateFile的返回值获取。

IoControlCode由四部分组成:DeviceType、Access、Function、Method。

DeviceType表示设备类型;

Access表示对设备的访问权限;

Function表示设备IoControl的功能号,0~0x7ff为微软保留,0x800~0xfff由程序员自己定义;

Method表示Ring3/Ring0的通信中的内存访问方式,有四种方式:

1)#define METHOD_BUFFERED            0

2)#define METHOD_IN_DIRECT           1

3)#define METHOD_OUT_DIRECT        2

4)#define METHOD_NEITHER              3