zoukankan      html  css  js  c++  java
  • IOCTL(CTL_CODE)

    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

    Defining I/O Control Codes

    IRP处理参考 生成的IOCTL对应IRP派遣函数 内核模式参见

    Handling IRPs

      文件系统访问功能代码:https://msdn.microsoft.com/en-us/library/windows/hardware/ff548603(v=vs.85).aspx

  • 相关阅读:
    c# 委托
    datagrid加下拉列表dropdownlist
    MySQL存储过程的基本函数(三)
    MySQL存储过程详解 mysql 存储过程(二)
    MySQL存储过程(一)
    SFTP 文件上传下载引用代码
    JAVA SFTP文件上传、下载及批量下载
    java中遍历MAP的几种方法
    POSTGRESQL 导入导出
    db2move 数据导出整理
  • 原文地址:https://www.cnblogs.com/jiaping/p/9739166.html
Copyright © 2011-2022 走看看