4. WHQL 认证流程详解:提交门户、HLK/HCK 测试套件、签名与发布流程
WHQL 认证是驱动进入 Windows 生态的必经之路。整个流程可划分为四个核心阶段:测试准备与 HLK/ HCK 套件执行、提交门户上传与处理、微软签名与数字收尾、发布与分发。本章将逐一拆解每个环节的操作要点、工具链和常见陷阱。
⚠ 关键认知: WHQL 认证不是一次性动作,而是一个持续合规的过程。驱动在每次 Windows 功能更新(如 23H2 → 24H2)后,必须重新执行 HLK 测试并提交,否则签名将失效。
4.1 HLK / HCK 测试套件:环境搭建与执行
HLK(Windows Hardware Lab Kit)是当前 Windows 10/11 的测试框架,HCK 用于 Windows 8.1 及更早版本。测试套件包含数千个针对不同设备类的测试用例,覆盖功能、可靠性、性能和安全。
4.1.1 环境要求
| 组件 | 要求 | 说明 |
|---|---|---|
| 控制器(Controller) | Windows Server 2019/2022 | 管理测试任务、存储结果 |
| 客户端(Client) | 目标 Windows 版本(如 Win11 24H2) | 安装待测驱动,执行测试 |
| 网络 | 控制器与客户端在同一域或工作组 | 需双向网络连通,防火墙开放特定端口 |
| 磁盘空间 | 控制器 ≥ 100 GB,客户端 ≥ 50 GB | 测试日志和 .hlkx 包占用较大空间 |
💡 最佳实践: 使用虚拟机快照功能,在每次 HLK 测试前创建干净快照。驱动安装失败或系统崩溃后,可快速回滚,避免重新部署环境。
4.1.2 测试执行步骤
- 安装 HLK 套件: 在控制器上运行 Setup.exe,选择“Controller + Studio”组件;在客户端上运行 Setup.exe,选择“Client”组件。
- 配置客户端: 在控制器 HLK Studio 中“添加客户端”,输入客户端机器名或 IP,确保状态显示为“已连接”。
- 创建项目: 在 HLK Studio 中新建项目,选择目标设备类(如 NetworkAdapter、StorageController)。
- 选择测试: 系统自动筛选出与设备类相关的测试用例。可手动添加或排除特定测试。
- 部署驱动: 将待测驱动 .inf/.sys 文件复制到客户端,通过 HLK Studio 的“部署”功能安装。
- 运行测试: 点击“开始测试”,HLK 自动将测试用例分发到客户端执行。测试时长从 30 分钟到数小时不等。
- 查看结果: 测试完成后,在 HLK Studio 中查看每个用例的 Pass/Fail 状态。失败项需双击查看详细日志。
- 生成 .hlkx 包: 所有测试通过后,点击“创建提交包”,HLK 自动打包为 .hlkx 文件,用于上传门户。
4.2 提交门户:硬件开发中心与合作伙伴中心
微软提供两个提交门户:硬件开发中心(Hardware Dev Center) 用于传统 WHQL 提交,合作伙伴中心(Partner Center) 用于现代仪表板管理。两者功能重叠,但合作伙伴中心正逐步取代旧门户。
4.2.1 提交前准备
- 企业账户: 必须拥有有效的微软合作伙伴网络(MPN)账户,并注册硬件开发中心。
- 代码签名证书: 从受信任的 CA(如 DigiCert、GlobalSign)购买 EV 代码签名证书,用于对驱动进行预签名。
- .hlkx 包: 确保所有 HLK 测试通过,包内包含驱动文件、测试日志和结果。
- 驱动程序包(DP): 包含 .inf、.sys、.cat 文件,以及必要的 DLL 和配置文件。
4.2.2 提交步骤
- 登录硬件开发中心: 使用企业管理员账户登录
partner.microsoft.com,进入“硬件”仪表板。 - 创建新提交: 选择“驱动程序” → “创建新提交”,填写产品名称、版本、目标 Windows 版本。
- 上传 .hlkx 包: 将 HLK Studio 生成的 .hlkx 文件拖拽上传。系统自动解析包内容,显示测试摘要。
- 选择签名类型: 选择“WHQL 签名”(标准签名)或“测试签名”(仅用于内部测试)。
- 提交审核: 点击“提交”,门户自动进行静态分析、恶意软件扫描和签名验证。审核通常需要 1-3 个工作日。
- 查看状态: 在仪表板中跟踪提交状态:Pending → Processing → Signed / Failed。
⚠ 常见失败原因:
• .hlkx 包内包含未通过测试的用例(即使只有一个 Fail,整个提交被拒)。
• 驱动文件使用了不兼容的架构(如 x86 驱动提交到 ARM64 类别)。
• 签名证书过期或未正确链到受信任根 CA。
• .hlkx 包内包含未通过测试的用例(即使只有一个 Fail,整个提交被拒)。
• 驱动文件使用了不兼容的架构(如 x86 驱动提交到 ARM64 类别)。
• 签名证书过期或未正确链到受信任根 CA。
4.3 签名与发布流程
提交通过后,微软使用内部根证书对驱动进行数字签名。签名后的驱动包含两个关键部分:数字签名(.cat 文件) 和 交叉证书(Cross-Certificate)。
4.3.1 签名文件结构
| 文件 | 作用 | 签名方式 |
|---|---|---|
| .cat(安全目录) | 包含驱动文件的哈希值,验证完整性 | 微软 WHQL 签名 |
| .sys(驱动二进制) | 内核模式驱动,需嵌入签名 | 交叉证书 + 时间戳 |
| .inf(安装信息) | 驱动安装参数,不直接签名 | 通过 .cat 间接验证 |
4.3.2 发布渠道
- Windows Update(WU): 驱动自动推送到目标系统,适用于广泛分发。需在提交时勾选“通过 Windows Update 分发”。
- 手动下载: 驱动发布到微软更新目录(Microsoft Update Catalog),用户可手动搜索安装。
- OEM 预装: 驱动集成到 OEM 系统镜像中,随新设备出厂。
4.4 常见问题与调试技巧
🔧 调试清单:
- HLK 测试失败: 检查客户端系统日志(Event Viewer → Windows Logs → System),查找驱动崩溃或超时记录。
- 提交被拒: 在硬件开发中心查看“审核报告”,定位具体失败项。常见原因包括 .inf 语法错误、缺少依赖文件。
- 签名验证失败: 使用
signtool verify /pa /v driver.sys检查签名链。确保交叉证书已安装到“受信任的根证书颁发机构”。 - Windows Update 不推送: 确认驱动在提交时勾选了“自动分发”,且目标系统满足硬件 ID 匹配条件。
# 使用 signtool 验证驱动签名
signtool verify /pa /v mydriver.sys
# 输出示例(成功时):
# Signing Certificate Chain:
# Issued to: Microsoft Windows Hardware Compatibility Publisher
# Issued by: Microsoft Windows Third Party Component CA 2014
# Expires: 2027-01-01
# The signature is timestamped: 2025-03-15 10:30:00
# Successfully verified: mydriver.sys
💡 效率提示: 在开发阶段,使用“测试签名”模式(
bcdedit /set testsigning on)可跳过 WHQL 签名验证,加速调试循环。但最终提交前必须关闭测试签名并执行完整 HLK 测试。