驱动程序验证程序选项和规则类

本主题介绍了驱动程序验证器中的可选功能和规则类。 使用标准设置时,请参阅 标准设置 以了解所包含的选项列表。

备注

某些 自动检查 始终在正在验证的驱动程序上执行,而不考虑已选择的选项。 如果驱动程序使用不正确的 IRQL 的内存,则不正确地调用或释放旋转锁和内存分配,不正确地切换堆栈,或者释放内存池而不先删除计时器,驱动程序验证程序将检测到此行为。 卸载驱动程序时,驱动程序验证器将检查其是否已正确释放其资源。

通过/ruleclasses 启用规则类

从 Windows 10 版本17627及更高版本开始,可以使用以下语法启用规则类:

/ruleclasses or /rc [<ruleclass_1> <ruleclass_2> ... <ruleclass_k>]

请注意,当启用多个类 (用) 下面的正整数整数表示时,请用空格字符分隔每个整数。

可在下面找到这些规则类的说明。

标准规则类

规则类 小数 ID
特殊池 1
强制 IRQL 检查 2
池跟踪 4
I/O 验证 5
死锁检测 6
DMA 检查 8
安全检查 9
其他检查 12
DDI 合规性检查 18
WDF 验证 34

其他规则类

这些规则类用于特定的方案测试。 规则类标记有 (*) 需要自动启用 (5) 的 I/o 验证。 标记为 (* * ) 的标志支持禁用单个规则。

规则类 小数 ID
随机低资源模拟 3
强制挂起 i/o 请求 ( * ) 10
IRP 日志记录 11
堆栈 ( 的固定 MDL 检查 ) 14
驱动程序 ( 的固定 MDL 检查 ) 15
Power framework 延迟模糊 16
端口/微型端口接口检查 17
系统性资源不足模拟 19
DDI 相容性检查 (额外) 20
内核同步延迟模糊处理 24
VM 交换机验证 25
代码完整性检查 26
驱动程序隔离检查 (需要 36) 33
其他 IRQL 检查 35
启用 DIF 36

可选功能和规则类说明

特殊池

如果启用此选项,则驱动程序验证器将从特殊池分配大部分驱动程序的内存请求。 将会监控此特殊池是否存在内存溢出、内存欠载和内存在释放后仍可访问的情况。

强制 IRQL 检查

如果启用此选项,则驱动程序验证器会通过使可分页代码无效来对驱动程序施加极大的内存压力。 如果驱动程序尝试访问错误 IRQL 处的分页内存或持有旋转锁,则驱动程序验证程序将会检测到此行为。

低资源模拟 (称为 Windows 8.1 中的 随机低资源模拟)

当启用此选项时,驱动程序验证程序会随机失败池分配请求和其他资源请求。 通过将这些分配故障注入到系统中,驱动程序验证程序可以测试驱动程序处理资源不足情况的能力。

池跟踪

如果启用此选项,则驱动程序验证程序将检查驱动程序验证程序是否在卸载时释放了其所有的内存分配。 这会揭示内存泄漏。

I/O 验证

当此选项处于活动状态时,驱动程序验证器将从特殊池分配驱动程序的 Irp,并监视驱动程序的 i/o 处理。 这将检测 I/O 例程的使用是否非法或不一致。

死锁检测

当此选项处于活动状态时,驱动程序验证程序将监控驱动程序对旋转锁、互斥体和快速互斥体的使用。 这会检测驱动程序的代码是否有可能在某一时刻导致死锁。

增强的 I/O 验证

此选项处于活动状态时,Driver Verifier 会监视多个 i/o 管理器例程的调用,并对 PnP Irp、电源 Irp 和 WMI Irp 执行压力测试。 在 windows 7 和更高版本的 Windows 操作系统中,增强的 i/o 验证的所有功能都包含在 I/o 验证 的一部分中,它不再可用,也无法在驱动程序验证器管理器或命令行中选择此选项。

DMA 验证

此选项处于活动状态时,Driver Verifier 会监视驱动程序对 DMA 例程的使用情况。 这将检测 DMA 缓冲器、适配器和映射寄存器的使用是否不正确。

安全检查

(Windows Vista 和更高) 版本中,当此选项处于活动状态时,驱动程序验证器会查找可能导致安全漏洞的常见错误,如内核模式例程对用户模式地址的引用。

其他检查

(Windows Vista 和) 更高版本中,当此选项处于活动状态时,驱动程序验证器将查找驱动程序崩溃的常见原因,例如 mishandling 的内存。

强制挂起 I/O 请求

(Windows Vista 和更高) 版本中,当此选项处于活动状态时,驱动程序验证器会 _ 通过返回 _ 对 IoCallDriver的随机调用的状态来测试驱动程序对状态挂起返回值的响应。

IRP 日志记录

(Windows Server 2003 和) 更高版本中,此选项处于活动状态时,驱动程序验证器将监视驱动程序对 Irp 的使用并创建 IRP 使用的日志。

磁盘完整性检查

Windows Server 2003 中引入的 (。 在 Windows 7 和更高版本中不可用。 ) 此选项处于活动状态时,驱动程序验证器将监视硬盘访问,并检测磁盘是否正在正确保留其数据。

