瞭解靜態驅動程式驗證器
若要撰寫符合 Windows 驅動程式模型 (WDM) 或核心模式驅動程式架構 (KMDF)、NDIS 或 Storport 的健全驅動程式,您必須具備專業知識並了解驅動程式與 I/O 管理員的互動方式。 測試這些驅動程序同樣棘手。
開發實心驅動程式可能具有挑戰性,原因如下:
驅動程式是異步的,即使在單處理器計算機上也是如此。
司機們非常重新進入。
驅動程式使用許多模糊的規則。
驅動程式模型是進化和年齡隨著時間推移。
測試設備驅動器受限於下列原因:
觀察。 您無法在驅動程式與作業系統之間的互動中觀察到錯誤。 驅動程式可能會違反隱含的使用規則,導致當機或不當行為,但很難在開發和測試驅動程式時偵測錯誤的根本原因。
管控。 在正常情況下正常運作的驅動程式可能會有細微的錯誤,只有在例外狀況中才會發生,例如當堆棧下方的驅動程式失敗 IRP 時。 這類情況很難練習,因此傳統測試無法透過驅動程式程式代碼適當地偵測錯誤路徑。
SDV 可增強測試驅動程式時的觀察和控制。 藉由定義適當使用 WDM、KMDF、NDIS 和 Storport 函式的規則,以及監視驅動程式對這些規則的合規性,SDV 可改善觀察錯誤的能力。 例如,WDM 規則 LowerDriverReturn 指定在某些情況下,驅動程式的分派例程應該一律傳回堆棧中較低驅動程式所傳回的值。
SDV 也會藉由提供下列專案來增加控制:
驅動程式環境的敵對模型,其中可能發生數個最壞的情況(例如操作系統呼叫持續失敗)。
功能強大的靜態分析(稱為 模型檢查),可有系統地探索驅動程式中的所有可能執行路徑。
SDV 是設備驅動器的基本單元測試工具。 它會將驅動程式放在敵對的環境中,並透過驅動程式系統地測試程式代碼路徑,方法是尋找違反驅動程式模型使用規則。
重要
不再支援 SDV,且 Windows 24H2 WDK 或 EWDK 版本無法使用 SDV。 它不適用於比組建 26017 還新的 WDK,而且不包含在 Windows 24H2 RTM WDK 中。
從下載 Windows 驅動程式套件 (WDK) 下載 Windows 11 版本 22H2 EWDK(2023 年 10 月 24 日發行)與 Visual Studio 組建工具 17.1.5,仍然可以使用 SDV。 建議只使用企業 WDK 來執行 SDV。 不建議使用舊版的標準 WDK 搭配最新版的 Visual Studio,因為這可能會導致分析失敗。
接下來,CodeQL 將是驅動程式的主要靜態分析工具。 CodeQL 提供功能強大的查詢語言,會將程式代碼視為要查詢的資料庫,讓您輕鬆地撰寫查詢特定行為、模式等等。
如需使用 CodeQL 的詳細資訊,請參閱 CodeQL 和靜態工具標誌測試。