DeviceIOControl具体解释-各个击破

DeviceIoControl这个api我们用的不多,可是非常重要,有时会帮助我们实现一些特别的需求, 如获取硬件设备信息、与硬件设备通信(读写数据)等,对比msdn,以下我们详解一下这个api的使用方法(有什么错误再所难免,各位不吝不吝赐教啊)。
DeviceIoControl是用来控制我们指定设备的输入输出操作,使设备依照我们发的指令去工作。

DeviceIoControl是kernel32中的函数,须要包括的头文件是winbase.h,先看函数原型

BOOL DeviceIoControl(HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped
);

哈哈,參数不少,并且还都非常抽象,没关系,我们一个一个击破它

来到第一个參数,hDevice,当然是要操作的设备的句柄了,这个句柄须要通过CreateFile的返回值中获取,对于createfile这里仅仅做一个粗略的解释:

  • HANDLE CreateFile(LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile
    ); 

參数:要打开的文件名称,訪问权限,共享模式,安全属性,文件存在与不存在时的文件创建模式,文件属性设定(隐藏、仅仅读、压缩、指定为系统文件等),文件副本句柄。要说明的是第一个參数lpFileName,是设备的名称或者是和设备关连的驱动的名称,一般用\\.\DeviceName的形式,比方要打开逻辑驱动盘A就用\\.\a,也能够用\\.\PhysicalDevice0,\\.\PhsycalDebive1来指定物理驱动器,\\.\PhysicalDevice0表示本机的物理驱动器0(通常是主硬盘),从而来获取硬盘的序列号、模块名、扇区数、磁头数等相关信息

搞定hDevice!

dwIoControlCode: 当然就是控制设备的指令了,指令怎么来是个问题,微软已经定义好了非常多种操作,在winioctl.h文件里,但终于都是通过CTL_CODE宏来实现的,事实上这就是一种通信协议。CTL_CODE的具体使用方法在最后来介绍。

lpInBuffer: 设备操控请求数据的缓冲区基址,假设dwIoControlCode 指定了一个操作,该操作不须要输入数据,那么这个參数设为NULL

nInBufferSizelplnBuffer的size

lpOutBuffer:存放输出数据的buffer,相同,假设dwIoControlCode 指定了一个操作,该操作不须要处理输出数据,那么这个參数设为NULL

nOutBufferSizehaha,别说你不知道什么什么意思,pass

lpBytesReturned实际输出数据的bytes

lpOverlappedIgnored; set to NULL.(Are you understand?)

以下来到第二个參数的具体解释,CTL_CODE的定义与应用:

CTL_CODE原型:

#define CTL_CODE(DeviceType, Function, Method, Access) (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method)
)

能够看到,这个宏四个參数,自然是一个32位分成了4部分,高16位存储设备类型( 这里不列举了,看msdn哦),14~15位訪问权限,2~13位操作功能,最后一个就是确定缓冲区(别忘记上面DeviceIOControl中缓冲区的定义哦)是怎样与I/O和文件系统数据缓冲区进行数据传递的方式(详细取值查看msdn)我们最经常使用的就是METHOD_BUFFERED

Function codes 0-2047 are reserved for Microsoft; codes 2048-4095 are reserved for OEMs and IHVs. (我们能用的是2048~4095)

看下面一段:

这个宏经经常使用来定义IOCTL(I/O控制)和FSCTL(文件系统控制)功能控制代码,全部的IOCTLs必须通过这样的方式定义,以确保这些指令能被Microsoft,以及其它的硬件厂商通信接口所识别

The following illustration shows the format of the resulting IOCTL.

援引微软定义的一个指令:锁卷

#define FSCTL_LOCK_VOLUME               CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  6, METHOD_BUFFERED, FILE_ANY_ACCESS)

Game over!

转载于:https://www.cnblogs.com/mfrbuaa/p/4265241.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/492561.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

互联网+检验检测智能化成发展趋势

