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