支援的驅動程式

若要讓 SDV 驗證驅動程式,它必須能夠解譯驅動程式程式碼,特別是驅動程式的進入點,以及支援所需驅動程式功能的函式和常式中的程式碼。

下列各節說明驅動程式的基本需求,以及 SDV 預期會驗證驅動程式的特定語法。 SDV 不會驗證驅動程式是否符合這些需求,但如果驅動程式不符合規範,SDV 可能無法執行,而且在罕見的情況下,會報告誤判或誤判結果,因為錯誤解譯。

基本驅動程式特性

SDV 只能驗證具有下列特性的驅動程式:

  • SDV 會驗證以 C 和 C++ 撰寫的驅動程式和程式庫。

  • SDV 只會在符合 KMDF 規範和 WDM 相容的設備磁碟機上執行完整驗證, (函式驅動程式、篩選驅動程式和匯流排驅動程式) 、NDIS 驅動程式 (篩選、迷你埠和通訊協定驅動程式) ,以及 Storport 驅動程式。

  • SDV 在不符合上述類別的驅動程式上,嘗試對泛型屬性進行有限驗證 (,例如 NullCheck) 。

  • SDV 可以使用 WDM 函式角色類型來驗證宣告其驅動程式回呼函式的 WDM 驅動程式。 如需如何宣告函式的詳細資訊,請參閱 使用 WDM 驅動程式的函式角色類型來宣告函式

  • SDV 可以驗證從 核心模式驅動程式架構產生的驅動程式,前提是您使用 SDV-KMDF 回呼函式角色類型宣告每個回呼函式。 如需詳細資訊,請參閱 使用 KMDF 驅動程式的函式角色類型來宣告函式

  • SDV 可以驗證 NDIS 驅動程式,前提是您使用 SDV-NDIS 回呼函式類型來標注每個回呼函式與函式宣告。 如需詳細資訊,請參閱 使用 NDIS 驅動程式的函式角色類型來宣告函式。

  • SDV 可以驗證 Storport 驅動程式,前提是您已使用函式宣告標注每個回呼函式。 您可以使用SDV-Storport回呼函式類型來執行此動作。 如需詳細資訊,請參閱 使用 Storport 驅動程式的函式角色類型宣告函式。

基本驅動程式需求

若要讓 SDV 驗證 WDM 驅動程式,驅動程式必須:

若要讓 SDV 驗證 KMDF 驅動程式,驅動程式必須:

若要讓 SDV 驗證 NDIS 驅動程式,驅動程式必須:

此外,SDV 可以驗證支援下列專案的驅動程式:

保留函式名稱

當驅動程式或程式庫程式碼使用 SDV 在內部使用的相同函式名稱模式時,SDV 驗證引擎 不會正常運作。

具體而言,如果:

  • 程式碼包含開頭為 __init 的函式名稱,後面接著一或多個整數,例如__init123。

  • 程式碼包含開頭為sdv_的函式名稱,例如 sdv_Func,或包含字串 _sdv_,例如 Func_sdv_ 或 Func_sdv_foo。

  • 程式庫會使用 .def 檔案來重新命名匯出的函式,而外部名稱與程式庫中另一個靜態函式的名稱相同。

如果驅動程式程式碼或程式庫程式碼包含這些元素,SDV 會嘗試驗證驅動程式或處理程式庫,但結果為 不支援的功能 (NSF) 。 如需 SDV 結果的詳細資訊,請參閱 解譯靜態驅動程式驗證器結果