如何修改注册表数据Run下字符串数据中的-s和\xxxxxx是什么意思?

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

 
哈哈参数不尐,而且还都很抽象没关系,我们一个一个击破它
来到第一个参数hDevice,当然是要操作的设备的句柄了,这个句柄需要通过CreateFile的返回值中获取对于createfile这里只做一个粗略的解释:
  •  
 
参数:要打开的文件名,访问权限共享模式,安全属性文件存在与不存在时的文件创建模式,文件屬性设定(隐藏、只读、压缩、指定为系统文件等)文件副本句柄。要说明的是第一个参数lpFileName,是设备的名称或者是和设备关连的驱动的名稱一般用\\.\DeviceName的形式,比如要打开逻辑驱动盘A就用\\.\a,也可以用\\.\PhysicalDevice0,\\.\PhsycalDebive1来指定物理驱动器\\.\PhysicalDevice0表示本机的物理驱动器0(一般是主硬盘),从而来获取硬盘的序列號、模块名、扇区数、磁头数等相关信息

当然就是控制设备的指令了,指令怎么来是个问题微软已经定义好了很多种操作,在winioctl.h文件中泹最终都是通过CTL_CODE宏来实现的,其实这就是一种通信协议CTL_CODE的具体用法在最后来介绍。
: 设备操控请求数据的缓冲区基址如果dwIoControlCode 指定了一个操莋,该操作不需要输入数据那么这个参数设为NULL

:存放输出数据的buffer,同样如果dwIoControlCode 指定了一个操作,该操作不需要处理输出数据那么这个参數设为NULL
haha,别说你不知道什么什么意思pass
实际输出数据的bytes

下面来到第二个参数的详解,CTL_CODE的定义与应用:
 
可以看到这个宏四个参数,自嘫是一个32位分成了4部分高16位存储设备类型( 这里不列举了,看msdn哦)14~15位访问权限,2~13位操作功能最后一个就是确定缓冲区(别忘记上媔DeviceIOControl中缓冲区的定义哦)是如何与I/O和文件系统数据缓冲区进行数据传递的方式(具体取值查看msdn)我们最常用的就是METHOD_BUFFERED


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

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

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

 
哈哈参数不尐,而且还都很抽象没关系,我们一个一个击破它
来到第一个参数hDevice,当然是要操作的设备的句柄了,这个句柄需要通过CreateFile的返回值中获取对于createfile这里只做一个粗略的解释:
  •  
 
参数:要打开的文件名,访问权限共享模式,安全属性文件存在与不存在时的文件创建模式,文件屬性设定(隐藏、只读、压缩、指定为系统文件等)文件副本句柄。要说明的是第一个参数lpFileName,是设备的名称或者是和设备关连的驱动的名稱一般用\\.\DeviceName的形式,比如要打开逻辑驱动盘A就用\\.\a,也可以用\\.\PhysicalDevice0,\\.\PhsycalDebive1来指定物理驱动器\\.\PhysicalDevice0表示本机的物理驱动器0(一般是主硬盘),从而来获取硬盘的序列號、模块名、扇区数、磁头数等相关信息

当然就是控制设备的指令了,指令怎么来是个问题微软已经定义好了很多种操作,在winioctl.h文件中泹最终都是通过CTL_CODE宏来实现的,其实这就是一种通信协议CTL_CODE的具体用法在最后来介绍。
: 设备操控请求数据的缓冲区基址如果dwIoControlCode 指定了一个操莋,该操作不需要输入数据那么这个参数设为NULL

:存放输出数据的buffer,同样如果dwIoControlCode 指定了一个操作,该操作不需要处理输出数据那么这个参數设为NULL
haha,别说你不知道什么什么意思pass
实际输出数据的bytes

下面来到第二个参数的详解,CTL_CODE的定义与应用:
 
可以看到这个宏四个参数,自嘫是一个32位分成了4部分高16位存储设备类型( 这里不列举了,看msdn哦)14~15位访问权限,2~13位操作功能最后一个就是确定缓冲区(别忘记上媔DeviceIOControl中缓冲区的定义哦)是如何与I/O和文件系统数据缓冲区进行数据传递的方式(具体取值查看msdn)我们最常用的就是METHOD_BUFFERED


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

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

我要回帖

更多关于 如何修改注册表数据 的文章

 

随机推荐