来源&#xff1a;传感器技术摘要&#xff1a;随着工业自动化技术的迅猛发展&#xff0c;智能检测技术被广泛地应用在工业自动化、化工、军事、航天、通讯、医疗、电子等行业&#xff0c;是自动化科学技术的一个格外重要的分支科学。众所周知&#xff0c;智能检测技术是在仪器仪…

与||符号

[dehuateacher ~]$ [ "$(id -u)" -eq "0" ] && echo you are root || echo you must be rootyou must be root[dehuateacher ~]$ id -u501&& 与符号 || 或符号&&如果前面的命令执行成功则执行&&后的命令否则执行||后面的命…

5G、物联网和AI结合的究极形态是什么?一文看尽智能连接在5大领域的12个典型案例!...

来源&#xff1a;IoT Analytics编译&#xff1a;物联网智库摘要&#xff1a;智能连接&#xff08;Intelligent connectivity&#xff09;是一种全新的概念——未来&#xff0c;5G、AI和物联网的融合能够成为加速科技发展的催化剂&#xff0c;并催生出新的颠覆式的数字化服务。基…

10天学安卓-第二天

10天学安卓-第二天 原文:10天学安卓-第二天继续我们的学习。 相信我&#xff0c;第一天的工作是最为重要的&#xff0c;通过这些工作&#xff0c;我们把开发安卓所必须的环境、基础条件都配置好了&#xff0c;相信肯定遇到了很多问题&#xff0c;不过&#xff0c;根据我的经验&…

德国费斯托又双叒叕更新,象鼻子机械臂+超逼真仿生手,比人手都强大

来源&#xff1a;机器人大讲堂编辑&#xff1a;海蛟摘要&#xff1a;在机器人领域&#xff0c;小编最佩服两家公司&#xff0c;一家是波士顿动力&#xff0c;另一家就是费斯托。费斯托这家源自德国的公司以平均每年更新2-3款仿生机器人的速度&#xff0c;扩充着它们的仿生机器人…

C++拾遗(四)——顺序容器

之前一篇博文&#xff08;《初窥标准库》&#xff09;简单了解了一种最常用的顺序容器&#xff1a;vector类型。本文将对该文内容进行进一步的学习和完善&#xff0c;继续讨论标准库提供的顺序容器类型。所谓顺序容器&#xff0c;即将单一类型的元素聚集起来成为容器&#xff0…

MySQL两种表存储结构MyISAM和InnoDB的性能比较测试

转载 http://www.jb51.net/article/5620.htm MySQL支持的两种主要表存储格式MyISAM&#xff0c;InnoDB&#xff0c;上个月做个项目时&#xff0c;先使用了InnoDB&#xff0c;结果速度特别慢&#xff0c;1秒钟只能插入10几条。后来换成MyISAM格式&#xff0c;一秒钟插入上万条。…

微软全球执行副总裁沈向洋:你给自己的定位是什么,你就会得到什么

来源&#xff1a;AI 科技评论摘要&#xff1a;沈向洋&#xff0c;美国国家工程院院士、微软全球执行副总裁、ACM/IEEE Fellow。多年来&#xff0c;沈向洋专注于计算机视觉和计算机图形学的研究&#xff0c;并领导和开发了 Bing 搜索。目前&#xff0c;他是微软公司级别最高的中…

Linux例行工作crontab

第一步编辑要定时执行的脚本&#xff1a; myScript.sh myScript.sh的内容为&#xff1a;touch /root/date %F %T.txt 为myScript.sh增加可执行权限&#xff1a;chmod x myScript.sh 第二步增加定时任务&#xff1a; crontab -e 内容如下&#xff1a; */2 * * * * /root/myScri…

用互联网大脑模型分析5G重点影响的6个科技产业

作者&#xff1a;刘锋 计算机博士&#xff0c;《互联网进化论》作者5G是指第五代移动电话行动近信标准&#xff0c;也称第五代移动通信技术&#xff0c;是4G之后的延伸&#xff0c;其峰值理论传输速度可达每秒数十Gb。对比4G的主要提高如下&#xff1a;5G的速度将达到4G的100倍…

ubuntu 安装yar和使用

