本篇承接上一篇 Windows HLK 驱动认证(一):环境准备。默认你已经:

  • Controller(WS2025 虚拟机)装好 HLK Controller + Studio;
  • 测试机纯净系统、关安全启动、开测试模式、装好 HLK Client 和待测驱动;
  • 三者同处一个子网、互通。

下面所有操作都在 Controller 的 HLK Studio 里进行(除特别说明外)。

一、新建机器池(Machine Pool)

机器池是测试机的逻辑分组。测试机装好 Client 后会自动落入 Default Pool,但不能直接在 Default Pool 里跑测试——必须先移动到一个自建的池并设为 Ready。

  1. 打开 HLK Studio,进入 Configuration(配置) 页。
  2. 右键根节点 $(Root)Create Machine Pool,改成有意义的名字后回车。
  3. Default Pool,在右侧应能看到之前配置好的测试机。等它的状态变为 notready 后,把它拖动到刚新建的池中。
  4. 在新池中右键该测试机 → Change Machine StatusReady。状态列变为 Ready

右键根节点 $(Root) → Create Machine Pool 新建机器池

右键测试机 → Change Machine Status → Ready,状态列变为 Ready

要点

  • 一台机器同一时间只能属于一个池。
  • 状态为 NotReady 时无法调度测试;且在 Default Pool 里无法设为 Ready,必须先移到自建池。

二、创建项目(Project)

一个 Project 定义“你要测什么”,通常对应一个要提交认证的设备/驱动。

  1. 进入 Project 页 → Create project,替换默认名为有意义的项目名后回车。
  2. 双击选中刚新建的 project 将其加载。

在 Project 页点 Create project 并为项目命名

三、选择测试目标(Selection)

  1. 进入 Selection 页。
  2. 左上角 machine pool 下拉列表中选中刚新建的池。
  3. 左侧视图选择 device manager(这是最细粒度的视图,能看到系统里的各个组件驱动)。
  4. 在中间列出的 driver 列表中,勾选需要测试的 driver(目标 / target)。

在 Selection 页左上角的机器池下拉列表中选择自建的池

切换到 device manager 视图,勾选要测试的驱动(此处为 Integrated Camera)

一个设备可能包含多个 target。要拿认证,需选中该设备产品类型下的全部相关特性。若在 device manager 里找不到你的软件驱动,可用搜索框,或改用 software device 视图。

四、加载 Playlist 并运行测试(Tests)

Playlist 是官方规定的“该测哪些项”的测试集合。加载后,界面只保留适用于当前目标的测试项。

  1. 进入 Tests 页。
  2. Load Playlist,选择需要测试的 OS 版本和架构的官方 playlist(一般选 x64 / arm64)。
  3. 加载完成后,总测试列表会缩减为适用项。
  4. 全选所有测试项,点 Run Selected 开始运行。

点 Load Playlist,选择对应 OS 版本和架构的官方 playlist

playlist 加载后测试列表缩减,全选测试项并点 Run Selected 运行

重要

  • Playlist 版本必须与 HLK 套件版本一致(例如 1607 的 kit 就要用 1607 的 playlist),且不要修改官方 playlist,否则结果无法用于提交。
  • 首次测试:如果测试机是第一次跑测试,它会重启两次,并进入 OOBE(开箱设置)页——此时需要手动点击跳过
  • 手动测试项(Manual)会中断流程等待人工操作,建议与自动测试分开跑

五、Static Tools Logo Test(含 .sys 的内核驱动必做)

如果被测 driver 中包含 .sys 文件(内核模式驱动),就必须完成 Static Tools Logo Test。这项测试用 CodeQL 对驱动源码做静态分析,是内核驱动认证的强制项(自 WS2025 起 CodeQL 为必需工具)。

它并不直接分析源码,而是读取一份 **DVL(Driver Verification Log,驱动验证日志)**文件来确认你已跑过 CodeQL。生成并放置 DVL 的步骤:

  1. 驱动源码上运行 CodeQL(视认证目标可能还需 SDV / Code Analysis)。

  2. 把 CodeQL 产出的 .sarif 文件放在对应 .vcxproj 的同一目录下(文件名不限,只要以 .sarif 结尾)。

  3. 运行 DVL 生成工具,得到 .DVL.XML 文件。

  4. 把该 DVL 文件复制到测试机%systemdrive%\DVL 目录(即 C:\DVL\)。例如:

    C:\DVL\LnvMSRIO.DVL.XML
    

    复制前务必先清空 C:\DVL 目录,删掉里面旧的验证日志,再放入新的,否则会读到过期结果。

  5. 回到 HLK Studio 运行 Static Tools Logo Test

注意

  • 运行此测试时,被测驱动必须是测试签名的,否则测试可能不出现(不 populate)或不告警。若你的包里不含 .sys,则该测试不出现属正常。
  • 该测试只要求 DVL 证明 CodeQL 已运行,并不要求所有规则都 pass(但官方要求至少通过全部 “Must-Fix” 规则)。
  • 此测试需在 Server with Desktop 上跑;在 Server Core 上会报 RoMetadata.dll could not be found——解决办法是在带桌面的 Server 上跑,再用 merge 合并到 Core 的包里。

六、查看结果(Results)

  1. 进入 Results 页。
  2. 若有 fail,展开该失败项即可查看详细信息和日志(右键目标机名 → Diagnostic logs 可看诊断日志)。
  3. 若测试项全部 pass,即可进入打包环节。

在 Results 页展开某个测试,可查看其子任务与日志详情

若因系统崩溃导致失败,失败项会带一个崩溃图标,右键可查看 Bugcheck 信息。

七、生成提交包(Package)

  1. 进入 Package 页,点 Add Driver Folder,选中你的 driver 文件夹。

  2. 弹出 Driver Properties 对话框,全选适用的 **OS(Products)和语言(Locales)**信息,确定。

    Add Driver Folder 后,在 Driver Properties 中全选 Products 和 Locales

  3. Create Package,根据需要选择签名方式:

    • Do not sign——生成未签名包(例如给支持团队调试、或稍后与其他包合并)。
    • Use the certificate store——用本机证书库里的代码签名证书签名(最常见)。
    • Use a certificate file——用证书文件(.cer)签名。

    正式提交微软的包必须签名,且需使用 EV 代码签名证书

  4. 生成 .hlkx 文件——它是“测试结果 + driver”的打包文件。

  5. .hlkx 提交微软(Hardware Dev Center 硬件开发者中心)进行签名/认证。

八、跨 OS 版本提交:合并包(Merge Package)

如果同一个驱动要认证多个 OS 版本 / 架构,做法是对每个版本分别测试、各生成一个 .hlkx,最后合并成一个提交包:

  1. 在新测试完成后的 Package 页,点 Merge Package
  2. Add,选择既往测试生成的 .hlkx 包(支持一次选多个)。
  3. 确定后点 Create Package,即可把多个包合并为一个提交包。

合并限制:被合并的目标必须是相同 OS 和架构相同类型(System 或 Device)。软件过滤器类型不支持深度合并。

小结

到这里,一次完整的 HLK 测试就走完了:

建机器池并设 Ready → 建项目 → Selection 选目标 → 加载 playlist 跑测试 →(含 .sys 则做 Static Tools Logo Test)→ Results 全 pass → 打包签名生成 .hlkx → 提交微软 →(跨版本则 merge)。

第一次跑难免磕碰,遇到失败先看 Results 里的日志和 Bugcheck 信息,大多能定位到具体原因。祝测试顺利。