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

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

注意

始终对正在验证的驱动程序执行一些 自动检查 ,而不考虑选择了哪些选项。 如果驱动程序在不正确的 IRQL 中使用内存,错误地调用或释放旋转锁和内存分配,错误地切换堆栈,或在未首先删除计时器的情况下释放内存池,驱动程序验证程序将检测此行为。 卸载驱动程序后,驱动程序验证程序将检查,以查看它是否已正确释放其资源。

使用 /ruleclasses 启用规则类

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

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

请注意,启用多个类 (以下) 正十进制整数表示时,请使用空格字符分隔每个整数。

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

标准规则类

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

其他规则类

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

Rule 类 十进制 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 验证

当此选项处于活动状态时,驱动程序验证程序将监视多个 I/O 管理器例程的调用,并执行 PnP IRP、电源 IRP 和 WMI IRP 的压力测试。 在 Windows 7 及更高版本的 Windows 操作系统中,增强型 I/O 验证的所有功能都作为 I/O 验证 的一部分包含在内,并且不再需要在驱动程序验证程序管理器或命令行中选择此选项。

DMA 验证

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

安全检查

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

其他检查

(Windows Vista 及更高版本) 此选项处于活动状态时,驱动程序验证程序会查找驱动程序崩溃的常见原因,例如释放的内存处理不当。

强制挂起 I/O 请求

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

IRP 日志记录

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

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 驱动程序框架 (KMDF) 要求。

其他 IRQL 检查

其他 IRQL 检查增强了PASSIVE_LEVEL的 DDI 符合性检查 IRQL 规则。 它由两个规则组成:

  • IrqlIoRtlZwPassive 规则指定驱动程序仅在 IRQL = PASSIVE_LEVEL执行时调用规则中列出的 DDI。
  • IrqlNtifsApcPassive 规则指定驱动程序仅在 IRQL = PASSIVE_LEVEL 或 IRQL <= APC_LEVEL 执行时调用规则中列出的 DDI。

驱动程序隔离检查

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

标准设置

标准设置中包含的选项

特殊池

强制 IRQL 检查

池跟踪

I/O 验证

死锁检测

增强型 I/O 验证 (在 Windows 7 及更高版本中,选择“I/O 验证)

DMA 验证

安全检查

Windows Vista 及更高版本) (杂项检查

DDI 符合性检查 (从Windows 8) 开始

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

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