惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Jina AI
Jina AI
博客园 - Franky
Apple Machine Learning Research
Apple Machine Learning Research
酷 壳 – CoolShell
酷 壳 – CoolShell
阮一峰的网络日志
阮一峰的网络日志
量子位
雷峰网
雷峰网
宝玉的分享
宝玉的分享
V
Visual Studio Blog
博客园_首页
小众软件
小众软件
The Cloudflare Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
大猫的无限游戏
大猫的无限游戏
博客园 - 聂微东
S
SegmentFault 最新的问题
博客园 - 【当耐特】
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 叶小钗
月光博客
月光博客
博客园 - 三生石上(FineUI控件)
人人都是产品经理
人人都是产品经理
WordPress大学
WordPress大学

博客园 - 平凡人

std::atomic linux学习-目录 C++设计模式--PIMPL c++的RAII C++技术之---标准容器的值语义 blender学习系列之--CLOG Blender中的DNA QT元对象系统(Meta-Object System) Blender文档翻译:ID Datablocks(ID数据块) Blender内存管理库(bf_intern_guardedalloc) IDA\Windbg调试 - 平凡人 - 博客园 内核开发速查表 Blender中的事件处理器 Blender:SDNA QT信号和槽 利用QEventLoop实现同步等待信号槽返回结果 Blender文档翻译:Operators tutorial(操作教程) Blender文档翻译:Operators Blender文档翻译:RNA Blender文档翻译-Blender库数据的通用属性
IOCTL(CTL_CODE)
平凡人 · 2018-10-03 · via 博客园 - 平凡人

IOCTL

 下图显示控制代码结果格式:

在wdm.h中定义了一系统宏来解析/反解析IO控制代码:

//宏:用来生成IOCTL 和 FSCTL功能控制代码,功能代码0-2047由微软使用,2048-4095供用户使用

#define CTL_CODE( DeviceType, Function, Method, Access ) (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))

//宏:提取设备类型的宏

#define DEVICE_TYPE_FROM_CTL_CODE(ctrlCode) (((ULONG)(ctrlCode & 0xffff0000)) >> 16)

//宏:提取缓存方法
#define METHOD_FROM_CTL_CODE(ctrlCode) ((ULONG)(ctrlCode & 3))

//宏:提取功能代码

#define IoGetFunctionCodeFromCtlCode( ControlCode ) (( ControlCode >> 2) & 0x00000FFF )

 设备类型代码:

 1 //
 2 // Define the various device type values.  Note that values used by Microsoft
 3 // Corporation are in the range 0-32767, and 32768-65535 are reserved for use
 4 // by customers.
 5 //
 6 
 7 #define DEVICE_TYPE ULONG
 8 
 9 #define FILE_DEVICE_BEEP                0x00000001
