了解静态驱动程序验证程序

若要编写符合 Windows 驱动程序模型 (WDM) 或内核模式驱动程序框架 (KMDF) 、NDIS 或 Storport 的可靠驱动程序,必须具备专业知识并了解驱动程序如何与 I/O 管理器交互。 测试这些驱动程序同样棘手。

开发可靠的驱动程序可能具有挑战性,原因如下:

  • 驱动程序是异步的,即使在单处理器计算机上也是如此。

  • 司机是大量可重入的。

  • 驱动程序使用许多模糊的规则。

  • 驱动因素模型会随着时间推移而演变和老化。

测试设备驱动程序受以下原因限制:

  • 观察。 在驱动程序和操作系统之间的交互中,你无法观察到错误。 驱动程序可能会违反隐式使用规则,从而导致崩溃或行为不当,但在开发和测试驱动程序时很难检测到错误的根本原因。

  • 控制性。 在正常情况下正常运行的驱动程序可能会有细微的错误,这些错误仅在异常情况下发生,例如堆栈中其下方的驱动程序无法通过 IRP。 这种情况很难执行,因此传统测试无法通过驱动程序代码充分检测错误路径。

SDV 增强了测试驱动程序时的观察和控制能力。 通过定义规则来正确使用 WDM、KMDF、NDIS 和 Storport 函数并监视驱动程序对这些规则的符合性,SDV 提高了观察错误的能力。 例如,WDM 规则 LowerDriverReturn 指定在某些情况下,驱动程序的调度例程应始终返回堆栈中较低级驱动程序返回的值。

SDV 还提供以下功能来增强控制:

  • 驱动程序环境的恶意模型,其中 (操作系统调用等几种最坏情况持续失败,) 可能发生。

  • 功能强大的静态分析 (称为 模型检查) ,系统地探索驱动程序中所有可能的执行路径。

SDV 是设备驱动程序的基本单元测试工具。 它将驱动程序置于恶意环境中,并通过查找违反驱动程序模型使用规则来系统地测试通过驱动程序的代码路径。