增强的 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 IRPs 来测试驱动程序代码路径中的错误。

  • 发送假的 WMI IRP 来测试驱动程序代码路径中的缺陷。

  • 将假筛选器插入到每个 WDM 堆栈中。

显示增强的 I/O 验证错误

增强 I/O 验证捕获的驱动程序错误与 级别 2 I/O 验证捕获的错误显示方式相同。

在蓝屏上,这些错误由消息 IO 系统验证错误 和字符串 WDM DRIVER ERRORXXX 指出,其中 XXX 是 I/O 错误代码。

在故障转储文件中,BugCheck 0xC9(DRIVER_VERIFIER_IOMANAGER_VIOLATION) 消息会记录这些错误,以及 I/O 错误代码。 在这种情况下,I/O 错误代码显示为 bug 检查的第一个参数0xC9。

在内核调试器(KD 或 WinDbg)中,这些错误由消息 WDM DRIVER ERROR 和描述性文本字符串记录。 当内核调试器处于活动状态时,可以忽略级别 2 错误并恢复系统作。 无法通过任何其他故障检查完成这一点。

蓝屏、故障转储文件和内核调试器也显示其他信息。 有关所有 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
    

    此设置立即生效,但在关闭或重新启动计算机时会丢失。 有关详细信息,请参阅 “使用易失性设置”。

  • 使用驱动程序验证管理器

    1. 启动驱动程序验证程序管理器。 在命令提示符窗口中键入 验证程序
    2. 选择 “创建自定义设置”(面向代码开发人员), 然后单击“ 下一步”。
    3. 从完整列表中选择单个设置
    4. 选择(检查) 增强的 I/O 验证

    标准设置中还包括 DMA 验证功能。 若要使用此功能,请在驱动程序验证程序管理器中,单击“ 创建标准设置”。