靜態驅動程式驗證器命令 (MSBuild)
您可以透過安裝 Windows 驅動程式套件 (WDK) 或執行企業 Windows 驅動程式套件 (EWDK),在 Visual Studio 命令提示 字元視窗中執行靜態驅動程式驗證器 (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 和靜態工具標誌測試。
msbuild /t:sdv /p:Inputs="Parameters" ProjectFile /p:Configuration=configuration /p:Platform=platform
您必須選取發行組態(例如 /p:Configuration=“Windows 7 Release”。 如需支援的發行組態清單,請參閱 建置驅動程式。 平臺可以是 Win32 (適用於 x86)或 x64 (例如 /p:Platform=Win32)。
注意
請務必檢查計算機的電源管理計劃,以確保計算機不會在分析期間進入睡眠狀態。
參數
/掃描
掃描驅動程式的原始程式碼中是否有函式角色類型宣告。 如需如何宣告驅動程式提供的回呼函式和分派例程的相關信息,請參閱 使用函式角色類型宣告。 在此掃描期間,SDV 會嘗試偵測驅動程式需要驗證驅動程式的驅動程序進入點。 它會記錄 Sdv-map.h 中掃描的結果,這是它在驅動程式項目目錄中建立的檔案。
如需詳細資訊,請參閱 準備原始程式碼。
/check:Rule Rule | ,...
使用指定的規則啟動驗證。 您可以使用逗號分隔每個規則,以指定一個以上的規則。 執行 /check: 命令,並指定驅動程式的Visual Studio專案檔 (*.vcxproj)。
Rule 是一個 規則的名稱或包含通配符的規則 名稱模式, 表示一或多個字元。 單獨使用時,通配符 \ 代表所有規則。
/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 命令,並指定驅動程式的Visual Studio專案檔 (*.vcxproj)。
驗證完成後,即可取得結果,並維持可用狀態,直到您使用 /clean 命令從驅動程式的專案目錄刪除 SDV 檔案為止。
/乾淨
從目錄刪除 SDV 檔案。 由於這些檔案可用來產生靜態驅動程序驗證器報表顯示, /clean 命令也會刪除驗證的報告。
執行 /clean 命令,並指定驅動程式或連結庫的 Visual Studio 專案檔 (*.vcxproj)。 命令只會刪除指定之專案的 SDV 檔案。
在每個驗證之前,先執行驅動程序專案的 /clean 命令。
當連結庫檔案過期時,請執行連結庫的 /clean 命令,例如連結庫程式碼變更時。
如果 Sdv-map.h 檔案中的核准旗標設定為 true,則 /clean 命令不會移除 Sdv-map.h 檔案 (Approved=true)。 SDV 接著可以使用此檔案進行未來的驗證。
/?
顯示 SDV 命令的使用方式。 使用此參數的命令不需要在建置環境視窗中執行。
註解
執行 msbuild /t:/sdv p:/Inputs= /? 而不顯示 SDV 命令的使用方式。
/clean 命令會刪除 SDV 用來建立靜態驅動程式驗證器報告顯示的檔案以進行驗證。 執行此命令之後,將無法再顯示驗證的靜態驅動程序驗證器報告。
範例
若要在 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