本篇承接上一篇 Windows HLK 驱动认证(一):环境准备。默认你已经:
- Controller(WS2025 虚拟机)装好 HLK Controller + Studio;
- 测试机纯净系统、关安全启动、开测试模式、装好 HLK Client 和待测驱动;
- 三者同处一个子网、互通。
下面所有操作都在 Controller 的 HLK Studio 里进行(除特别说明外)。
一、新建机器池(Machine Pool)
机器池是测试机的逻辑分组。测试机装好 Client 后会自动落入 Default Pool,但不能直接在 Default Pool 里跑测试——必须先移动到一个自建的池并设为 Ready。
- 打开 HLK Studio,进入 Configuration(配置) 页。
- 右键根节点
$(Root)→ Create Machine Pool,改成有意义的名字后回车。 - 点 Default Pool,在右侧应能看到之前配置好的测试机。等它的状态变为 notready 后,把它拖动到刚新建的池中。
- 在新池中右键该测试机 → Change Machine Status → Ready。状态列变为 Ready。


要点
- 一台机器同一时间只能属于一个池。
- 状态为 NotReady 时无法调度测试;且在 Default Pool 里无法设为 Ready,必须先移到自建池。
二、创建项目(Project)
一个 Project 定义“你要测什么”,通常对应一个要提交认证的设备/驱动。
- 进入 Project 页 → Create project,替换默认名为有意义的项目名后回车。
- 双击选中刚新建的 project 将其加载。

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


一个设备可能包含多个 target。要拿认证,需选中该设备产品类型下的全部相关特性。若在 device manager 里找不到你的软件驱动,可用搜索框,或改用 software device 视图。
四、加载 Playlist 并运行测试(Tests)
Playlist 是官方规定的“该测哪些项”的测试集合。加载后,界面只保留适用于当前目标的测试项。
- 进入 Tests 页。
- 点 Load Playlist,选择需要测试的 OS 版本和架构的官方 playlist(一般选 x64 / arm64)。
- 加载完成后,总测试列表会缩减为适用项。
- 全选所有测试项,点 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 的步骤:
在驱动源码上运行 CodeQL(视认证目标可能还需 SDV / Code Analysis)。
把 CodeQL 产出的
.sarif文件放在对应.vcxproj的同一目录下(文件名不限,只要以.sarif结尾)。运行 DVL 生成工具,得到
.DVL.XML文件。把该 DVL 文件复制到测试机的
%systemdrive%\DVL目录(即C:\DVL\)。例如:C:\DVL\LnvMSRIO.DVL.XML复制前务必先清空
C:\DVL目录,删掉里面旧的验证日志,再放入新的,否则会读到过期结果。回到 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)
- 进入 Results 页。
- 若有 fail,展开该失败项即可查看详细信息和日志(右键目标机名 → Diagnostic logs 可看诊断日志)。
- 若测试项全部 pass,即可进入打包环节。

若因系统崩溃导致失败,失败项会带一个崩溃图标,右键可查看 Bugcheck 信息。
七、生成提交包(Package)
进入 Package 页,点 Add Driver Folder,选中你的 driver 文件夹。
弹出 Driver Properties 对话框,全选适用的 **OS(Products)和语言(Locales)**信息,确定。

点 Create Package,根据需要选择签名方式:
- Do not sign——生成未签名包(例如给支持团队调试、或稍后与其他包合并)。
- Use the certificate store——用本机证书库里的代码签名证书签名(最常见)。
- Use a certificate file——用证书文件(
.cer)签名。
正式提交微软的包必须签名,且需使用 EV 代码签名证书。
生成
.hlkx文件——它是“测试结果 + driver”的打包文件。将
.hlkx提交微软(Hardware Dev Center 硬件开发者中心)进行签名/认证。
八、跨 OS 版本提交:合并包(Merge Package)
如果同一个驱动要认证多个 OS 版本 / 架构,做法是对每个版本分别测试、各生成一个 .hlkx,最后合并成一个提交包:
- 在新测试完成后的 Package 页,点 Merge Package。
- 点 Add,选择既往测试生成的
.hlkx包(支持一次选多个)。 - 确定后点 Create Package,即可把多个包合并为一个提交包。
合并限制:被合并的目标必须是相同 OS 和架构、相同类型(System 或 Device)。软件过滤器类型不支持深度合并。
小结
到这里,一次完整的 HLK 测试就走完了:
建机器池并设 Ready → 建项目 → Selection 选目标 → 加载 playlist 跑测试 →(含 .sys 则做 Static Tools Logo Test)→ Results 全 pass → 打包签名生成 .hlkx → 提交微软 →(跨版本则 merge)。
第一次跑难免磕碰,遇到失败先看 Results 里的日志和 Bugcheck 信息,大多能定位到具体原因。祝测试顺利。