可能你的安装 会出现一些依赖 一般可能是 缺少 m4 autoconf 鸟哥博客:http://www.laruence.com/2012/09/15/2779.html 安装yar 先安装msgpack https://github.com/msgpack/msgpack-php whichis phpize 比如我的在:/usr/local/php/bin/phpize 一般php-config也在这里 我的ms…

Gartner:2019年十大数据与分析技术趋势

来源&#xff1a;网络大数据近日&#xff0c;全球领先的信息技术研究和顾问公司Gartner指出&#xff0c;增强型分析(augmented analytics)、持续型智能(continuous intelligence)与可解释型人工智能(explainable AI)是数据与分析(data and analytics)技术领域内的主要趋势之一&…

UG/Open API基础知识-语法1

UG/Open API语法-数据类型数据类型struct-声明结构体变量union-声明联合数据类型enum-声明枚举类型枚举与#define宏的区别typedef-用于给数据类型取别名(当然还有其他作用)数据类型 UG/Open API编程接口是C语言的语法格式&#xff0c;因而&#xff0c;它支持C语言的标准数据类…

Gearman + Nodejs + MySQL UDF异步实现 MySQL 到 Redis 的数据同步

目录 1, 环境2, Redis简介3, Gearman简介4, MySQL - Redis配合使用方案4, 软件安装5, MySQL UDF Trigger同步数据到Gearman6, 参考资料1, 环境 CentOS, MySQL, Redis, Nodejs 2, Redis简介 Redis是一个开源的K-V内存数据库&#xff0c;它的key可以是string/set/hash/list/...&…

python函数实现求非负实数平方根,在shell里调用

编写python函数实现求非负实数平方根&#xff0c;在shell里调用算法牛顿迭代法描述如下函数代码调用函数算法 牛顿迭代法 利用切线逼近曲线&#xff0c;求曲线零点&#xff0c;对于曲线 yf(x)y f(x)yf(x),采用迭代的方法求其零点&#xff0c;在点&#xff08;xn,f(xn)&#…

5G风起,四大IoT迎风爆发!智能家居与电表高速增长

来源&#xff1a;智东西摘要&#xff1a;深度剖析智能家居、智能城市、车联网、网联无人机四大领域新机遇。2018年&#xff0c;我国物联网&#xff08;IoT&#xff09;连接数从2017年的15.4亿飙升至30.63亿&#xff0c;几近增长了100%&#xff0c;增速喜人。而在这组数据背后&a…

机器学习基石笔记5——为什么机器可以学习(1)

转载请注明出处&#xff1a;http://www.cnblogs.com/ymingjingr/p/4271742.html 目录 机器学习基石笔记1——在何时可以使用机器学习(1) 机器学习基石笔记2——在何时可以使用机器学习(2) 机器学习基石笔记3——在何时可以使用机器学习(3)(修改版) 机器学习基石笔记4——在何时…

PPT|工业互联网关键技术专利态势

来源&#xff1a;中国信通院CAICT摘要&#xff1a;《工业互联网关键技术专利态势分析&#xff08;2019&#xff09;》对工业互联网的三个重要体系进行深入知识产权分析。以下PPT资料是工业互联网产业联盟和中国信通院团队对《工业互联网关键技术专利态势分析&#xff08;2019&a…

由二分查找算法学习算法的时间复杂度

文章目录二分查找数据算法函数代码调用函数大OOO表示法表示算法运行速度一些常见的大 OOO 运行时间启示&#xff1a;二分查找 二分查找是一种算法&#xff0c;其输入是一个有序的元素列表和要查找的元素。如果要查找的元素包含在列表中&#xff0c;二分查找返回其位置&#xf…

生命简史——跨越地球40亿年

来源&#xff1a;新原理研究所摘要&#xff1a;你一定也曾好奇过&#xff0c;地球上的生命究竟是如何起源和演化的&#xff1f;它又是如何从简单的原核细胞不断地演化成复杂的多细胞&#xff1f;如此多元化的物种是如何进化而成的&#xff1f;每一次变化都历经了怎样的挑战与压…