10 #define FILE_DEVICE_CD_ROM              0x00000002
11 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM  0x00000003
12 #define FILE_DEVICE_CONTROLLER          0x00000004
13 #define FILE_DEVICE_DATALINK            0x00000005
14 #define FILE_DEVICE_DFS                 0x00000006
15 #define FILE_DEVICE_DISK                0x00000007
16 #define FILE_DEVICE_DISK_FILE_SYSTEM    0x00000008
17 #define FILE_DEVICE_FILE_SYSTEM         0x00000009
18 #define FILE_DEVICE_INPORT_PORT         0x0000000a
19 #define FILE_DEVICE_KEYBOARD            0x0000000b
20 #define FILE_DEVICE_MAILSLOT            0x0000000c
21 #define FILE_DEVICE_MIDI_IN             0x0000000d
22 #define FILE_DEVICE_MIDI_OUT            0x0000000e
23 #define FILE_DEVICE_MOUSE               0x0000000f
24 #define FILE_DEVICE_MULTI_UNC_PROVIDER  0x00000010
25 #define FILE_DEVICE_NAMED_PIPE          0x00000011
26 #define FILE_DEVICE_NETWORK             0x00000012
27 #define FILE_DEVICE_NETWORK_BROWSER     0x00000013
28 #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
29 #define FILE_DEVICE_NULL                0x00000015
30 #define FILE_DEVICE_PARALLEL_PORT       0x00000016
31 #define FILE_DEVICE_PHYSICAL_NETCARD    0x00000017
32 #define FILE_DEVICE_PRINTER             0x00000018
33 #define FILE_DEVICE_SCANNER             0x00000019
34 #define FILE_DEVICE_SERIAL_MOUSE_PORT   0x0000001a
35 #define FILE_DEVICE_SERIAL_PORT         0x0000001b
36 #define FILE_DEVICE_SCREEN              0x0000001c
37 #define FILE_DEVICE_SOUND               0x0000001d
38 #define FILE_DEVICE_STREAMS             0x0000001e
39 #define FILE_DEVICE_TAPE                0x0000001f
40 #define FILE_DEVICE_TAPE_FILE_SYSTEM    0x00000020
41 #define FILE_DEVICE_TRANSPORT           0x00000021
42 #define FILE_DEVICE_UNKNOWN             0x00000022
43 #define FILE_DEVICE_VIDEO               0x00000023
44 #define FILE_DEVICE_VIRTUAL_DISK        0x00000024
45 #define FILE_DEVICE_WAVE_IN             0x00000025
46 #define FILE_DEVICE_WAVE_OUT            0x00000026
47 #define FILE_DEVICE_8042_PORT           0x00000027
48 #define FILE_DEVICE_NETWORK_REDIRECTOR  0x00000028
49 #define FILE_DEVICE_BATTERY             0x00000029
50 #define FILE_DEVICE_BUS_EXTENDER        0x0000002a
51 #define FILE_DEVICE_MODEM               0x0000002b
52 #define FILE_DEVICE_VDM                 0x0000002c
53 #define FILE_DEVICE_MASS_STORAGE        0x0000002d
54 #define FILE_DEVICE_SMB                 0x0000002e
55 #define FILE_DEVICE_KS                  0x0000002f
56 #define FILE_DEVICE_CHANGER             0x00000030
57 #define FILE_DEVICE_SMARTCARD           0x00000031
58 #define FILE_DEVICE_ACPI                0x00000032
59 #define FILE_DEVICE_DVD                 0x00000033
60 #define FILE_DEVICE_FULLSCREEN_VIDEO    0x00000034
61 #define FILE_DEVICE_DFS_FILE_SYSTEM     0x00000035
62 #define FILE_DEVICE_DFS_VOLUME          0x00000036
63 #define FILE_DEVICE_SERENUM             0x00000037
64 #define FILE_DEVICE_TERMSRV             0x00000038
65 #define FILE_DEVICE_KSEC                0x00000039
66 #define FILE_DEVICE_FIPS                0x0000003A
67 #define FILE_DEVICE_INFINIBAND          0x0000003B
68 #define FILE_DEVICE_VMBUS               0x0000003E
69 #define FILE_DEVICE_CRYPT_PROVIDER      0x0000003F
70 #define FILE_DEVICE_WPD                 0x00000040
71 #define FILE_DEVICE_BLUETOOTH           0x00000041
72 #define FILE_DEVICE_MT_COMPOSITE        0x00000042
73 #define FILE_DEVICE_MT_TRANSPORT        0x00000043
74 #define FILE_DEVICE_BIOMETRIC           0x00000044
75 #define FILE_DEVICE_PMI                 0x00000045
76 #define FILE_DEVICE_EHSTOR              0x00000046
77 #define FILE_DEVICE_DEVAPI              0x00000047
78 #define FILE_DEVICE_GPIO                0x00000048
79 #define FILE_DEVICE_USBEX               0x00000049
80 #define FILE_DEVICE_CONSOLE             0x00000050
81 #define FILE_DEVICE_NFP                 0x00000051
82 #define FILE_DEVICE_SYSENV              0x00000052
83 #define FILE_DEVICE_VIRTUAL_BLOCK       0x00000053
84 #define FILE_DEVICE_POINT_OF_SERVICE    0x00000054
85 #define FILE_DEVICE_STORAGE_REPLICATION 0x00000055
86 #define FILE_DEVICE_TRUST_ENV           0x00000056
87 #define FILE_DEVICE_UCM                 0x00000057
88 #define FILE_DEVICE_UCMTCPCI            0x00000058
89 #define FILE_DEVICE_PERSISTENT_MEMORY   0x00000059
90 #define FILE_DEVICE_NVDIMM              0x0000005a
91 #define FILE_DEVICE_HOLOGRAPHIC         0x0000005b
92 #define FILE_DEVICE_SDFXHCI             0x0000005c

设备类型代码

缓存方法:

1 // 定义I/O和FS控制如何传递缓存的方法代码
2 
3 #define METHOD_BUFFERED                 0
4 #define METHOD_IN_DIRECT                1
5 #define METHOD_OUT_DIRECT               2
6 #define METHOD_NEITHER                  3

缓存方法

Windows系统定义IOCTLS定义于winioctl.h文件中

System IOCTLS

IRP处理参考 生成的IOCTL对应IRP派遣函数 内核模式参见

Handling IRPs

  文件系统访问功能代码:https://msdn.microsoft.com/en-us/library/windows/hardware/ff548603(v=vs.85).aspx