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

若要编写符合 Windows 驱动模型 (WDM) 或内核模式驱动程序框架 (KMDF) 、NDIS 或 Storport 的可靠驱动程序,您必须具备专业技能并了解该驱动程序如何与 i/o 管理器进行交互。 对这些驱动程序进行测试同样比较棘手。

由于以下原因,开发固态驱动程序可能会很困难:

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

  • 驱动程序是大规模可重入的。

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

  • 随着时间的推移,驱动程序模型是进化和生存期。

测试设备驱动程序的原因如下:

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

  • 控制性。 在正常情况下正常工作的驱动程序可能会出现细微的错误,这些错误仅出现在异常情况下,例如,堆栈中位于其下的驱动程序无法使用 IRP。 这种情况很难进行,因此传统的测试不会通过驱动程序代码充分检测错误路径。

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

SDV 还通过提供以下内容来提高控制:

  • 驱动程序环境的恶意模型,其中几个最糟糕的情况 (例如,操作系统调用连续失败) 可能会发生。

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

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