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

在零售和生产系统上,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 安全启动手动测试部分手动预配 Microsoft 测试根密钥, (UefiSecureBootManualTests.zip\ManualTests\certs\test\db_MSFTtestSigningRoot.cer) 。 Microsoft 测试密钥必须包含在安全启动数据库 (DB) 和安全启动配置策略 (SBCP) 中,才能为预生产 WHQL/WHCP 驱动程序签名启用信任。

注意

预配任何安全启动数据库时,切勿使用内部的 Microsoft 测试密钥对有效负载进行生产签名。

预配步骤

  1. 在系统的 UEFI 菜单中,禁用安全启动并清除安全启动密钥(如果适用)。 这将允许预配工具设置测试密钥以信任安全启动策略文件并重新启用安全启动。

  2. 根据系统体系结构以及随附的预配工具 EnableUefiSbTest.exe从 WDK 下载正确的安全启动策略 .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 证书以及默认密钥。 这将允许对 Microsoft UEFI CA 签名的 EFI 可执行文件(如选项 ROM 和非 Windows 启动加载程序)的信任。

    EnableUefiSbTest.exe /thirdparty
    
  5. 对于运行基于桌面的 Windows 的设备,请在提升的 PowerShell 或终端实例中运行以下命令,装载系统的 EFI 分区,并通过安全启动策略 (.p7b) 文件复制到 S:/EFI/Microsoft/Boot

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

    注意

    由于 Windows 内核需要格式 SecureBootPolicy.p7b的安全启动策略文件,因此不能修改名称和文件格式。

  6. 对于未运行基于桌面的 Windows 的设备,请复制与 \EFI\Microsoft\Boot\Policies对应的 PreProductionPolicy.pol 。 然后从 \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,这应返回 dbPKKEK、 的非空值,以及dbx指示密钥已返回到出厂状态的值。

    注意

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

常见问题

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

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

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

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