如何测试启用了安全启动的预生产驱动程序

在零售和生产系统上,Windows 内核仅信任并加载具有生产 WHQL/WHCP 签名的驱动程序。 若要测试预生产驱动程序,驱动程序开发人员必须启用 TESTSIGNING 非生产驱动程序才能加载。 TESTSIGNING 需要禁用安全启动,才能在测试和生产环境中显示差异。

Windows 内核支持加载使用 WHQL/WHCP 预生产签名签名的预生产驱动程序。 可通过Microsoft硬件开发人员中心(HDC)访问 WHQL/WHCP 签名。

先决条件

  • 使用合作伙伴中心硬件仪表板为预生产驱动程序签名

  • 从最新版本的 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 下载正确的安全启动策略 .p7b 文件,具体取决于系统体系结构以及随附的预配工具( EnableUefiSbTest.exe)。 有关预配工具的位置,请参阅 先决条件

  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 的设备,请装载系统的 EFI 分区,并通过在 PowerShell 或终端提升的实例中运行以下命令,将 安全启动策略 (.p7b) 文件复制到 S:/EFI/Microsoft/Boot

    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 并验证只有 dbx 值为 OemId 空(“找不到”)来验证这一点。

  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,该系统应返回无空值PKKEKdb以及dbx指示密钥返回到工厂状态的值。

    注意

    建议清理在系统上安装 Windows 以取消预配适用于零售环境的系统。

常见问题

问:EnableUefiSbTest.exe /dump命令仅显示结果。PK 是否哪个环节出错了?

答: 如果该工具作为标准用户而不是管理员运行,则会发生此情况。

问:EnableUefiSbTest.exe /dump 命令返回一个我无法识别的错误。 我该做什么?

答: 如果安全启动未成功禁用并且/或尚未清除安全启动密钥,工具可能会引发错误。 验证安全启动是否已禁用。