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的更多相关文章

  1. DeviceIoControl 应用层如何和驱动层通信?

    调用的方法之一的DeviceIoControl 驱动层提供设备名 例如filedisk 在驱动层 首先先是注册列表 用winObj查看 filedisk的驱动对象 但是 这八个对象时怎么生成的呢? 我 ...

  2. 实战DeviceIoControl 之中的一个:通过API訪问设备驱动程序

    P.bhw98 { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 9pt; PADDING-BOTTOM: 0px; MARGIN: 10px 0 ...

  3. DeviceIoControl 直接从磁盘扇区读文件

    好久没写博客了,近期看了下DeviceIoControl  关于磁盘的应用,特记一文,以备久后查阅. 首先介绍下,文件在磁盘的存储结构(详细能够到网上查询NTFS文件系统相关的教程后者数据恢复方面教程 ...

  4. DeviceIoControl的使用说明

    应用程序和驱动程序的通信过程是:应用程序使用CreateFile函数打开设备,然后用DeviceIoControl与驱动程序进行通信,包含读和写两种操作.还能够用ReadFile读数据用WriteFi ...

  5. DeviceIOControl具体解释-各个击破

    DeviceIoControl这个api我们用的不多,可是非常重要,有时会帮助我们实现一些特别的需求, 如获取硬件设备信息.与硬件设备通信(读写数据)等,对比msdn,以下我们详解一下这个api的使用 ...

  6. DeviceIoControl方式 sys和exe通信

        常识: IRP:I/O Request Package  即输入输出请求包 exe和sys通信时,exe会发出I/O请求.操作系统会将I/O请求转化为相应的IRP数据, 不同类型传递到不同的d ...

  7. 实战DeviceIoControl 之六:访问物理端口

    Q 在NT/2000/XP中,如何读取CMOS数据? Q 在NT/2000/XP中,如何控制speaker发声? Q 在NT/2000/XP中,如何直接访问物理端口? A 看似小小问题,难倒多少好汉! ...

  8. 实战DeviceIoControl 之四:获取硬盘的详细信息

    Q 用IOCTL_DISK_GET_DRIVE_GEOMETRY或IOCTL_STORAGE_GET_MEDIA_TYPES_EX只能得到很少的磁盘参数,我想获得包括硬盘序列号在内的更加详细的信息,有 ...

  9. 实战DeviceIoControl 之五:列举已安装的存储设备

    Q 前几次我们讨论的都是设备名比较清楚的情况,有了设备名(路径),就可以直接调用CreateFile打开设备,进行它所支持的I/O操作了.如果事先并不能确切知道设备名,如何去访问设备呢? A 访问设备 ...

随机推荐

  1. curl 查看一个web站点的响应时间(rt)

    1. curl 查看web站点rt curl -o /dev/null -s -w %{time_namelookup}::%{time_connect}::%{time_starttransfer} ...

  2. JS阻止链接跳转代码

    刷新后focus在第一个标签 onload="$('#input_email').focus(); " $(document).ready(function(){ $(" ...

  3. Objective-C Block

    OC中block的语法实在是太别扭了,不知道是不是我太孤陋寡闻了...在此记录一下,以供日后查找使用. 引用:http://goshdarnblocksyntax.com As a local var ...

  4. zabbix报警媒介------>微信报警

    zabbix报警媒介------>微信报警 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 欢迎加入高级运维工程师之路:598432640 微信在我们的生活中使用的比较频繁,有 ...

  5. java 除法向上,向下取整

    向上取整用Math.ceil(double a) 向下取整用Math.floor(double a) // 举例: double a=35; double b=20; double c = a/b; ...

  6. SQL中插入单引号,新增修改删除

    1.插入单引号如果不转化的话,字符串插入到数据库中错误的,只要在字符串中有单引号的地方在加一个单引号即可.    例如:在数据库插入'井下设备' :    insert into Static_Bel ...

  7. ubuntu 如何 su 到 root(作为 root 用户操作)

    ubuntu 安装后,root用户默认被锁定,不允许登录,也不允许"su"到 root.对于桌面用户来说,这样安全性更高一些,但对于服务器可以设置成"允许 su 到roo ...

  8. TBB 学习笔记

    #include <tbb/task_scheduler_init.h> #include <tbb/blocked_range.h> #include <tbb/par ...

  9. 关于JQ的$.deferred函数。参考网络文档

    由于jQuery版本问题对Deferred对象的实现有所不同,具体请参照jQuery api:   jQuery.Deferred()基于Promises/A规范实现,因为jQuery本身的设计风格, ...

  10. Mac OS下pip安装 pillow

    sudo pip install pil报错如下:/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Develo ...