IRP与派遣函数
来源:互联网 发布:淘宝支付宝限额怎么改 编辑:程序博客网 时间:2024/04/28 17:05
1.派遣函数是WINDOWS驱动程序中的重要概念。驱动程序的主要功能是负责处理I/O请求,其中大部分I/O请求时在派遣函数中处理的。
2.用户模式下所有驱动程序的I/O请求,全部由操作系统化为一个叫做IRP的数据结构,不同的IRP数据会被“派遣”到不同的派遣函数(Dispatch Functin )中,这也是派遣函数名字的由来。
3.IRP的处理机制类似Windows应用程序的“消息处理”机制,驱动程序接收到不同的类型的IRP后,会进入不同的派遣函数,在派遣函数中IRP得到处理。
4.IRP是一个很复杂的数据结构,IRP两个基本的属性,一个是MajorFunction,另一个是MinorFunction,分别记录IRP的主类型和子类型。操作系统根据MajorFunction将IRP“派遣”到不同的派遣函数中,在派遣函数中还可以这个IRP属于哪种MinorFunction
5.DriverEntry有个函数指针数组MajorFunction.都是派遣函数地址。对于没有设置IRP类型,系统默认这些IRP类型与_IopInvalidDeviceRequest函数关联。还有些IRP是由系统的某个组件创建的。
6.下表列出了IRP的类型,并对其产生的来源做了说明。
7.应用程序和驱动程序有3中通信方式
1.DO_BUFFER_IO
2.DO_DIRECT_IO
3.其他
8.在使用第3种读写设备时,派遣函数直接读写应用程序提供的缓冲区地址。ReadFile,WriteFile提供的缓冲区内存地址,可以在派遣函数中通过IRP的UserBuffer字段得到。
9.除了用ReadFile和WriteFile以外,应用程序还可以通过另外一个DeviceIoControl操作设备。DeviceIoControl内部会使用操作系统创建IRP_MJ_DEVICE_CONTROL类型的IRP,然后操作系统会将这个IRP转发到派遣函数中。它可以让应用程序和驱动程序进行通信。
10.通信必备参数:输入,输出地址,MDL结构(直接)
11.IO_STACK_LOCATION 即I/O堆栈,这个数据结构和IRP紧密相连。当IRP可能在设备栈中转发多次,为了记录IRP在每层设备中做的操作,IRP会有个IO_STACK_LOCATION数组。每个IO_STACK_LOCATION元素记录着对应设备中做的操作。对于本层可以通过IoGetCurrentIrpStackLocation函数得到。
- IRP与派遣函数
- IRP 与 派遣函数
- IRP派遣函数
- 派遣函数IRP
- 驱动开发(7)IRP与派遣函数
- IRP原理及派遣函数基本工作流程
- 创建IRP传递给驱动的派遣函数的一些方法
- 对大部分文件操作产生的IRP派遣函数的简单处理
- 驱动开发之 最简单的处理IRP的派遣函数
- 关于派遣函数对IRP的处理和驱动程序同步小结
- 派遣函数
- CPU与IRP的一些相关函数
- 派遣函数(1) - 初识派遣函数
- 【驱动之三】派遣函数
- IRP完成函数:IofCompleteRequest
- IRP结构与理解
- 派遣函数学习2)直接读写
- 派遣函数(3) - IO设备控制操作
- win7 扩展名和程序关联
- 带你玩转Photoshop CS6的描边功能
- EXCEL 分类汇总
- mysql timeout调研与实测
- oracle server cpu 100%分析
- IRP与派遣函数
- Android ListView拖动时背景色变黑问题
- 安全测试之认证授权
- maven合并打包多个war包
- Hibernate配置C3P0详解
- linux之xargs用法
- 关于SlidingMenu有EditText会出现闪屏的解决办法
- Struts标签-html标签
- 利用索引降低并发事务引起的锁