增强的 I/O 验证
此功能仅在 Windows XP 和更高版本的 Windows 操作系统中可用。
在 Windows 7 及更高版本的 Windows 操作系统中,选择“I/O 验证”时,将自动激活增强型 I/O 验证。 它不可用或没有必要将其作为单独的选项进行选择。
激活增强型 I/O 验证后,驱动程序验证程序将监视多个 I/O 管理器例程的调用,并执行 PnP IRP、电源 IRP 和 WMI IRP 的压力测试。
在 Windows Vista 和 Windows XP 中,增强型 I/O 验证独立于 I/O 验证激活,但选择这两个选项可更全面地测试驱动程序中的 I/O 接口方法。
增强型 I/O 验证的功能
激活增强型 I/O 验证时,驱动程序验证程序会添加以下检查。
监视所有 IRP,以确保驱动程序在调用 IoMarkIrpPending 时返回STATUS_PENDING。
监视 IoDeleteDevice 的使用,以验证驱动程序是否一次性删除同一设备,并检测不适当的分离和删除设备对象。
验证驱动程序是否正确展开所有 IoSkipCurrentIrpStackLocation 调用。
新的压力和测试包括:
对枚举设备的顺序进行争用,以确保即插即用 (PnP) 驱动程序不会对设备启动顺序做出假设。
在完成时调整 PnP 和 Power IRP 的状态,以捕获从调度例程返回错误状态的驱动程序。
发送虚假的 Power IRP 以测试驱动程序代码路径 bug。
发送假 WMI IRP 以测试驱动程序代码路径 bug。
将假筛选器插入每个 WDM 堆栈。
显示增强型 I/O 验证错误
增强型 I/O 验证捕获的驱动程序错误的显示方式与 级别 2 I/O 验证捕获的驱动程序错误相同。
在蓝屏上,消息 IO SYSTEM VERIFICATION ERROR 和字符串 WDM DRIVER ERRORXXX(其中 XXX 是 I/O 错误代码)记录了这些错误。
在故障转储文件中,这些错误由 消息 BugCheck 0xC9 (DRIVER_VERIFIER_IOMANAGER_VIOLATION) 以及 I/O 错误代码进行记录。 在这种情况下,I/O 错误代码显示为 bug 检查 0xC9的第一个参数。
在 (KD 或 WinDbg) 的内核调试器中,这些错误由消息 WDM DRIVER ERROR 和描述性文本字符串记录。 当内核调试器处于活动状态时,可以忽略级别 2 错误并恢复系统操作。 (任何其他 bug 检查都无法执行此操作。)
蓝屏、故障转储文件和内核调试器各自也显示其他信息。 有关所有 I/O 验证级别 2 错误消息的完整说明,请参阅 bug 检查0xC9。
激活此选项
可以使用驱动程序验证程序管理器或Verifier.exe命令行为一个或多个驱动程序激活增强型 I/O 验证功能。 有关详细信息,请参阅 选择驱动程序验证程序选项。
注意 在 Windows 7 及更高版本的 Windows 操作系统中,选择“I/O 验证”时,将自动激活增强型 I/O 验证。 它不可用或没有必要将其作为单独的选项进行选择。
在命令行
在命令行中,“增强型 I/O 验证”选项由 位 6 (0x40) 表示。 若要激活增强型 I/O 验证,请使用标志值0x40或向标志值添加0x40。 例如:
verifier /flags 0x40 /driver MyDriver.sys
下次启动后,该功能将处于活动状态。
在 Windows Vista 和更高版本的 Windows 上,还可以通过将 /volatile 参数添加到 命令来激活和停用增强型 I/O 验证,而无需重新启动计算机。 例如:
verifier /volatile /flags 0x40 /adddriver MyDriver.sys
此设置立即生效,但在关闭或重新启动计算机时会丢失。 有关详细信息,请参阅 使用易失性设置。
使用驱动程序验证程序管理器
- 启动驱动程序验证程序管理器。 在命令提示符窗口中键入 验证程序 。
- 选择“ 为代码开发人员创建自定义设置 () ,然后单击” 下一步”。
- 从完整列表中选择“选择单个设置”。
- 选择“ (检查) 增强型 I/O 验证”。
DMA 验证功能也包含在标准设置中。 若要使用此功能,请在驱动程序验证程序管理器中,单击“ 创建标准设置”。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