verifier.exe是驱动器校验管理器,一个进程相关的Microsoft ® Windows ®操作系统的微软公司
参数验证
驱动程序调用的所有旋转锁、IRQL 和池分配都接受自动参数验证。这意味着检查以下各项:
引发的 IRQL 确实是引发的 IRQL(当前 IRQL 低于目标 IRQL)。
较低的 IRQL 确实是较低的 IRQL。
释放两次旋转锁。
旋转锁的获得/释放是在正确的 IRQL 下完成的。
页面缓冲池分配/释放是在正确的 IRQL(APC_LEVEL 或更低)下完成的。
非页面缓冲池分配/释放是在正确的 IRQL(DISPATCH_LEVEL 或更低)下完成的。
没有为这些应用程序编程接口指定随机(未初始化)值。
池分配注入失败
如果驱动程序没有将池分配标记为 MUST_SUCCEED,池分配可能会被随机取消,以确保该驱动程序可以正确地处理出现的内存不足情况。
要释放的池
检查所有要释放的池,确保在此池分配中没有挂起的计时器,因为这会导致系统崩溃的原因更加难于查找。
池泄漏检测
系统自动跟踪驱动程序的所有池分配。在卸载驱动程序时,如果没有释放任何分配,就会执行错误检查。随后,您可以使用 !verifier 3 内核调试程序命令来显示未释放的所有配额。也可以在卸载前使用此命令,查看驱动程序在任一时刻的未定分配。
驱动程序卸载检查
执行驱动程序卸载检查的目的是为了找出那些已卸载但没有清除所用资源(这样就增加了在驱动程序卸载后不久即开始检查系统错误的可能性)的驱动程序。驱动程序无法删除的资源包括搁置资源的列表、挂起的延迟过程调用 (DPC)、工作线程、队列、计时器和其他资源。
I/O 验证程序
如果您使用验证程序工具或 VerifyDriverLevel 注册表项打开“I/O 验证程序”标志(有关更多信息,请参考本文“启用驱动程序验证”一节),就会打开某些 I/O 管理器验证。其中包括:
通过 IoAllocateIrp 分配的所有 IRPS 都将从特殊池中分配。
将在 IoCallDriver、IoCompleteRequest 和 IoFreeIrp 中进行检查以捕捉驱动程序错误信息。
所有 I/O 验证程序失败都使用代码 DRIVER_VERIFIER_IOMANAGER_VIOLATION (0xC9) 进行错误检查。
驱动程序验证程序要求
唯一的要求是您必须安装 Windows 2000、Windows XP 或 Windows Server 2003。您可以在 Windows 零售版和已通过验证的版本上启用驱动程序验证程序。要了解在生产服务器上启用驱动程序验证程序管理器前需要考虑的事项,请参阅 Microsoft 知识库文章 251233。如果您安装了 Norton Antivirus,请不要启用驱动程序验证程序的“死锁检测”功能,因为 Microsoft 知识库文章 325672 中不建议这样做。
启用驱动程序验证程序
您可以使用 Verifier.exe 来启用驱动程序验证程序。 Verifier.exe 包含在每个 Windows 副本中,并自动安装到 System32 文件夹中。Verifier.exe 具有命令行界面和图形用户界面 (GUI),因此,您可以指定驱动程序和相应的验证等级。您还可以实时查看驱动程序验证程序统计信息。有关其他信息,请参阅本文“驱动程序验证程序管理器”一节。
调试驱动程序验证程序冲突
内核调试程序中的 !verifier 命令以及 Verifier.exe 工具都能实时显示当前驱动程序验证程序的配置和统计信息。