Windows内核学习笔记(五)-- 详解CTL_CODE宏
2009-07-25 09:26
369 查看
我们在说DeviceIoControl函数时其第二个参数dwIoControlCode就是由CTL_CODE宏定义的,下边我们可以了解一下CTL_CODE的内容。
CTL_CODE:用于创建一个唯一的32位系统I/O控制代码,这个控制代码包括4部分
组成:DeviceType(设备类型,高16位(16-31位)),Access(访问限制,14-15位),Function(功能2-13
位),Method(I/O访问内存使用方式)。
This macro creates a unique system I/O control code (IOCTL).
Defines the type of device for the given IOCTL.
This parameter can be no bigger than a WORD value.
The values used by Microsoft are in the range 0-32767; the values 32768-65535 are reserved for use by OEMs and IHVs.
The following device types are defined by the system:
FILE_DEVICE_BEEP
FILE_DEVICE_CD_ROM
FILE_DEVICE_CD_ROM_FILE_SYSTEM
FILE_DEVICE_CONTROLLER
FILE_DEVICE_DATALINK
FILE_DEVICE_DFS
FILE_DEVICE_DISK
FILE_DEVICE_DISK_FILE_SYSTEM
FILE_DEVICE_FILE_SYSTEM
FILE_DEVICE_INPORT_PORT
FILE_DEVICE_KEYBOARD
FILE_DEVICE_MAILSLOT
FILE_DEVICE_MIDI_IN
FILE_DEVICE_MIDI_OUT
FILE_DEVICE_MOUSE
FILE_DEVICE_MULTI_UNC_PROVIDER
FILE_DEVICE_NAMED_PIPE
FILE_DEVICE_NETWORK
FILE_DEVICE_NETWORK_BROWSER
FILE_DEVICE_NETWORK_FILE_SYSTEM
FILE_DEVICE_NULL
FILE_DEVICE_PARALLEL_PORT
FILE_DEVICE_PHYSICAL_NETCARD
FILE_DEVICE_PRINTER
FILE_DEVICE_SCANNER
FILE_DEVICE_SERIAL_MOUSE_PORT
FILE_DEVICE_SERIAL_PORT
FILE_DEVICE_SCREEN
FILE_DEVICE_SOUND
FILE_DEVICE_DEVICE_STREAMS
FILE_DEVICE_TAPE
FILE_DEVICE_TAPE_FILE_SYSTEM
FILE_DEVICE_TRANSPORT
FILE_DEVICE_UNKNOWN
FILE_DEVICE_VIDEO
FILE_DEVICE_VIRTUAL_DISK
FILE_DEVICE_WAVE_IN
FILE_DEVICE_WAVE_OUT
FILE_DEVICE_8042_PORT
FILE_DEVICE_NETWORK_REDIRECTOR
FILE_DEVICE_BATTERY
FILE_DEVICE_BUS_EXTENDER
FILE_DEVICE_MODEM
FILE_DEVICE_VDM
FILE_DEVICE_MASS_STORAGE
FILE_DEVICE_SMB
FILE_DEVICE_KS
FILE_DEVICE_CHANGER
FILE_DEVICE_SMARTCARD
FILE_DEVICE_ACPI
FILE_DEVICE_DVD
FILE_DEVICE_FULLSCREEN_VIDEO
FILE_DEVICE_DFS_FILE_SYSTEM
FILE_DEVICE_DFS_VOLUME
The following device types are specific to Windows CE:
FILE_DEVICE_HAL
FILE_DEVICE_CONSOLE
FILE_DEVICE_PSL
FILE_DEVICE_SERVICE
Function
Defines an action within the device category.
Function codes 0-2047 are reserved for Microsoft; codes 2048-4095 are reserved for OEMs and IHVs.
A function code can be no larger then 4095.
Method
Defines the method codes for how buffers are passed for I/O and file system controls.
The following values are possible for this parameter:
METHOD_BUFFERED
METHOD_IN_DIRECT
METHOD_OUT_DIRECT
METHOD_NEITHER
This field is ignored by Windows CE. You should always use the
METHOD_BUFFERED value unless compatibility with Windows-based desktop
platforms is required using a different Method
value.
Access
Defines the access check value for any access.
The following table shows the possible flags for this parameter. The FILE_ACCESS_ANY is generally the correct value.
codes. All IOCTLs must be defined this way to ensure that values used
by Microsoft, OEMs, and IHVs do not overlap.
The following illustration shows the format of the resulting IOCTL.
参考自:http://msdn.microsoft.com/en-us/library/ms904001.aspx
CTL_CODE:用于创建一个唯一的32位系统I/O控制代码,这个控制代码包括4部分
组成:DeviceType(设备类型,高16位(16-31位)),Access(访问限制,14-15位),Function(功能2-13
位),Method(I/O访问内存使用方式)。
This macro creates a unique system I/O control code (IOCTL).
#define CTL_CODE(DeviceType, Function, Method, Access) ( ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) )
Parameters(参数)
DeviceTypeDefines the type of device for the given IOCTL.
This parameter can be no bigger than a WORD value.
The values used by Microsoft are in the range 0-32767; the values 32768-65535 are reserved for use by OEMs and IHVs.
The following device types are defined by the system:
FILE_DEVICE_BEEP
FILE_DEVICE_CD_ROM
FILE_DEVICE_CD_ROM_FILE_SYSTEM
FILE_DEVICE_CONTROLLER
FILE_DEVICE_DATALINK
FILE_DEVICE_DFS
FILE_DEVICE_DISK
FILE_DEVICE_DISK_FILE_SYSTEM
FILE_DEVICE_FILE_SYSTEM
FILE_DEVICE_INPORT_PORT
FILE_DEVICE_KEYBOARD
FILE_DEVICE_MAILSLOT
FILE_DEVICE_MIDI_IN
FILE_DEVICE_MIDI_OUT
FILE_DEVICE_MOUSE
FILE_DEVICE_MULTI_UNC_PROVIDER
FILE_DEVICE_NAMED_PIPE
FILE_DEVICE_NETWORK
FILE_DEVICE_NETWORK_BROWSER
FILE_DEVICE_NETWORK_FILE_SYSTEM
FILE_DEVICE_NULL
FILE_DEVICE_PARALLEL_PORT
FILE_DEVICE_PHYSICAL_NETCARD
FILE_DEVICE_PRINTER
FILE_DEVICE_SCANNER
FILE_DEVICE_SERIAL_MOUSE_PORT
FILE_DEVICE_SERIAL_PORT
FILE_DEVICE_SCREEN
FILE_DEVICE_SOUND
FILE_DEVICE_DEVICE_STREAMS
FILE_DEVICE_TAPE
FILE_DEVICE_TAPE_FILE_SYSTEM
FILE_DEVICE_TRANSPORT
FILE_DEVICE_UNKNOWN
FILE_DEVICE_VIDEO
FILE_DEVICE_VIRTUAL_DISK
FILE_DEVICE_WAVE_IN
FILE_DEVICE_WAVE_OUT
FILE_DEVICE_8042_PORT
FILE_DEVICE_NETWORK_REDIRECTOR
FILE_DEVICE_BATTERY
FILE_DEVICE_BUS_EXTENDER
FILE_DEVICE_MODEM
FILE_DEVICE_VDM
FILE_DEVICE_MASS_STORAGE
FILE_DEVICE_SMB
FILE_DEVICE_KS
FILE_DEVICE_CHANGER
FILE_DEVICE_SMARTCARD
FILE_DEVICE_ACPI
FILE_DEVICE_DVD
FILE_DEVICE_FULLSCREEN_VIDEO
FILE_DEVICE_DFS_FILE_SYSTEM
FILE_DEVICE_DFS_VOLUME
The following device types are specific to Windows CE:
FILE_DEVICE_HAL
FILE_DEVICE_CONSOLE
FILE_DEVICE_PSL
FILE_DEVICE_SERVICE
Function
Defines an action within the device category.
Function codes 0-2047 are reserved for Microsoft; codes 2048-4095 are reserved for OEMs and IHVs.
A function code can be no larger then 4095.
Method
Defines the method codes for how buffers are passed for I/O and file system controls.
The following values are possible for this parameter:
METHOD_BUFFERED
METHOD_IN_DIRECT
METHOD_OUT_DIRECT
METHOD_NEITHER
This field is ignored by Windows CE. You should always use the
METHOD_BUFFERED value unless compatibility with Windows-based desktop
platforms is required using a different Method
value.
Access
Defines the access check value for any access.
The following table shows the possible flags for this parameter. The FILE_ACCESS_ANY is generally the correct value.
Flag | Description |
---|---|
FILE_ANY_ACCESS | Request all access. |
FILE_READ_ACCESS | Request read access. Can be used with FILE_WRITE_ACCESS. |
FILE_WRITE_ACCESS | Request write access. Can be used with FILE_READ_ACCESS. |
Return Values(返回值)
None.Remarks(备注)
The macro can be used for defining IOCTL and FSCTL function controlcodes. All IOCTLs must be defined this way to ensure that values used
by Microsoft, OEMs, and IHVs do not overlap.
The following illustration shows the format of the resulting IOCTL.
参考自:http://msdn.microsoft.com/en-us/library/ms904001.aspx
相关文章推荐
- Windows内核学习笔记(三)-- IRP请求处理及完成机制
- Windows内核学习笔记(二)-- IoCallDriver函数与PoCallDriver函数
- 无法编译出.sys文件 寒江孤钓<<windows 内核安全编程>> 学习笔记
- FreeRTOS系列学习笔记三---FreeRTOS内核详解LIST(9.0版本)
- 删除自定义服务 寒江孤钓<<windows 内核安全编程>> 学习笔记
- windows驱动开发详解学习笔记
- Windows内核学习笔记(一)--浅谈驱动对象、设备对象与请求
- Windows内核学习笔记(一)
- [学习笔记]在windows下编译内核[大杂烩]
- ERROR: Symbol file could not be found 寒江孤钓<<windows 内核安全编程>> 学习笔记
- WINDOWS内核学习笔记1—Shadow SSDT表
- Windows内核学习笔记(四)-- 编写程序手动加载驱动程序
- Windows内核学习笔记-- 编写程序手动加载驱动程序
- FreeRTOS系列学习笔记二---FreeRTOS内核详解LIST
- Win内核原理与实现学习笔记3-windows系统结构
- Windows内核学习笔记
- windows via c/c++ 学习笔记(二) 内核同步
- Windows内核学习笔记(六)-- [总结]创建IRP的四种不同方式
- Debuggee not connected 寒江孤钓<<windows 内核安全编程>> 学习笔记
- 发生系统错误 1275.此驱动程序被阻止加载 寒江孤钓<<windows 内核安全编程>> 学习笔记