CTL_CODE说明
2008-10-09 08:42
381 查看
本文来自:http://msdn.microsoft.com/en-us/library/ms904001.aspx 我们在说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(参数)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.
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. 举例说明一下: 我定义两个IOCTL,一个用于对设备的读,一个用于对设备的写 #define ATST2004_IOCTL_READ CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED, FILE_READ_DATA) #define ATST2004_IOCTL_WRITE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x801, METHOD_BUFFERED, FILE_WRITE_DATA) 在VC中使用不需要进行处理,假如我要在VB中使用这两个IOCTL,就需要进行查值计算了,计算后定义如下: Private Const ATST2004_IOCTL_READ = &H226000 Private Const ATST2004_IOCTL_WRITE = &H22A004 |