驱动程序验证程序

驱动程序验证程序监视 Windows 内核模式驱动程序和图形驱动程序,目的是检测可能损坏系统的非法函数调用或操作。 驱动程序验证程序可以使 Windows 驱动程序经受各种压力和测试以发现不当行为。 你可以配置要运行的测试,让驱动程序承受沉重的压力负载或经受更精简的测试。 还可以同时在多个驱动程序上运行驱动程序验证程序,或每次在一个驱动程序上运行。

注意

  • 运行驱动程序验证程序可能会导致计算机崩溃。
  • 应仅在用于测试和调试的计算机上运行驱动程序验证程序。
  • 只有计算机上管理员组的成员才能使用驱动程序验证程序。

在哪里可以下载驱动程序验证程序?

无需下载驱动程序验证程序,因为它作为 Verifier.exe 包含在 %WinDir%\system32\ 中的大多数 Windows 版本中。 (驱动程序验证程序未包含在 Windows 10 S 中,因此我们建议改为在Windows 10上测试驱动程序行为。) 驱动程序验证程序不是作为下载包单独分发的。

有关适用于 Windows 10 和以前版本的 Windows 的驱动程序验证程序更改的信息,请参阅驱动程序验证程序:新增功能

何时使用驱动程序验证程序

在整个驱动程序的开发和测试过程中运行驱动程序验证程序。 更具体地说,将驱动程序验证程序用于以下目的:

如何启动驱动程序验证程序

应仅在测试计算机上或正在测试和调试的计算机上运行驱动程序验证程序。 若要充分利用驱动程序验证程序,应使用内核调试器并连接到测试计算机。 有关调试工具的详细信息,请参阅 适用于 Windows (WinDbg、KD、CDB、NTSD) 的调试工具

  1. 通过选择“以管理员身份运行”启动命令提示符窗口,然后键入验证程序以打开驱动程序验证程序管理器

  2. 选择“ (默认任务) 创建标准设置 ”,然后选择“ 下一步”。

    还可以选择“ 创建自定义设置” 以从预定义设置中进行选择,或选择单个选项。 有关详细信息,请参阅 驱动程序验证程序选项和规则类选择驱动程序验证程序选项

  3. “选择要验证的驱动程序”下,选择下表中所述的选择方案之一。

    选项 建议用途
    自动选择未签名的驱动程序

    适用于在运行不需要签名驱动程序的 Windows 版本的计算机上进行测试。

    自动选择为较旧版本的 Windows 生成的驱动程序

    可用于测试驱动程序与较新版本的 Windows 的兼容性。

    自动选择此计算机上安装的所有驱动程序

    提供在系统上测试的驱动程序数的最大覆盖范围。 此选项适用于驱动程序可以与系统上的其他设备或驱动程序交互的测试方案。

    此选项还可能耗尽可用于 特殊池 和某些资源跟踪的资源。 测试所有驱动程序也会对系统性能产生负面影响。

    从列表中选择驱动程序名称

    在大多数情况下,需要指定要测试的驱动程序。

    选择设备堆栈中的所有驱动程序允许“增强型 I/O 验证”选项跟踪对象并检查符合性,因为 I/O 请求数据包 (IRP) 在堆栈中的每个驱动程序之间传递,这样就可以在检测到错误时提供更高级别的详细信息。

    如果运行的是衡量系统或驱动程序性能指标的测试方案,或者想要分配可用于检测内存损坏或资源跟踪问题的最大数量资源, (例如死锁或互斥) ,请选择单个驱动程序。 一次在一个驱动程序上使用 特殊池I/O 验证 选项更有效。

  4. 如果选择了 “从列表中选择驱动程序名称”,请选择“ 下一步”,然后选择一个或多个特定驱动程序。

  5. 选择“ 完成”,然后重启计算机。

注意

