如何使用已啟用安全開機測試生產前驅動程式

在零售和生產系統上,Windows 核心只會信任並載入具有生產 WHQL/WHCP 簽章的驅動程式。 若要測試生產階段前驅動程式,驅動程式開發人員必須啟用 TESTSIGNING 非生產驅動程式才能載入。 TESTSIGNING 需要停用安全開機,才能在測試和生產環境中呈現差異。

Windows 核心支援載入以 WHQL/WHCP 生產前簽章簽署的前置生產階段驅動程式。 WHQL/WHCP 簽章可透過Microsoft硬體開發人員中心 (HDC) 存取。

必要條件

  • 使用合作夥伴中心硬體儀錶板簽署您的生產前驅動程式

  • 從最新版本的 Windows 驅動程式套件 (WDK) 或下載中心下載EnableUefiSbTest.exe。 EnableUefiSbTest 工具的預設安裝位置C:\Program Files (x86)\Windows Kits\10\tools\{arch}\SecureBoot\EnableSB{arch} 可以是的其中一個 {amd64, x86, arm, arm64}。 這些原則位於相同的 SecureBoot 目錄:C:\Program Files (x86)\Windows Kits\10\tools\{arch}\SecureBoot\Policies 底下。

啟用生產前 WHQL/WHCP 簽章的支援

一旦驅動程式在生產階段前簽署之後,您就可以布建安裝驅動程式的測試計算機。

布建工具和承載從 Windows 11 版本 22H2 開始提供。

建議使用 EnableUefiSbTest 工具。 或者,您可以從 [HLK 安全開機手動測試] 區段 (UefiSecureBootManualTests.zip\ManualTests\certs\test\db_MSFTtestSigningRoot.cer) 手動佈建Microsoft測試根密鑰。 Microsoft測試金鑰必須包含在安全開機資料庫 (DB) 和安全開機設定原則 (SBCP) 中,才能啟用生產前 WHQL/WHCP 驅動程式簽章的信任。

注意

布建任何安全開機資料庫時,絕對不要生產環境使用內部Microsoft測試密鑰簽署承載。

布建步驟

  1. 在系統的 UEFI 功能表中,如果適用,請停用安全開機並清除安全開機密鑰。 這可讓佈建工具設定測試密鑰,以信任安全開機原則檔案,並重新啟用安全開機。

  2. 根據系統架構,以及 WDK 隨附的佈建工具,EnableUefiSbTest.exe下載正確的安全開機原則 .p7b 檔案。 如需布建工具的位置,請參閱 必要條件

  3. 在提升許可權的 PowerShell 或終端機實例中執行下列命令,並驗證 PK、KEK、db、dbx 和 OemId 值是空的 (“找不到”):

    EnableUefiSbTest.exe /dump
    

    如果安全開機已停用且金鑰已成功清除,則預期會有下列輸出:

    EnableUefiSbTest.exe /dump
    
    Name: PK
    Not Found
    
    Name: KEK
    Not Found
    
    Name: db
    Not Found
    
    Name:dbx
    Not Found
    
    Name: OemId
    Not Found
    
  4. 在提升許可權的 PowerShell 或終端機實例中執行下列命令,將安全開機測試金鑰布建至安全開機資料庫,然後重新啟用安全開機:

    EnableUefiSbTest.exe
    

    注意

    EnableUefiSbTest.exe成功執行之後,將不會輸出/傳回任何專案。

    您可以選擇性地指定 thirdparty 命令,將 Microsoft UEFI CA 憑證與安全開機 DB 中的預設密鑰一起佈建。 這允許信任Microsoft UEFI CA 簽署的EFI可執行檔,例如選項 ROM 和非 Windows 開機載入器。

    EnableUefiSbTest.exe /thirdparty
    
  5. 針對執行桌面型 Windows 的裝置,請在提升許可權的 PowerShell 或終端機實例中執行下列命令,將系統的 EFI 磁碟分區掛接至 S:/EFI/Microsoft/Boot:安全開 機原則 (.p7b) 檔案:

    mountvol s: /s
    copy-item <path_to_p7b> S:/EFI/Microsoft/Boot/SecureBootPolicy.p7b
    

    注意

    因為 Windows 核心需要格式 SecureBootPolicy.p7b為 的安全開機原則檔案,因此不得修改名稱和檔格式。

  6. 對於未執行桌面型 Windows 的裝置,請複製對應 PreProductionPolicy.pol\EFI\Microsoft\Boot\Policies的 。 然後從 \EFI\Microsoft\Boot\Policies刪除 FullDebugPolicy.pol

  7. 重新啟動系統以允許 Windows 核心重新整理原則。 安全開機現在會由布建工具重新啟用並自動布建。 這可以藉由重新執行 EnableUefiSbTest.exe /dump 為系統管理員,並驗證只有 dbxOemId 值是空的 (「找不到」來驗證。

  8. 系統已準備好驗證生產前 WHQL/WHCP 簽署的驅動程序內容。 重新啟動系統不會影響裝置的狀態,只要未修改安全開機密鑰和安全開機原則檔案。

取消布建步驟

若要取消布建系統,並退出退出系統上的生產前簽署信任:

  1. 在提升許可權的 PowerShell 或終端機實例中執行下列命令,以從掛接的 EFI 磁碟分區中刪除安全開機原則檔案:

    mountvol s: /s
    rm  S:/EFI/Microsoft/Boot/SecureBootPolicy.p7b
    

    注意

    如果在 HoloLens 2 上執行驗證,也必須從 S:/EFI/Microsoft/Boot/Policies 中移除 .pol 原則檔案。

  2. 開機進入系統的 UEFI 功能表,並將 [安全開機金鑰] 重新設定為原廠設定。

  3. 重新啟動系統並執行 EnableUefiSbTest.exe /dump,其應該傳回 、KEKdbdbx 值,PK指出索引鍵已返回原廠狀態。

    注意

    建議您在系統上全新安裝 Windows,以取消布建適用於零售環境的系統。

常見問題集

問:EnableUefiSbTest.exe /dump此命令只會顯示 的結果PK。 是不是哪裡出錯了?

答: 如果此工具是以標準使用者身分執行,而不是以系統管理員身分執行,就會發生這種情況。

問:EnableUefiSbTest.exe /dump此命令會傳回我無法辨識的錯誤。 我該如何處理?

答: 當安全開機未成功停用且/或尚未清除安全開機密鑰時,工具可能會擲回錯誤。 確認安全開機已停用。