SCSI 验证

此选项处于活动状态时,驱动程序验证器会监视 SCSI 微型端口驱动程序,以在不正确使用导出的 SCSI 端口例程、延迟过多以及不正确地处理 SCSI 请求。

Storport 验证

(Windows Vista 和更高) 版本中,当此选项处于活动状态时,驱动程序验证器将监视 Storport 微型端口驱动程序,以正确使用导出的 Storport 例程、延迟过多以及不正确处理 Storport 请求。

电源框架延迟模糊处理

(从 Windows 8 开始) 此选项处于活动状态时,驱动程序验证器随机化线程计划,以帮助在使用 电源管理框架 (PoFx) 的驱动程序中清除并发错误。 对于不直接利用电源管理框架 (PoFx) 的驱动程序,不建议使用此选项。

DDI 合规性检查

(从 Windows 8 开始) 此选项处于活动状态时,驱动程序验证器会应用一组设备驱动程序接口, (DDI) 规则,这些规则检查驱动程序与操作系统的内核接口之间的适当交互。

面向堆栈的固定 MDL 检查

从 Windows 8 开始 () 固定 Mdl 检查堆栈 选项监视驱动程序如何处理驱动程序堆栈间的固定 mdl 缓冲区。 驱动程序验证程序可检测是否对固定 MDL 缓冲区进行了非法修改。 若要使用此选项,必须在至少一个驱动程序上启用 I/O 验证。

面向驱动程序的固定 MDL 检查

(从 Windows 8 开始) " 驱动程序的固定 Mdl 检查 " 选项监视驱动程序如何处理基于每个驱动程序的固定 mdl 缓冲区。 此选项可检测是否对固定 MDL 缓冲区进行了非法修改。 若要使用此选项,你必须在至少一个驱动程序上启用 I/O 验证。

基于堆栈的错误注入

(仅适用于 Windows 8 和 WDK 8) 基于堆栈的故障注入 选项在内核模式驱动程序中注入资源故障。 此选项结合使用了特殊驱动程序 KmAutoFail.sys 和驱动程序验证程序来侵入驱动程序错误处理路径。

系统性资源不足模拟

从 Windows 8.1 开始 () 系统低资源模拟 选项会在内核模式驱动程序中注入资源故障。

NDIS/WIFI 验证

(从 Windows 8.1) 开始,此选项处于活动状态时,驱动程序验证器会应用一组 NDIS 和无线 LAN (WIFI) 规则,这些规则检查 NDIS 微型端口驱动程序和操作系统内核之间的适当交互。

内核同步延迟模糊处理

从 Windows 8.1 开始 () 此选项随机化线程计划,以帮助检测驱动程序中的并发 bug。

VM 交换机验证

从 Windows 8.1 开始 () 此选项监视在 Hyper-v 可扩展交换机内运行 (可扩展交换机) 扩展 的筛选器驱动程序。

端口/微型端口接口检查

端口/微型端口接口检查使驱动程序验证程序能够检查 PortCls.sys 及其音频微型端口驱动程序之间的 DDI 接口,以及 ks.sys 及其 AVStream 微型端口驱动程序。 请参阅 AVStream 驱动程序的规则和音频驱动程序的规则。

代码完整性检查

使用基于虚拟化的安全性来隔离代码完整性时,内核内存可执行的唯一方式是通过代码完整性验证。 这意味着内核内存页永远不能为可写的,并且可执行 (W + X) 并且可执行代码不能直接修改。 代码完整性检查确保这些代码完整性规则的兼容性并检测冲突。

WDF 验证

WDF 验证检查内核模式驱动程序是否遵循 Kernel-Mode Driver Framework (KMDF) 的要求。

其他 IRQL 检查

其他 IRQL 检查增加了对 PASSIVE_LEVEL 的 DDI 相容性检查 IRQL 规则。 它包含以下两个规则:

  • IrqlIoRtlZwPassive规则指定,仅当该驱动程序以 IRQL = PASSIVE_LEVEL 执行时,才调用该规则中列出的 DDIs。
  • IrqlNtifsApcPassive规则指定,仅当该驱动程序以 irql = PASSIVE_LEVEL 或以 irql <= APC_LEVEL 执行时,才调用该规则中列出的 DDIs。

驱动程序隔离检查

驱动程序隔离检查对于验证 Windows 驱动程序的运行时驱动程序包隔离要求至关重要。有关详细信息,请参阅 Windows 驱动程序入门。 检查监视独立驱动程序包不允许的注册表读取和写入。

标准设置

标准设置中包含的选项

特殊池

强制 IRQL 检查

池跟踪

I/O 验证

死锁检测

(Windows 7 和更高版本中增强的 I/o 验证,则选择 "i/o 验证" 时,将自动激活此选项)

DMA 验证

安全检查

(Windows Vista 和更高版本的其他检查)

从 Windows 8 开始 (DDI 相容性检查)

需要 I/O 验证的驱动程序验证程序选项

有四个选项需要你先启用 I/O 验证。 如果未启用 I/O 验证,则无法启用这些选项。