zoukankan      html  css  js  c++  java
  • CTL_CODE 宏 详解

    CTL_CODE宏

    CTL_CODE:用于创建一个唯一的32位系统I/O控制代码,这个控制代码包括4部分组成:

    DeviceType(设备类型,高16位(16-31位)),

    Function(功能2-13 位),

    Method(I/O访问内存使用方式),

    Access(访问限制,14-15位)。

    这个宏创建一个独特的系统I/O(输入输出)控制代码(IOCTL)。

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

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

    如例:

    #include <winioctl.h>//用于创建一个唯一的32位系统 I/O 控制代码,这个控制代码包括4部分组成
    
    #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS)
    
    #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x801,METHOD_BUFFERED,FILE_ANY_ACCESS)

    Parameters(参数)

    CTL_CODE:用于创建一个唯一的32位系统I/O控制代码,这个控制代码包括4部分组成:

    DeviceType(设备类型,高16位(16-31位)),

    Function(功能2-13 位),

    Method(I/O访问内存使用方式),

    Access(访问限制,14-15位)。


    DeviceType     给发送控制代码的设备定义一个设备类型。
    微软使用的值的范围是0-32767;值32768-65535是由OEM和IHV使用保留。
    下面的设备类型由系统定义的(枚举):

    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

    以下是Windows CE系统的设备类型:

    FILE_DEVICE_HAL
    FILE_DEVICE_CONSOLE
    FILE_DEVICE_PSL
    FILE_DEVICE_SERVICE

    Function    为以上设备类型定义一个设备的唯一标识功能号。
    CODE的唯一标识功能号用十六进制表示,转换为十进制后的有效范围是:0-2047是保留给微软;代码2048-4095是为OEM和IHV保留。其它功能代码定义大于4095。

    Method      I/O访问内存使用方式

    让编码缓冲区按(枚举)方法来通过I/O和文件系统控制

    METHOD_BUFFERED
    METHOD_IN_DIRECT
    METHOD_OUT_DIRECT
    METHOD_NEITHER
    此字段被忽略的Windows CE(枚举)。你应该总是使用METHOD_BUFFERED值,除非与基于Windows的桌面平台的兼容性是需要使用不同的方法

    Access       访问限制

    下表显示了此参数的可能标志(枚举)。该FILE_ANY_ACCESS 通常是正确的值。

    FILE_ANY_ACCESS        所有访问请求。
    FILE_READ_ACCESS       请求读取访问。可以用于FILE_WRITE_ACCESS。
    FILE_WRITE_ACCESS     请求读写访问。可以用于FILE_READ_ACCESS。

    Return Values(返回值)
    没有返回值。

    Remarks(备注)
    宏可以被用来定义IOCTL和FSCTL功能控制代码。所有的IOCTL必须以这种方式定义,以确保由微软,OEM厂商,和IHV使用的值不重叠。

  • 相关阅读:
    MCU开发之I2C通信
    hibernate特殊的映射
    Hibernate使用
    css设置让a标签充满整个li
    margin
    border属性
    列表
    链接样式
    相机内参外参
    tmux
  • 原文地址:https://www.cnblogs.com/lfls128/p/4982309.html
Copyright © 2011-2022 走看看