靜態工具標誌測試
此測試會執行靜態分析,旨在提升驅動程式的可靠性和安全性。 需要進行核心模式驅動程式提交,才能通過靜態工具標誌測試以獲得認證。 必須使用 CodeQL 進行核心模式驅動程式的靜態分析,才能提交至 Microsoft 以獲得簽章或認證,並符合 Windows 硬體相容性計畫。
測試詳細資料
規格 |
|
平台 |
|
支援的版本 |
|
預期的執行時間 (分鐘) | 5 |
類別 | 部署 |
逾時 (分鐘) | 0 |
需要重新開機 | false |
需要特殊設定 | false |
類型 | automatic |
Windows 用戶端認證的靜態分析
CodeQL 是一項強大的靜態分析技術,用於保護軟體安全。 它結合一個包含高價值安全性查詢的廣泛套件和一個健全的平台,是保護第三方驅動程式程式碼的重要工具。
為了提高 Windows 生態系統的安全性標準,Microsoft 已在 Windows 硬體相容性計畫中新增這項要求,指出所有驅動程式提交都必須在驅動程式原始程式碼上使用 CodeQL 引擎,並修正所有視為「必須修正」的查詢。
這項要求由靜態工具標誌測試強制執行。
如需如何下載 CodeQL 並在驅動程式原始程式碼上執行的詳細資訊,請參閱 CodeQL 和靜態工具標誌測試。 依照該頁面及下方的「CodeQL 和產生 DVL」章節執行後,可確保靜態工具標誌測試正確地取用在驅動程式原始程式碼上執行 CodeQL 的結果,做為靜態工具標誌測試的一部分。
CodeQL 和靜態工具標誌測試適用於何種驅動程式類型?
目前,靜態工具標誌測試需要執行 CodeQL,且圖形驅動程式以外的所有核心模式驅動程式皆傳遞「Must-Fix」查詢集。 請注意,儘管目前並非必要,但我們強烈建議對圖形驅動程序執行 CodeQL。 某些查詢可能也會在使用者模式元件中找到實用的瑕疵。
我們期望擴充測試及其查詢,以便在未來能夠要求圖形驅動程式、使用者模式驅動程式、驅動程式元件和其他驅動程式套件元件的結果。 如果您在圖形驅動程式或使用者模式驅動程式執行 CodeQL 時遇到非預期行為或誤判,請在 Windows-Driver-Developer-Supplemental-Tools 存放庫提出問題。
如果您要對圖形驅動程式執行測試,測試會填入 HLK,但會依預設通過。 如果您只對使用者模式元件執行,或提交不含程式碼的驅動程式套件 (亦即 inf 延伸模組),則測試可能不會填入內容。 如果您提交核心模式元件,且測試意外未填入內容,請確認驅動程式已簽署測試 (請參閱下方備註)。
Windows Server 認證的靜態分析新功能
針對 Windows Server 2025 認證,CodeQL 將成為靜態工具標誌測試的必要工具,也就是說,所有驅動程式提交都必須至少通過所有「必須修正」的規則,才能為 WHCP 所接受。 不過,若您要認證的是 Windows Server 2022 和較低版本,可以使用 CA、SDV 和 CodeQL。 使用具備相符 OS 發行版本的 WDK 組建。
如需下載不同 WDK 版本的資訊,請參閱下載 Windows 驅動程式套件 (WDK)。 加入 Windows 測試人員計畫以下載 WDK Insider Preview 組建 (https://aka.ms/wipwdk)。
CodeQL 和產生驅動程式驗證記錄檔 (DVL)
Microsoft 正在強制執行使用靜態工具標誌測試來執行 CodeQL 查詢的要求。 靜態工具標誌測試使用驅動程式驗證記錄檔 (DVL) 從驅動程式原始程式碼上執行的不同靜態分析收集結果。 然後,此 DVL 會透過 HLK 測試剖析成為靜態工具標誌測試的一部分。
CodeQL 結果將依照相同的模式,使用 DVL 顯示要認證的驅動程式已執行了適當的 CodeQL 查詢,以通過 HLK 測試並獲得認證。
將 .sarif 檔案放在與產生 DVL 之.vcxproj 檔案相同的目錄中。 只要檔案結尾是 “.sarif”,確實的名稱並不重要。
其他文件
此功能區域中的測試可能有其他文件,包括必要條件、設定和疑難排解等資訊,可在下列主題中找到:
執行測試
執行測試前,您必須執行下列步驟來建立驅動程式驗證記錄檔 (DVL)。
視需要在驅動程式原始程式碼上執行 CodeQL、靜態驅動程式驗證器和程式碼分析工具。
執行可產生 DVL 檔案的公用程式。 如需關於建立驅動程式驗證記錄檔以包含在提交中的詳細資訊,請參閱建立驅動程式驗證記錄檔。
將 DVL 檔案從建立 DVL 檔案的電腦複製到執行靜態工具標誌測試時所使用的測試電腦。 將檔案複製到測試電腦上的 %systemdrive%\DVL 目錄。 複製新的驅動程式驗證記錄檔之前,請務必刪除測試電腦上的目錄內容。
執行靜態工具標誌測試。 如果測試未填入 HLK,請確認驅動程式已簽署測試 (請參閱下方)。 或者,如果您提交的套件中不含 .sys 檔案,則測試預期不會填入內容。
注意
靜態工具標誌測試的目標,是要求身為驅動程式開發人員的您,在提交套件之前先對驅動程式執行 CodeQL,以便協助消除錯誤。 不過,我們過去曾收到報告,指出由於架構限制,測試錯誤地對堆疊上的其他驅動程式要求 CodeQL 結果,導致認證遭到封鎖。
為了解決 Windows 24H2 的這個問題,我們轉移到簽署驅動程式的裝置已經完成測試的模型。 經過這項變更,收件匣 Windows 驅動程式就不會遭到測試加上標幟了。 此外,為了解除封鎖對其他第三方裝置執行 HLK 測試的開發人員,測試也會避免讓 WHCP 簽署的驅動程式收到標幟的結果。
為了取得認證而執行此測試時,您的驅動程式應簽署測試,才能確保測試正確運作。 若沒有這麼做,可能會導致測試無法針對 CodeQL 違規發出警告,或測試無法列舉。
注意
靜態工具標誌測試只需要 DVL 檔案即可顯示已執行 Code QL。 測試不要求所有規則均通過。 此外,此作業必須在含有桌面的伺服器上執行。 如果 HLK 測試因使用 Server Core 而失敗 (出現錯誤訊息:「找不到 RoMetadata.dll),因應措施是在含桌面的伺服器上執行,然後將套件與包含 Server Core 結果的套件合併。 如需如何合併套件的資訊,請參閱:/windows-hardware/test/hlk/user/merge-packages。
疑難排解
如需 HLK 測試失敗的一般疑難排解,請參閱針對 Windows HLK 測試失敗進行疑難排解。
其他相關資訊
命令語法
命令選項 | 描述 |
---|---|
TE.exe /inproc /enablewttlogging /appendwttlogging Devfund_DvlTest.dll /p:WDKClass=[WDKClass] /p:DeviceClass=[DeviceClass] /p:QueryDriverNames=[QueryDriverNames] |
執行測試。 |
注意
如需此測試二進位檔的命令列說明,請輸入 /?。
檔案清單
檔案 | Location |
---|---|
Devfund_DvlTest.dll |
<testbinroot>\OSBinRoot |
Microsoft.StaticToolsLogo.ObjectModel.dll |
<testbinroot>\OSBinRoot |
TE.exe |
<testbinroot>\OSBinRoot |
參數
參數名稱 | 參數描述 |
---|---|
WDKClass | 裝置類別 |
DeviceClass | 裝置類別參數 |
QueryDriverNames | 預期的驅動程式名稱。 |