DeviceIoControl
DeviceIoControl是kernel32中的函数,包含的头文件为winbase.h。
BOOL DeviceIoControl(
HANDLE hDevice, // 设备句柄
DWORD dwIoControlCode, // Io控制命令
LPVOID lpInBuffer, // 应用程序传递给驱动程序的输入缓冲区指针
DWORD nInBufferSize, // 应用程序传递给驱动程序的输入缓冲区字节数
LPVOID lpOutBuffer, // 驱动程序返回给应用程序的输出缓冲区指针
DWORD nOutBufferSize, // 驱动程序返回给应用程序的输出缓冲区字节数
LPDWORD lpBytesReturned, // 返回输出字节数
LPOVERLAPPED lpOverlapped // 异步调用时指向的OVERLAPPED指针
); // 返回:非0成功;0失败,并设置GetLastError()
第一个参数hDevice是操作设备的句柄,该句柄要通过CreateFile的返回值获取。
IoControlCode由四部分组成:DeviceType、Access、Function、Method。
DeviceType表示设备类型;
Access表示对设备的访问权限;
Function表示设备IoControl的功能号,0~0x7ff为微软保留,0x800~0xfff由程序员自己定义;
Method表示Ring3/Ring0的通信中的内存访问方式,有四种方式:
1)#define METHOD_BUFFERED 0
2)#define METHOD_IN_DIRECT 1
3)#define METHOD_OUT_DIRECT 2
4)#define METHOD_NEITHER 3
DeviceIoControl的更多相关文章
- DeviceIoControl 应用层如何和驱动层通信?
调用的方法之一的DeviceIoControl 驱动层提供设备名 例如filedisk 在驱动层 首先先是注册列表 用winObj查看 filedisk的驱动对象 但是 这八个对象时怎么生成的呢? 我 ...
- 实战DeviceIoControl 之中的一个:通过API訪问设备驱动程序
P.bhw98 { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 9pt; PADDING-BOTTOM: 0px; MARGIN: 10px 0 ...
- DeviceIoControl 直接从磁盘扇区读文件
好久没写博客了,近期看了下DeviceIoControl 关于磁盘的应用,特记一文,以备久后查阅. 首先介绍下,文件在磁盘的存储结构(详细能够到网上查询NTFS文件系统相关的教程后者数据恢复方面教程 ...
- DeviceIoControl的使用说明
应用程序和驱动程序的通信过程是:应用程序使用CreateFile函数打开设备,然后用DeviceIoControl与驱动程序进行通信,包含读和写两种操作.还能够用ReadFile读数据用WriteFi ...
- DeviceIOControl具体解释-各个击破
DeviceIoControl这个api我们用的不多,可是非常重要,有时会帮助我们实现一些特别的需求, 如获取硬件设备信息.与硬件设备通信(读写数据)等,对比msdn,以下我们详解一下这个api的使用 ...
- DeviceIoControl方式 sys和exe通信
常识: IRP:I/O Request Package 即输入输出请求包 exe和sys通信时,exe会发出I/O请求.操作系统会将I/O请求转化为相应的IRP数据, 不同类型传递到不同的d ...
- 实战DeviceIoControl 之六:访问物理端口
Q 在NT/2000/XP中,如何读取CMOS数据? Q 在NT/2000/XP中,如何控制speaker发声? Q 在NT/2000/XP中,如何直接访问物理端口? A 看似小小问题,难倒多少好汉! ...
- 实战DeviceIoControl 之四:获取硬盘的详细信息
Q 用IOCTL_DISK_GET_DRIVE_GEOMETRY或IOCTL_STORAGE_GET_MEDIA_TYPES_EX只能得到很少的磁盘参数,我想获得包括硬盘序列号在内的更加详细的信息,有 ...
- 实战DeviceIoControl 之五:列举已安装的存储设备
Q 前几次我们讨论的都是设备名比较清楚的情况,有了设备名(路径),就可以直接调用CreateFile打开设备,进行它所支持的I/O操作了.如果事先并不能确切知道设备名,如何去访问设备呢? A 访问设备 ...
随机推荐
- soap和wsdl的定义
SOAP(Simple Object Access Protocol)是一个严格定义的信息交换协议,用于在Web Service中把远程调用和返回封装成机器可读的格式化数据.事实上SOAP数据使用XM ...
- java虚拟机内部介绍
一.介绍 java 的内存管理和垃圾回收在某种程度是同一个问题来着.对于java程序员来说,在虚拟机自动内存管理机制的帮助下,不在需要为每一个new操作去写配对的delete/free代码,不容易出现 ...
- js解析php数组
<script language="javascript"> var str; //$file = 'config/config.xml'; str = '<?p ...
- li ul 说明
复制代码代码如下: <div id="menu"> <ul> <li><a href="#">首页</ ...
- python学习笔记系列----(二)控制流
实际开始看这一章节的时候,觉得都不想看了,因为每种语言都会有控制流,感觉好像我不看就会了似的.快速预览的时候,发现了原来还包含了对函数定义的一些描述,重点讲了3种函数形参的定义方法,章节的最后讲述了P ...
- 使用Log4Net完成异常日志处理
1.在MVC的Modal文件夹建一个异常处理过滤器 public class MyExceptionAttribute:HandleErrorAttribute { public static Que ...
- PHP获取毫秒时间戳,利用microtime()函数
PHP获取毫秒时间戳,利用microtime()函数 php本身没有提供返回毫秒数的函数,但提供了一个microtime()函数,借助此函数,可以很容易定义一个返回毫秒数的函数.php的毫秒是没有默认 ...
- maven nexus
部署nexus步骤: 1.下载解压安装包到指定目录 2.设置环境变量(当然还有JAVA,jdk) 3.在配置文件(G:\nexus\nexus-2.3.1-01-bundle\nexus-2.3.1- ...
- 完整成功配置wamp server小记
首先安装最新版本的wamp server,这是必须的! 配置默认”www目录”的路径(可选):下面以改为D:\site为例.打开wamp\scripts\config.inc.php第47行,$www ...
- centos 基本操作(快捷键开户终端,复制,粘贴,yum命令)
centos 开启终端默认时不禁止的,所以得手动开启(可自定义键盘)菜单:System->Preferences->Keyboard Shortcuts在Desktop分类下找到“Run ...