IRP与派遣函数

原创 2013年12月06日 10:53:26

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函数得到。

Windows驱动开发技术详解__派遣函数

派遣函数是Windows驱动程序中的重要概念。驱动程序的主要功能是负责处理I/O请求,其中大部分I/O请求是在派遣函数中处理的。 用户模式下所有对驱动程序的I/O请求,全部由操作系统转换为一个叫...
  • u011164819
  • u011164819
  • 2016年08月08日 14:40
  • 452

IRP 与 派遣函数

什么是派遣函数:       派遣函数是 WIndows 驱动程序中的重要概念。驱动程序的主要功能是负责处理I/O请求,其中大部分I/O请求是在派遣函数中处理的。也就是说,派遣函数是用来处理驱动...
  • kulala082
  • kulala082
  • 2017年01月11日 15:49
  • 100

驱动开发(7)IRP与派遣函数

在上一篇博文中,介绍了NT驱动的基本结构,这几篇博文,博主来说说驱动开发的一个核心内容——如何处理I/O请求。 为何要处理I/O请求?因为通常一个驱动程序是为了控制硬件而设计的(虽然没有对应具体硬件的...
  • zuishikonghuan
  • zuishikonghuan
  • 2016年01月03日 16:30
  • 1434

关于派遣函数对IRP的处理和驱动程序同步小结

难得闲暇时间,看了windows驱动关于派遣函数对IRP的处理和驱动程序同步,写一些个人的理解吧,如果有误还希望大侠们帮忙指点下,提前谢过了: 派遣函数对IRP的处理: 在驱动装载完毕的时候,Driv...
  • jhy8421
  • jhy8421
  • 2015年05月15日 17:08
  • 480

IRP原理及派遣函数基本工作流程

转载于百度文库 http://wenku.baidu.com/link?url=So3khjvq-fqL3G1JjI3BLAJh7dI9DJcaR6Km3m3McAl71wb6FRQK_cnwAOY...
  • baidu_36226689
  • baidu_36226689
  • 2017年03月21日 09:47
  • 214

[APIO2012]派遣 解题报告

796. [APIO2012] 派遣 【问题描述】  在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿。 在这个帮派里,有一名忍者被称之为Master。除了Master...
  • TA201314
  • TA201314
  • 2015年01月09日 20:29
  • 902

派遣函数(1) - 初识派遣函数

转载自;http://mzf2008.blog.163.com/blog/static/3559978620101114103859212/ IRP与派遣函数< xmlnam...
  • u012410612
  • u012410612
  • 2013年11月29日 23:36
  • 489

windows驱动编程学习笔记——(三)IRP

一,IRP的概念(I/O Request Package) 当一个应用程序调用函数去操作某个设备时,比如调用createFile,deviceIOControl,等等时,I/O管理器为此函数创建一个...
  • u013686805
  • u013686805
  • 2015年02月10日 16:21
  • 867

通俗解析IRP和I/O设备栈在内核程序中的作用

正文: 言归正传,所有的I/O请求都是以IRP(I/O请求包)的形式来提交的,同时内核程序的所有分发函数(Dispatch Function)的第二个参数都是 PIRP(也即是指向IRP的指针...
  • md521
  • md521
  • 2015年01月13日 21:57
  • 858

IRP的同步完成与异步完成

应用程序中对设备进行同步、异步操作,都必须得到驱动程序的支持。所有对设备的操作都会转化为IRP请求,并传递到相应的派遣函数中。可以有两种方式处理IRP请求,第一种是在派遣函数中直接结束IRP请求,即同...
  • wzsy
  • wzsy
  • 2016年05月18日 16:55
  • 336
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IRP与派遣函数
举报原因:
原因补充:

(最多只允许输入30个字)