您可以在 Visual Studio 命令提示字元 視窗中執行靜態驅動程式驗證器 (SDV) ,方法是安裝 Windows 驅動程式套件 (WDK) 或執行企業 Windows 驅動程式套件 (EWDK) 。 流覽至儲存驅動程式專案檔案或程式庫專案檔案的目錄。 參數可以依命令行上的任何順序顯示。
Important
不再支援 SDV,且 Windows 24H2 WDK 或 EWDK 版本無法使用 SDV。 它不適用於比組建 26017 還新的 WDK,而且不包含在 Windows 24H2 RTM WDK 中。
從 下載 Windows 驅動程式套件 (WDK),並下載含有 Visual Studio 組建工具 17.1.5 的 Windows 11 版本 22H2 EWDK(2023 年 10 月 24 日發行),即可繼續使用 SDV。 建議只使用企業 WDK 來執行 SDV。 不建議使用舊版的標準 WDK 搭配最新版的 Visual Studio,因為這可能會導致分析失敗。
接下來,CodeQL 將是驅動程式的主要靜態分析工具。 CodeQL 提供功能強大的查詢語言,會將程式代碼視為要查詢的資料庫,讓您輕鬆地撰寫查詢特定行為、模式等等。
如需使用 CodeQL 的詳細資訊,請參閱 CodeQL 和靜態工具標誌測試。
msbuild /t:sdv /p:Inputs="Parameters" ProjectFile /p:Configuration=configuration /p:Platform=platform
您必須選取版本設定 (例如, /p:Configuration=“Windows 7 Release”)。 如需支援的發行組態清單,請參閱 建置驅動程式。 平臺可以是 Win32 (適用於 x86) 或 x64 (例如, /p:Platform=Win32) 。
Note
請務必檢查計算機的電源管理計劃,以確保計算機不會在分析期間進入睡眠狀態。
Parameters
/scan
掃描驅動程式的原始程式碼,以取得函式角色類型宣告。 如需如何宣告驅動程式提供的回呼函式和分派常式的資訊,請參閱 使用函式角色類型宣告。 在此掃描期間,SDV 會嘗試偵測驅動程式的進入點,以便驗證該驅動程式。 它會在 Sdv-map.h 中記錄掃描結果,這是它在驅動程式專案目錄中建立的檔案。
如需相關資訊,請參閱 準備原始程式碼。
/check:<em>Rule</em> |Rule,...
使用指定的規則啟動驗證。 您可以指定多個規則,方法是以逗點分隔每個規則。 執行 /check: 命令,並指定驅動程式的 Visual Studio 專案檔 (*.vcxproj)。
規則是一個規則的名稱,或包含萬用字元 (*) 來代表一或多個字元的規則名稱型樣。 單獨使用時,萬用字元 (*) 代表所有規則。
/check:RuleList.sdv
使用指定規則清單檔案中的規則啟動驗證。 您只能列出一個具有此參數的檔案。 在規則清單檔案中,每一行可以是一個規則的名稱,也可以是萬用字元 (*) ,代表所有 SDV 規則。 執行 /check:RuleList.sdv 命令,並指定驅動程式的 Visual Studio 專案檔 (*.vcxproj) 。
RuleList.sdv 是規則清單檔案的完整路徑和檔名。 檔案必須具有 .sdv 副檔名。 除非檔案位於本端目錄中,否則路徑是必需的。 如果路徑或檔名包含空格,您必須括住 RuleList。sdv 以引號括起來。
如果您指定 /check: 選項而不指定規則,則 SDV 會使用驅動程式模型的預設規則集來執行。
/lib
處理目前目錄中的程式庫。 SDV 會呼叫 MSBuild.exe 來編譯和建置程式庫以供外部使用,並產生在驅動程式驗證中包含程式庫所需的檔案。
在驗證需要程式庫的驅動程式之前,請先使用此參數。 執行 msbuild /t:sdv /p:Inputs=“/lib” 命令,並指定程式庫的 Visual Studio 專案檔 (*.vcxproj)。
如需 /lib 參數使用和效果的詳細資訊,請參閱 靜態驅動程式驗證器中的程式庫處理。
/view
開啟靜態驅動程式驗證器。 執行 /view 命令,並指定驅動程式的 Visual Studio 專案檔 (*.vcxproj) 。
驗證完成後,結果就會立即提供,而且在您使用 /clean 命令從驅動程式的專案目錄中刪除 SDV 檔案之前,結果會保持可用狀態。
/clean
從目錄刪除 SDV 檔案。 因為這些檔案是用來產生靜態驅動程式驗證器報告顯示,所以 /clean 命令也會刪除驗證的報告。
執行 /clean 命令,並指定驅動程式或程式庫的 Visual Studio 專案檔 (*.vcxproj) 。 命令只會刪除指定之專案的 SDV 檔案。
在每次驗證之前,先執行驅動程式專案的 /clean 命令。
當程式庫檔案過期時,例如當程式庫程式碼變更時,請執行程式庫的 /clean 命令。
如果 Sdv-map.h 檔案中的已核准旗標設為 true (Approved=true),則 /clean 指令不會移除 Sdv-map.h 檔案。 然後,SDV 可以使用此檔案進行未來的驗證。
/?
顯示 SDV 命令的使用方式。 使用此參數的命令不必在建置環境視窗中執行。
Comments
在沒有參數的情況下執行 msbuild /t:/sdv p:/Inputs= /? 會顯示 SDV 命令的使用方式。
/clean 命令會刪除 SDV 用來建立靜態驅動程式驗證器報告顯示以進行驗證的檔案。 執行此命令之後,驗證的靜態驅動程式驗證器報告顯示不再可用。
Examples
若要使用 mydriver 專案本機目錄中驅動程式檔案上的所有規則來執行 SDV:
msbuild /t:sdv /p:Inputs="/check:*" mydriver.VcxProj /p:Configuration="Windows 7 Release"/p:Platform=Win32
若要在本機目錄中的驅動程式檔案上使用 CancelSpinLock 規則來執行 SDV:
msbuild /t:sdv /p:Inputs="/check:CancelSpinLock" mydriver.VcxProj /p:Configuration="Windows 7 Release" /p:Platform=Win32
若要使用 D:\SDV 目錄中 Rules1.sdv 規則清單檔案中指定的規則來執行 SDV:
msbuild /t:sdv /p:Inputs="/check:D:\SDV\Rules1.sdv" mydriver.VcxProj /p:Configuration="Windows 7 Release" /p:Platform=Win32
若要再次執行 SDV,這次使用 /clean 選項:
msbuild /t:sdv /p:Inputs="/clean" mydriver.VcxProj /p:Configuration="Windows 7 Release"/p:Platform=Win32
若要顯示靜態驅動程式驗證器,以便檢視本機目錄中驅動程式最新驗證的結果:
msbuild /t:sdv /p:Inputs="/view" mydriver.VcxProj /p:Configuration="Windows 7 Release" /p:Platform=Win32