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  

 

 

posted @ 2016-04-29 17:02  LarryKnight  阅读(956)  评论(0编辑  收藏  举报