IRP 日志记录
驱动程序验证程序 IRP 日志记录功能监视驱动程序对 IRP 的使用,并记录 IRP 使用情况。 此记录存储为 WMI 信息。
Windows 驱动程序工具包(WDK)包括可将此 WMI 记录转换为文本文件的工具 DC2WMIParser (dc2wmiparser.exe)。
此驱动程序验证程序选项仅在 Windows Server 2003 及更高版本中可用。
WMI 记录
WMI 记录将不包括每个设备的 20 个以上的 IRP。 记录第二十一个 IRP 后,将替换第一条 IRP 记录。 因此,如果记录列出 20 个 IRP,这些始终是最近的 20 个,但无法知道其中哪一个是最新的 20 个 IRP。
由于 WMI 记录存储在内存中,因此重启计算机时会将其擦除。 因此,使用 DC2WMIParser 将此信息保存到文件中。
如果使用 /t 选项,DC2WMIParser 将在指定的持续时间内连续运行。 在这种情况下,记录可以包括每个设备超过 20 个 IRP(每个采样周期最多 20 个 IRP)。
激活此选项
可以使用驱动程序验证程序管理器或Verifier.exe命令行为一个或多个驱动程序激活 IRP 日志记录功能。
若要激活 IRP 日志记录功能,还必须激活 I/O 验证。
在命令行
在命令行中,IRP 日志记录选项由 0x400 (位 10)表示。
若要激活 IRP 日志记录,请使用标志值0x410或向标志值添加0x410。 此值激活 I/O 验证 (0x10)和 IRP 日志记录(0x400)。 例如:
verifier /flags 0x410 /driver MyDriver.sys
下一次启动后,该功能将处于活动状态。
在 Windows Vista 和更高版本的 Windows 上,还可以通过在命令中添加 /volatile 参数来激活和停用 IRP 日志记录,而无需重新启动计算机。 例如:
verifier /volatile /flags 0x410 /adddriver MyDriver.sys
此设置立即生效,但在关闭或重新启动计算机时会丢失。 有关详细信息,请参阅 “使用易失性设置”。
使用驱动程序验证程序管理器
- 启动驱动程序验证程序管理器。 在命令提示符窗口中键入 验证程序 。
- 选择“ 创建自定义设置”(面向代码开发人员), 然后单击“ 下一步”。
- 从完整列表中选择单个设置。
- 选择(检查) IRP 日志记录 和 I/O 验证。
DC2WMIParser
DC2WMIParser 是一种工具,用于收集驱动程序验证程序创建的 WMI IRP 记录,并将此日志转换为文本文件。
DC2WMIParser 语法如下所示:
dc2wmiparser [/f File] [/t Time]
这些参数具有以下含义:
/f文件
指定要写入的日志文件的完整路径和文件名。 相对路径相对于当前目录。 如果省略此项,将使用当前目录中的文件名 dc2verifier.act。
/t时间
指定 DC2WMIParser 将继续运行的时间长度(以分钟为单位)。 如果 Time 等于零,DC2WMIParser 将记录驱动程序验证程序已存储的所有 WMI IRP 信息,然后退出。 如果 时间 设置为正值,则 DC2WMIParser 将继续运行指定的时间长度,在到达时存储新信息。 默认值为零。
DC2WMIParser 日志文件的格式
DC2WMIParser 生成的文件是 ASCII 文本文件。
此文件的第一行包含一个十进制数,表示在文件中记录的设备数。
第一行后,文件分为多个部分:每个部分描述一个设备。
对于每个设备,格式为:
在单行上: 设备名称。
在单行上: 一个十进制数,用于指定此设备的目标设备类型和函数数。
在每个设备类型和函数的一行上: 三个十六进制数字,用逗号分隔。 这些表示设备类型,以及此记录中记录的最低和最高函数。
在每个设备类型和函数的一组行中:
- 一行,包含一个十进制数字,用于指定当前设备类型的 IOCTL 计数。
- 每个 IOCTL 的一行。 每行都包含六个十六进制数字,用逗号分隔。 这些指定设备类型、函数、方法、访问、输入缓冲区的长度和输出缓冲区的长度。
下面是一个示例 DC2WMIParser 日志文件。 在实际文件中,不会有任何空格、注释或空白行,但这些行已添加到此示例中,使其更加清晰。
2 There are two devices described by this log file.
The first device begins here:
DP(1)0x7e00-0x21dbda400+3 Device name of the first device
2 Number of device type IOCTLs targeted at this device
7,12,12 First targeted device: device type 7, low function 12, high function 12
2d,420,420 Second targeted device: device type 2d, low function 420, high function 420
1 Number of IOCTLs for first targeted device (type 7)
7,12,0,0,90,0 Device type 7, function 12, method 0, access 0, inbuflen 90, outbuflen 0
1 Number of IOCTLs for second targeted device (type 2d)
2d,420,0,0,c,0 Device type 2d, function 420, method 0, access 0, inbuflen c, outbuflen 0
The second device begins here:
DP(1)0x7e00-0x21dbda400+2 Device name of the second device
2 Number of device type IOCTLs targeted at this device
7,12,12 First targeted device: device type 7, low function 12, high function 12
2d,420,420 Second targeted device: device type 2d, low function 420, high function 420
1 Number of IOCTLs for first targeted device (type 7)
7,12,0,0,90,0 Device type 7, function 12, method 0, access 0, inbuflen 90, outbuflen 0
1 Number of IOCTLs for second targeted device (type 2d)
2d,420,0,0,c,0 Device type 2d, function 420, method 0, access 0, inbuflen c, outbuflen 0