驱动程序验证程序选项和规则类
本主题介绍驱动程序验证程序中的可选功能和规则类。 有关使用标准设置时包含的选项列表,请参阅 标准 设置。
注意
无论选择了哪些选项,都会对正在验证的驱动程序执行某些 自动检查 。 如果驱动程序在 IRQL 不当处使用内存,则调用或释放旋转锁和内存分配、错误切换堆栈或释放内存池而不首先删除计时器,驱动程序验证程序将检测此行为。 卸载驱动程序后,驱动程序验证程序将检查是否已正确释放其资源。
使用 /ruleclass 启用规则类
从 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 |
其他规则类
这些规则类适用于特定方案测试。 规则类标记为“ (*) 需要 I/O 验证 (5) ,将自动启用。 标记有 (标志**) 支持禁用单个规则。
规则类 | 十进制 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 处的分页内存或持有旋转锁,则驱动程序验证程序将会检测到此行为。
Windows 8.1) 中称为随机化低资源模拟的低资源模拟 (
启用此选项后,驱动程序验证程序随机失败池分配请求和其他资源请求。 通过将这些分配故障注入到系统中,驱动程序验证程序可以测试驱动程序处理资源不足情况的能力。
启用此选项后,驱动程序验证程序会检查驱动程序是否在卸载时释放了所有内存分配。 这会揭示内存泄漏。
当此选项处于活动状态时,驱动程序验证程序将从特殊池分配驱动程序的 IRP,并监视驱动程序的 I/O 处理。 这将检测 I/O 例程的使用是否非法或不一致。
当此选项处于活动状态时,驱动程序验证程序将监控驱动程序对旋转锁、互斥体和快速互斥体的使用。 这会检测驱动程序的代码是否有可能在某个时候造成死锁。
当此选项处于活动状态时,驱动程序验证程序会监视多个 I/O 管理器例程的调用,并执行 PnP IRP、电源 IRP 和 WMI IRP 的压力测试。 在 Windows 7 及更高版本的 Windows 操作系统中,增强型 I/O 验证的所有功能都包含在 I/O 验证过程中,并且不再需要在驱动程序验证程序管理器或命令行中选择此选项。
如果此选项处于活动状态,驱动程序验证程序将监视驱动程序对 DMA 例程的使用。 这将检测 DMA 缓冲器、适配器和映射寄存器的使用是否不正确。
(Windows Vista 及更高版本) 当此选项处于活动状态时,驱动程序验证程序会查找可能导致安全漏洞的常见错误,例如通过内核模式例程引用用户模式地址。
(Windows Vista 及更高版本) 当此选项处于活动状态时,驱动程序验证程序会查找驱动程序崩溃的常见原因,例如释放内存的错误处理。
(Windows Vista 及更高版本) 当此选项处于活动状态时,驱动程序验证程序通过返回对 IoCallDriver 的随机调用返回STATUS_PENDING来测试驱动程序对STATUS_PENDING返回值的响应。
(Windows Server 2003 及更高版本) 当此选项处于活动状态时,驱动程序验证程序监视驱动程序使用 IRP 并创建 IRP 使用的日志。
(Windows Vista 及更高版本) 当此选项处于活动状态时,驱动程序验证程序会监视 Storport 微型端口驱动程序,以便不当使用导出的 Storport 例程、过多的延迟和对 Storport 请求的不当处理。
(从Windows 8) 开始,当此选项处于活动状态时,驱动程序验证程序会随机化线程计划,以帮助刷新使用电源管理框架的驱动程序中的并发错误, (PoFx) 。 对于不直接使用 Power Management Framework (PoFx) 的驱动程序,不建议使用此选项。
(从Windows 8) 开始,当此选项处于活动状态时,驱动程序验证程序会应用一组设备驱动程序接口 (DDI) 规则,用于检查驱动程序与操作系统内核接口之间的正确交互。
(从Windows 8) “堆栈的固定 MDL 检查”选项开始,可监视驱动程序如何处理驱动程序堆栈中的固定 MDL 缓冲区。 驱动程序验证程序可检测是否对固定 MDL 缓冲区进行了非法修改。 若要使用此选项,必须在至少一个驱动程序上启用 I/O 验证。
(从Windows 8) “驱动程序固定 MDL 检查”选项开始,可以监视驱动程序如何按驱动程序处理固定 MDL 缓冲区。 此选项可检测是否对固定 MDL 缓冲区进行了非法修改。 若要使用此选项,你必须在至少一个驱动程序上启用 I/O 验证。
(仅可用于Windows 8和 WDK 8) “基于堆栈的故障注入”选项在内核模式驱动程序中注入资源故障。 此选项结合使用了特殊驱动程序 KmAutoFail.sys 和驱动程序验证程序来侵入驱动程序错误处理路径。
(从Windows 8.1) 系统低资源模拟选项开始,在内核模式驱动程序中注入资源故障。
(从Windows 8.1) 开始,当此选项处于活动状态时,驱动程序验证程序会应用一组 NDIS 和无线 LAN (WIFI) 规则,用于检查 NDIS 微型端口驱动程序与操作系统内核之间的正确交互。
(从Windows 8.1) 开始,此选项随机化线程计划,以帮助检测驱动程序中的并发 bug。
(从Windows 8.1) 开始,此选项监视在Hyper-V 可扩展交换机内运行的可扩展交换机) 扩展 (筛选器驱动程序。
端口/微型端口接口检查使驱动程序验证程序能够检查PortCls.sys与其音频微型端口驱动程序之间的 DDI 接口,以及ks.sys及其 AVStream 微型端口驱动程序。 请参阅 AVStream 驱动程序的规则和音频驱动程序的规则。
使用基于虚拟化的安全性来隔离代码完整性时,内核内存变成可执行内存的唯一方式是通过代码完整性验证。 这意味着永远都不能写入和执行 (W+X) 内核内存页面,并且不能直接修改可执行代码。 代码完整性检查可确保这些代码完整性规则的兼容性,并检测违规行为。
WDF 验证检查内核模式驱动程序是否遵循 Kernel-Mode Driver Framework (KMDF) 要求。
其他 IRQL 检查
其他 IRQL 检查增强了用于PASSIVE_LEVEL的 DDI 符合性检查 IRQL 规则。 它由两个规则组成:
- IrqlIoRtlZwPassive 规则指定仅当驱动程序在 IRQL = PASSIVE_LEVEL时调用规则中列出的 DDI。
- IrqlNtifsApcPassive 规则指定仅当驱动程序在 IRQL = PASSIVE_LEVEL或 IRQL <= APC_LEVEL时调用规则中列出的 DDI。
驱动程序隔离检查对于验证Windows驱动程序的运行时驱动程序包隔离要求至关重要。有关详细信息,请参阅 Windows 驱动程序入门。 检查监视器注册表对隔离驱动程序包不允许的读取和写入操作。
标准设置
标准设置中包含的选项 |
---|
增强的 I/O 验证 (在 Windows 7 及更高版本中,选择 I/O 验证) 时,将自动激活此选项 |
其他检查 (Windows Vista 及更高版本) |
从Windows 8) 开始的 DDI 符合性检查 ( |
需要 I/O 验证的驱动程序验证程序选项
有四个选项需要你先启用 I/O 验证。 如果未启用 I/O 验证,则无法启用这些选项。