在 Windows 版本 20150 到 25126 中使用驱动程序验证程序时,如果选择了 ntoskrnl ,则可能会收到无效状态错误。
若要避免此问题,请取消选择 ntoskrnl 或在内部版本 25126 之后升级到 Windows 版本。

在命令提示符下运行驱动程序验证程序

还可以在命令提示符窗口中运行驱动程序验证程序,而无需启动驱动程序验证程序管理器。 例如,若要在名为 myDriver.sys的驱动程序上使用标准设置运行驱动程序验证程序,请使用以下命令:

verifier /standard /driver myDriver.sys

有关命令行选项的详细信息,请参阅 驱动程序验证程序命令语法

如何控制驱动程序验证程序

可以使用驱动程序验证程序管理器或命令行来控制驱动程序验证程序。 若要启动驱动程序验证程序管理器,请参阅本主题前面的 如何启动驱动程序验证程序

对于以下每个操作,可以使用驱动程序验证程序管理器或输入命令行。

停止或重置驱动程序验证程序

  1. 驱动程序验证程序管理器中,选择“ 删除现有设置”,然后选择“ 完成”。

    在命令提示符处输入以下命令:

    verifier /reset
    
  2. 重新启动计算机。

查看驱动程序验证程序统计信息

“驱动程序验证程序管理器”中,选择“ 显示有关当前已验证驱动程序的信息”,然后选择“ 下一步”。 继续选择“ 下一步 ”会显示其他信息。

在命令提示符处输入以下命令:

verifier /query

查看驱动程序验证程序设置

驱动程序验证程序管理器中,选择“ 显示现有设置”,然后选择“ 下一步”。

在命令提示符处输入以下命令:

verifier /querysettings

如何调试驱动程序验证程序冲突

若要充分利用驱动程序验证程序,应使用内核调试器并将其连接到测试计算机。 有关 Windows 调试工具的概述,请参阅 Windows (WinDbg、KD、CDB、NTSD) 调试工具

如果驱动程序验证程序检测到冲突,它将生成一个 bug 检查来停止计算机。 这是为了为你提供尽可能多的信息来调试问题。 如果内核调试器连接到运行驱动程序验证程序的测试计算机,并且驱动程序验证程序检测到冲突,则 Windows 会闯入调试器并显示错误的简短说明。

驱动程序验证程序检测到的所有冲突都会导致 bug 检查。 这通常是 bug 检查0xC4。 有关详细信息,请参阅 调试 Bug 检查0xC4:DRIVER_VERIFIER_DETECTED_VIOLATIONbug 检查0xC4:DRIVER_VERIFIER_DETECTED_VIOLATION

其他常见 bug 检查代码包括:

有关详细信息,请参阅 启用驱动程序验证程序时处理 Bug 检查

启动新的调试会话时,请使用调试器扩展命令 !analyze。 在内核模式下,!analyze 命令显示有关最新 bug 检查的信息。 若要显示其他信息,为了帮助识别出错的驱动程序,请在 kd> 提示符处将 option -v 添加到 命令:

kd> !analyze -v

除了 !analyze 之外,还可以在 kd> 提示符处输入以下调试器扩展,以查看特定于驱动程序验证程序的信息:

  • !验证程序 转储捕获的驱动程序验证程序统计信息。 使用 !verifier -? 显示所有可用选项。

    kd> !verifier
    
  • !死锁 显示与驱动程序验证程序的死锁检测功能跟踪的锁或对象相关的信息。 使用 !deadlock -? 显示所有可用选项。

    kd> !deadlock
    
  • !iovirp [address] 显示与 I/O 验证程序跟踪的 IRP 相关的信息。 例如:

    kd> !iovirp 947cef68
    
  • 查找违反的 DDI 符合性检查 规则。 (RuleID 始终是 bug 检查.) 来自 DDI 符合性检查的所有规则 ID 采用0x200nn 的形式。

驱动程序验证程序选项

驱动程序验证程序命令语法

使用驱动程序验证程序

控制驱动程序验证程序

DDI 合规性检查