给定IO请求包,我如何判断它与哪个(哪些)功能相关联?例如IRP_MJ_READ

时间:2017-12-14 00:23:09

标签: windows driver wdk wdm

如果我有一个完整的IRP并且我在IRP Monitor等程序中查看它,我如何判断该IRP与哪个(哪些)函数相关联,如IRP_MJ_READ或IRP_MJ_WRITE?

1 个答案:

答案 0 :(得分:1)

IRP本身并未与任何功能“关联”。每个IRP至少有一个I/O Stack Locations - 并且在IO_STACK_LOCATION结构的开头您可以查看

UCHAR                  MajorFunction;
UCHAR                  MinorFunction;
  

MajorFunction

     

IRP主要功能代码,指示要执行的I / O操作的类型。

正是这里的值IRP_MJ_XXX。然而,复杂的IRP具有多个堆栈位置,并且不同的位置可以具有不同的MajorFunction。首先设置为文件系统或磁盘驱动程序的IRP(在顶层堆栈中)具有IRP_MJ_WRITE(或读取)。但是当磁盘驱动程序将此irp发送到端口驱动程序时 - 已在堆栈中设置IRP_MJ_SCSI