针对堆栈的固定 MDL 检查
面向堆栈的固定 MDL 检查选项用于监控驱动程序如何处理驱动程序堆栈中的固定 MDL 缓冲区。 驱动程序验证程序可检测是否对固定 MDL 缓冲区进行了非法修改。 若要使用此选项,必须在至少一个驱动程序上启用 I/O 验证。
注意此选项从 Windows 8 开始可用。
“堆栈的固定 MDL 检查”选项可确保驱动程序仅在请求离开驱动程序堆栈时遵循固定 MDL 缓冲区的规则。
首次在 IoCallDriver 例程中看到具有固定 MDL 的 IRP 时,将从固定 MDL 缓冲区的内容中计算出唯一签名并存储在内部数据库中。 在 IoCompleteRequest 例程中完成 IRP 期间,如果 IRP 仍携带我们为其记录了签名的固定 MDL,驱动程序验证程序将验证缓冲区是否未更改。
在 IRP 的整个生存期内,无法修改写入请求的固定缓冲区。 对于读取请求,固定缓冲区不能在其调度路径上修改,因此缓冲区签名的比较是在上次调用 IoCallDriver 时完成的。
“堆栈的固定 MDL 检查”选项验证整个驱动程序堆栈中的 MDL 缓冲区不变性,而不考虑缓冲区在通过堆栈中的单个驱动程序时会发生什么情况。 此选项是全局性的,不能基于每个驱动程序选择性地强制实施。 “堆栈的固定 MDL 检查”选项只能捕获冲突,而无法查明违反缓冲区不变性的驱动程序。 若要帮助查明故障驱动程序,请使用“驱动程序的 固定 MDL 检查 ”选项,该选项在每次调用 IoCallDriver 和 IoCompleteRequest DDI 时验证缓冲区内容的固定性。
激活此选项
可以使用驱动程序验证程序管理器或 Verifier.exe 命令行为一个或多个驱动程序激活固定 MDL 检查堆栈功能。 必须重新启动计算机才能激活或停用“堆栈的固定 MDL 检查”选项。 有关详细信息,请参阅 选择驱动程序验证程序选项。
若要激活“堆栈的固定 MDL 检查”选项,还必须激活 I/O 验证。
在命令行
在命令行中,Stack 的固定 MDL 检查由 0x00002000 ( 位 13) 表示。 若要激活堆栈的固定 MDL 检查,请使用标志值0x00002010或向标志值添加0x00002010。 此值激活堆栈 (0x00002000) 的 I/O 验证 (0x10) 和固定 MDL 检查。 例如:
verifier /flags 0x00002010 /driver MyDriver.sys
下次启动后,该功能将处于活动状态。
使用驱动程序验证程序管理器
- 启动驱动程序验证程序管理器。 在命令提示符窗口中键入 验证程序 。
- 选择“ 为代码开发人员创建自定义设置 () ,然后单击” 下一步”。
- 从完整列表中选择“选择单个设置”。
- 为堆栈选择 (检查) I/O 验证和固定 MDL 检查。
- 重新启动计算机。