IRP结构
IRP是I/O Request Pcaket 的缩写,即I/O请求包。驱动与驱动之间通过 IRP 进行通信。而使用驱动的应用层调用的 CreatFile,ReadFile,WriteFile,DeviceIoControl 等函数,说到底也是使用 IRP 和驱动进行通信。IRP由I/O管理器根据用户态程序提出的请求创建并传给相应的驱动程序。在分层的驱动程序中,这个过程很复杂,一个IRP常常要穿越几层驱动程序。
IRP数据结构
IRP功能的复杂性也决定了IRP结构的复杂性。正确理解IRP的结构是理解驱动程序开发的基础。另外,IRP的创建是由I/O管理器在非分页内存进行的。
一个IRP有两部分组成:头部区域和I/O堆栈位置。这篇文章主要介绍IRP的头部区域,关于I/O堆栈的问题,可参考【驱动之二】IO_STACK_LOCATION总结。IRP的头部区域是一个固定的部分,起始就是一个IRP结构。
下面看看IRP结构(头部区域)的结构的定义
IRP结构介绍,结构图如下,其中灰色部分为不可见区域,这里主要讲解一下可见区域。