Windows驱动开发-DeviceIoControl函数参数dwIoControlCode

函数语法

BOOL DeviceIoControl(
  HANDLE       hDevice,
  DWORD        dwIoControlCode,
  LPVOID       lpInBuffer,
  DWORD        nInBufferSize,
  LPVOID       lpOutBuffer,
  DWORD        nOutBufferSize,
  LPDWORD      lpBytesReturned,
  LPOVERLAPPED lpOverlapped
);
第二个参数dwIoControlCode就是由CTL_CODE宏定义的
#define CTL_CODE(DeviceType, Function, Method, Access) (  ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))

CTL_CODE:用于创建一个唯一的32位系统I/O控制代码,这个控制代码包括4部分组成:

DeviceType(设备类型,高16位(16-31位)),
Access(访问限制,14-15位),
Function(功能2-13位),
Method(I/O访问内存使用方式)。

DeviceType例子:16-31位

#define FILE_DEVICE_HOLOGRAPHIC         0x0000005b
#define FILE_DEVICE_SDFXHCI             0x0000005c
#define FILE_DEVICE_UCMUCSI             0x0000005d

Access例子:最大2,两个位就够,14,15位

#define FILE_ANY_ACCESS                 0
#define FILE_SPECIAL_ACCESS    (FILE_ANY_ACCESS)
#define FILE_READ_ACCESS          ( 0x0001 )    // file & pipe
#define FILE_WRITE_ACCESS         ( 0x0002 )    // file & pipe

Method:最大3,两个位,0,1位

#define METHOD_BUFFERED                 0
#define METHOD_IN_DIRECT                1
#define METHOD_OUT_DIRECT               2
#define METHOD_NEITHER                  3

Function:占12个位,2-13位,搞不懂这个干什么用的

Function codes 0-2047(0x000-0x7FF) are reserved for Microsoft; 
codes 2048-4095(0x800-0xFFF) are reserved for OEMs and IHVs

 

猜你喜欢

转载自www.cnblogs.com/a-s-m/p/12330308.html