支援的驅動程式
若要讓 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 驅動程式,驅動程式必須:
包含 Wdm.h 或 Ntddk.h (Wdm.h 是 Ntddk.h) 的子集。
使用裝置物件簡介和下列所述的方法來建立 裝置物件 。
在撰寫卸載常式中,具有如撰寫 卸載常式中所建議所撰寫的 Unload 常式。
使用函式角色類型宣告來宣告每個分派函式,如 使用函式角色類型宣告中所述。 如需 WDM 角色類型和 _Dispatch_type_ (類型) 批註的相關資訊,請參閱 使用 WDM 驅動程式的函式角色類型宣告函式。
若要讓 SDV 驗證 KMDF 驅動程式,驅動程式必須:
包含 Wdf.h 和 Ntddk.h。
建立 使用 Framework 開發驅動程式中所述的KMDF 物件。
使用 SDV-KMDF 回呼函式角色類型標注每個回呼函式,如 使用函式角色類型宣告中所述。 如需支援的角色類型清單,請參閱 靜態驅動程式驗證程式 KMDF 函式宣告。
若要讓 SDV 驗證 NDIS 驅動程式,驅動程式必須:
包含 Ndis.h 和 Ntddk.h。
遵循 網路設計指南 中的指導方針來建立 NDIS 驅動程式。
使用 SDV-NDIS 回呼函式角色類型來標注每個回呼函式,如 使用函式角色類型宣告中所述。 如需支援的角色類型清單,請參閱 靜態驅動程式驗證器 NDIS 函式宣告。
此外,SDV 可以驗證支援下列專案的驅動程式:
保留函式名稱
當驅動程式或程式庫程式碼使用 SDV 在內部使用的相同函式名稱模式時,SDV 驗證引擎 不會正常運作。
具體而言,如果:
程式碼包含開頭為 __init 的函式名稱,後面接著一或多個整數,例如__init123。
程式碼包含開頭為sdv_的函式名稱,例如 sdv_Func,或包含字串 _sdv_,例如 Func_sdv_ 或 Func_sdv_foo。
程式庫會使用 .def 檔案來重新命名匯出的函式,而外部名稱與程式庫中另一個靜態函式的名稱相同。
如果驅動程式程式碼或程式庫程式碼包含這些元素,SDV 會嘗試驗證驅動程式或處理程式庫,但結果為 不支援的功能 (NSF) 。 如需 SDV 結果的詳細資訊,請參閱 解譯靜態驅動程式驗證器結果。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應