irp是I/O管理器发出的I/O请求,定义为一个结构,里面包含了IoStatus等属性,
Win2000 WDM驱动程序是包驱动的,IRP是其中一个非常重要的数据结构。 
一个IRP是从非分页内存中分配的可变大小的结构,它包括两部分:IRP首部(也称为头部)和I/O堆栈位置(IrpStackLocation)。这两部分都是由I/O Manager(I/O管理器)建立的。IRP结构中的内容并不固定,随着请求类型的不同而有较大不同。 
IrpStackLocation的主要目的是,保存一个I/O请求的函数代码和参数。通过检查堆栈位置的MajorFunction字段,驱动程序能够确定执行什么操作及如何解释Parameters共用体(union)字段的内容。 
对于一个直接发送到最低级驱动程序的请求,其相应的IRP只有一个I/O堆栈位置。对于发送到较高级驱动程序的请求,I/O 管理器建立一个在每个驱动程序层有不同I/O堆栈位置的IRP。换句话说,I/O StackLocation的数量实际上是参与I/O 请求的I/O 层的数量,或者是设备栈的深度(depth).只允许层次结构中的每个驱动程序接触它自己的I/O Stack Location.如果它想调用一个更低级的驱动程序,它必须保证新的I/O StackLocation在它的下面的位置被正确地建立。这可以使用如IoCopyCurrentIrpStackLocationToText,IoAllcateIrp等例程来设置。 
IRP挺复杂的,使用时,不同的IRP参数是不一样的,得消化一阵子。