给定一个 IO 请求数据包,我如何知道它与哪个函数相关联?例如 IRP_MJ_READ
Given an IO Request Packet, how can I tell with which function(s) it is associated? E.g IRP_MJ_READ
如果我有一个完好无损的 IRP,并且我正在 IRP Monitor 等程序中查看它,我如何知道这个 IRP 与哪些功能相关联,例如 IRP_MJ_READ 或 IRP_MJ_WRITE?
IRP
本身不具有任何功能 "associated"。每个 IRP
至少有一个 I/O Stack Locations - and at begin of IO_STACK_LOCATION
您可以查看的结构
UCHAR MajorFunction;
UCHAR MinorFunction;
MajorFunction
The IRP major function code indicating the type of I/O operation to be performed.
正是这里的值 IRP_MJ_XXX
。然而,复杂的 IRP 有多个堆栈位置,不同的位置可以有不同的 MajorFunction
。假设 IRP 最初设置为文件系统或磁盘驱动程序(在顶部堆栈中)具有 IRP_MJ_WRITE
(或读取)。但是当磁盘驱动程序将此 irp 发送到端口驱动程序时 - 已经 IRP_MJ_SCSI
设置在堆栈
中
如果我有一个完好无损的 IRP,并且我正在 IRP Monitor 等程序中查看它,我如何知道这个 IRP 与哪些功能相关联,例如 IRP_MJ_READ 或 IRP_MJ_WRITE?
IRP
本身不具有任何功能 "associated"。每个 IRP
至少有一个 I/O Stack Locations - and at begin of IO_STACK_LOCATION
您可以查看的结构
UCHAR MajorFunction;
UCHAR MinorFunction;
MajorFunction
The IRP major function code indicating the type of I/O operation to be performed.
正是这里的值 IRP_MJ_XXX
。然而,复杂的 IRP 有多个堆栈位置,不同的位置可以有不同的 MajorFunction
。假设 IRP 最初设置为文件系统或磁盘驱动程序(在顶部堆栈中)具有 IRP_MJ_WRITE
(或读取)。但是当磁盘驱动程序将此 irp 发送到端口驱动程序时 - 已经 IRP_MJ_SCSI
设置在堆栈