本文介绍如何进行WHLK/WHQL/WHCK测试,以获取微软的数字签名。  WHLK/WHQL/WHCK是同一个东东,历史上有过不同称呼而已。 

        Windows下的驱动程序,是必须通过微软的WHLK测试,经过微软的数字签名之后,才能在最终用户那边顺利安装的。WHLK测试工具是微软开发的一套测试工具,它自动识别驱动的设备类型,然后采用相对应的一系列test cases进行测试,整个测试周期根据设备类型不同而不同,例如声卡,不卡壳的话大约4天时间可跑完一个OS的测试。

            注意,32位和64位需要分别测试的。Win7和win10的测试工具版本是不同的,对server版本要求也不同的,我们以win10为例介绍一下这个声卡whlk测试平台的搭建。

1.      购买商业数字证书

        在进行WHLK测试之前,需要对我们的驱动进行数字签名,而数字签名的证书,我们需要向微软承认的第三方购买,例如GlobalSign, Symentec等。这些证书颁发机构会要求我们提供公司的一些信息,必须真实,工商部门登记的,他们是会去核实的。然后缴一笔不菲的费用,有效期一年。

        购买到数字证书之后,安装,并导出证书(我们命名为buckhorn.cer)到数字签名工具同目录下,最后把要签名的驱动.inf和.sys文件也拷到数字签名工具同目录下,就可以用来数字签名了:

2.      搭建WHLK平台

这个WHLK搭建平台的文档,可以从msdn.microsoft.com上下载的。

2.1 安装windows server 2016;

2.2 从microsoft.com下载最新的Redstone的KitPreinstall.zip,里面有个readme.txt,在windows server 2016上安照指示安装那些证书和注册表;

2.3 从microsoft.com下载最新的HLK,在windows server 2016上安装HLK,controller和Studio都一起安装。这个HLK会把客户端需要安装的部分在一个文件夹中共享出来;

2.4 按如何架构搭建WHLK测试平台,HLK Controller和Studio我们合二为一安装在这台Server2016上了:whlk testbed

2.5 从客户端打开共享文件夹,安装\\Server2016 ip address\HLKInstall\Client\Setupamd64.exe或exe,根据你客户端OS的类型选择对应的安装包。

2.6 回到Server2016,运行HLK Studio,右击”Root” ,Create Machine Pool

create machine pool

2.7 从Default Pool中可以发现你刚才安装的客户端机器,把它们移到你刚刚创建的新的machine里头去,并右击那个待测试的客户端的状态,选“Ready”:

move machine to pool

2.8 点上图左上角的回退,然后Create Project:

create project

2.9 点击Selection,选择刚才的machine pool,并选中待测的设备Buckhorn:

selection

2.10 再点击Tests,勾选中所有测试项,即可进行测试了。WHLK测试工具本身也有bug的,所以跑完测试后,可以运行一下filter,这样由于WHLK工具自身的问题导致的测试失败就会被过滤掉。

安装filters : https://docs.microsoft.com/en-us/windows-hardware/test/hlk/user/windows-hardware-lab-kit-filters

run tests

2.11 所有测试项通过后,点package,Add Driver Folder,把我们x86/x64的已签名的驱动加进来:

create package

2.12 Create Package,使用我们购买的数字证书签名,保存为hckx。

3. 向微软提交数字签名申请

3.1 先得向microsoft注册一个账户: https://partner.microsoft.com/en-us/dashboard/hardware/dirver

这个注册的过程中需要用到上面购买的数字证书,以验证身份。

3.2  然后提交buckhorn.hckx,每提交一次,缴一笔不菲的费用。然后微软会给我们的驱动用微软的数字证书签名。

3.3  这时,我们用微软签名过的驱动制作正式的安装包了。