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

推荐订阅源

L
LangChain Blog
V
V2EX
爱范儿
爱范儿
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Martin Fowler
Martin Fowler
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Apple Machine Learning Research
Apple Machine Learning Research
WordPress大学
WordPress大学
有赞技术团队
有赞技术团队
宝玉的分享
宝玉的分享
Last Week in AI
Last Week in AI
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
罗磊的独立博客
小众软件
小众软件
Vercel News
Vercel News
博客园 - 司徒正美
阮一峰的网络日志
阮一峰的网络日志
V
Visual Studio Blog
J
Java Code Geeks
P
Proofpoint News Feed
MongoDB | Blog
MongoDB | Blog
B
Blog
美团技术团队
量子位

博客园 - 平凡人

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