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使用的值不重叠。
CTL_CODE 宏 详解的更多相关文章
- 预定义宏,C语言预定义的宏详解
1.预定义宏 对于预定义宏,相信大家并不陌生.为了方便处理一些有用的信息,预处理器定义了一些预处理标识符,也就是预定义宏.预定义宏的名称都是以"__"(两条下划线)开头和结尾的,如 ...
- container_of 和 offsetof 宏详解
在linux内核链表中,会遇到两个宏. 在include/linux/stddef.h中,有这样的定义 #define offsetof(TYPE, MEMBER) ((size_t) &(( ...
- (转)C/C++ 宏详解
众多C++书籍都忠告我们C语言宏是万恶之首,但事情总不如我们想象的那么坏,就如同goto一样.宏有一个很大的作用,就是自动为我们产生代码.如果说模板可以为我们产生各种型别的代码(型别替换),那么宏其实 ...
- C++宏定义详解
一.#define的基本用法 #define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质 ...
- [转]C++宏定义详解
一.#define的基本用法 #define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质 ...
- 【转载】C++宏定义详解
摘自:http://blog.chinaunix.net/uid-21372424-id-119797.html C++宏定义详解 2011-02-14 23:33:24 分类: C/C++ ...
- [C++] C++中的宏定义详解
转载自:C++中的宏定义 和 C++宏定义详解 一.#define解析 #define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率 ...
- [转帖]基于VIM漏洞CVE-2019-12735的VIM宏后门病毒详解
基于VIM漏洞CVE-2019-12735的VIM宏后门病毒详解 不明觉厉 只要是人做的东西 就会有bug 就会有安全问题 就看发现bug 或者是发现安全问题 有没有收益了 会用linux的都是比较熟 ...
- (转载) Linux IO模式及 select、poll、epoll详解
注:本文是对众多博客的学习和总结,可能存在理解错误.请带着怀疑的眼光,同时如果有错误希望能指出. 同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案 ...
随机推荐
- OpenGL ES 2.0 内置变量
1. 顶点着色器中的内置变量 输出变量 gl_Position(vec4):顶点数据位置gl_PointSize(float):计算一个点的大小 2.片元着色器中的内置变量 输入变量gl_FragCo ...
- Python爬虫——抓取糗百段子
在别人博客里学习的 抓取糗百段子,由于糗百不断的更新,代码需要改正. 抓取网页:http://www.qiushibaike.com/hot/page/1 修改后的代码如下: # -*- coding ...
- C#按键打开文件选择对话框,并把选择好的路径保存/显示到textBox
1.选择文件夹 FolderBrowserDialog fbd = new FolderBrowserDialog(); fbd.SelectedPath = "D:";//默认路 ...
- 如何利用putty的密钥登陆
1.登陆主机,输入:mkdir /root/.ssh(创建SSH密钥目录) touch /root/.ssh/authorized_keys (创建SSH密钥文件): 2.输入:vi /root/ ...
- Yum中实现与apt-get install build-essential功能类似的命令
在Ubuntu中安装完系统后,可以直接使用apt-get install build-essential命令安装常用的开发编译工具包.在诸如CentOS这样的使用Yum包管理的系统中,其实也有类似的实 ...
- Hibernate配置文件中映射元素详解
对象标识符号 在关系数据库表中,主键(Primary Key)用来识别记录,并保证每条记录的唯一性.在Java语言中,通过比较两个变量所引用对象的内存地址是否相同,或者比较两个变量引用的对象值是否相同 ...
- Lua绑定C++类
原文:http://blog.csdn.net/chenee543216/article/details/12074771 以下是代码: Animal.h文件 #pragma once #ifndef ...
- IOS 面试 --- 网络部分
网络部分 3 做过的项目是否涉及网络访问功能,使用什么对象完成网络功能? 答案:ASIHTTPRequest与NSURLConnection 4 简单介绍下NSURLConnection类及+ sen ...
- ACM训练计划step 2 [非原创]
(Step2-500题)POJ训练计划+SGU 经过Step1-500题训练,接下来可以开始Step2-500题,包括POJ训练计划的298题和SGU前两章200题.需要1-1年半时间继续提高解决问题 ...
- Verilog 模块参数重定义(转)
Verilog重载模块参数: 当一个模块引用另外一个模块时,高层模块可以改变低层模块用parameter定义的参数值,改变低层模块的参数值可采用以下两种方式: 1)defparam 重定义参数语法:d ...