您的位置:首页 > 其它

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).

#define CTL_CODE(DeviceType, Function, Method, Access) (

((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method)

)


Parameters(参数)

DeviceType

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.

FlagDescription
FILE_ANY_ACCESSRequest all access.
FILE_READ_ACCESSRequest read access. Can be used with FILE_WRITE_ACCESS.
FILE_WRITE_ACCESSRequest write access. Can be used with FILE_READ_ACCESS.

Return Values(返回值)

None.

Remarks(备注)

The macro can be used for defining IOCTL and FSCTL function control
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: