windows系统HLK,HCK驱动签名全过程描述

1. 简介

使用HCK(Hardware Certification Kit)签名的驱动,适用于win7及以上的操作系统;

使用HLK(Hardware Lab Kit)签名的驱动,适用于win10及以上的操作系统。

HCK和HLK是一个测试工具框架,对不同设备类型的驱动提供了不同的测试用例集,通过了所有与认证相关的用例后,使用HCK或HLK 将测试结果及驱动程序文件进行打包,然后使用EV证书对打包后的文件签名,再将签名后的打包文件提交到微软伙伴中心。微软伙伴中心会为驱动程序进行正式签名,此后驱动程序才能在win7或win10系统上使用。

2.安装VHLK服务端(也称VHLK控制器)

HLK的安装比较复杂,所以微软提供虚拟机镜像,镜像中提前安装好了HLK,称为VHLK。

VHLK的安装过程见:

https://learn.microsoft.com/zh-cn/windows-hardware/test/hlk/getstarted/getstarted-vhlk

1)准备一台win10物理机做为主机系统,其中运行预定义好的VHLK虚拟机镜像,虚拟机中会运行HLK(Hardware Lab Kit 硬件实验室工具包)控制器端程序

说明:VHLK虚拟机镜像中的操作系统是windows server;如果不使用VHLK虚拟机镜像,而是直接安装HLK控制器,则主机系统需要安装windows server 英文版操作系统

2)另准备一台或多台win10物理机做为HLK客户端。客户端向控制器端注册,控制器端进行测试控制,发送测试命令给HLK客户端执行

3)主机系统和客户端系统都需要是物理机

4)主机系统由于要安装虚拟机,需设置bios启用虚拟化支持,关闭安全启动

5)客户端系统需要设置为测试模式  注1

6)测试过程中需要重启客户端系统,因此要保证客户端系统重启后能进入系统

7)主机系统、客户端系统,设置“电源选项”,将“使计算机进入睡眠状态”设置设为“从不”

8)VHLK虚拟机中已经创建好了用户,我们后面需要使用该用户凭据进入虚拟机中,用户名: HLKAdminUser    密码:Testpassword,1

注1:客户端需要先安装驱动才能对驱动进行测试,但此时驱动还没有获得微软的正式签名,无法安装测试;将客户端系统设置为测试模式,则可以安装并运行没有获得正式签名的驱动程序。

windows系统设置为测试模式的方法:
以管理员身份运行cmd,输入如下指令后重起电脑:
bcdedit -set TESTSIGNING ON      // 最后一个参数改为OFF,则恢复为正常模式

另外,此时驱动文件需用测试证书进行签名,否则即使系统设置为测试模式,驱动也是无法正确运行的。如何用测试证书进行签名,网络上可以查找相关操作说明。

3. 安装HCK服务端(也称HCK控制器)

如果驱动需要在win7上安装,则需要使用HCK进行签名,为此主机系统上需要安装HCK控制器微软没有提供像VHLK那样预安装好的虚拟机镜像,因此只能找一台物理机安装英文版本的windows server操作系统,然后再安装HCK 控制器程序。

我没有实际安装过HCK,因此不展开描述。需要安装的同学可参考:

Windows HCK Getting Started - Windows 8.1 HCK | Microsoft Learn

windows server需要安装什么版本,上面的链接中也有描述。

4.安装HLK或HCK客户端

如果主机系统上安装的是HLK(VHLK),则需要找一个或多个win10物理机安装HLK的客户端,什么场景需要安装多个客户端呢?例如你有两个驱动需要测试,为提高工作效率,可在客户端A上安装驱动1,在客户端B上安装驱动2,两个驱动同时进行测试;

如果主机系统上安装的是HCK,则需要找一个或多个win7物理机安装HCK的客户端。

安装客户端的过程比较简单,HLK(VHLK)或HCK安装好后,会创建一个共享目录,客户端访问共享目录,下载客户端程序进行安装即可,安装好后,客户端程序会自动向控制器进行注册。通过前面给的链接可以找到客户端的安装说明。

注意:

1)HLK客户端系统上,win10操作系统不同的版本号需安装对应版本的HLK(VHLK)

如下图所示,适用于windows 10 版本 2004的HLK(VHLK),对应的客户端可以是win10 22H2,  21H1等版本,客户端只要是这些版本都是可以的;如果是一个1809版本的客户端,则不能成功向2004的VHLK控制器注册。

https://learn.microsoft.com/zh-cn/windows-hardware/test/hlk/

2)安装client端时会自动创建用户并设置其可以自动登录,win7创建的用户名:DTMLLUAdminUser; win10创建的用户名: HLKAdminUser,密码均是:Testpassword,1
如果重启系统后,系统不会以创建的用户自动登录,则需做如下设置:

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /t REG_SZ /d Testpassword,1 /f

3)测试过程中不要用mstsc登录客户机

4)如果一切顺利,主机系统上打开HLK studio或HCK studio,应能看到客户端信息

点击Configuration选项卡,  在Default Pool中可以看到对应新增的machine,  状态开始为init状态,一段时间后切换为NotReady状态

studio工具中,新建一个Machine Pool ,设置有意义的名字例如My Pool,   将已注册machine从Default Pool拖动到My Pool,  再右键点击该machine,修改状态为Ready。如果状态成功变成Ready状态,则表明该客户端已经可以用于安装驱动并运行测试用例了。

5. 执行测试用例

测试用例的执行过程,HLK与HCK是大致相同的,如无特别强调,则表示HLK与HCK均适用。

1)首先在客户端系统中安装要测试的驱动。

注意:前面已经强调过,客户端系统需要设置为测试模式;驱动程序文件(*.inf, *.sys, *.cat)需要使用测试证书进行签名

2)主机系统中打开HLK studio(或HCK studio),创建一个新项目或打开旧项目,点击“Selection” tab页,选择一个Machine Pool,例如上面创建的My Pool。根据驱动名称进行搜索

注意:有些驱动不一定能根据名称查找到的,例如usbdk驱动是一个过滤驱动,其会附加在usb设备及usb根集线器之少,因此可以像下图这样对usb3.0根集线器进行测试,实测是可以获得签名的:

3)点击“Tests”tab页

该页选择要执行哪些测试用例,如下图所示:

如果是HCK很好选择,View By下拉框中选择“Certification”即可,根据不同的设备类型,结果列表中会罗列出不同的用例集合,不同的设备类型,用例数量差异较大,有的设备类型几十个用例,有的设备类型上百个用例;

HLK中却没有“Certification”这个分类,可以打开以下网址:

Windows Hardware Lab Kit | Microsoft Learn

下载一个名为 Compat Playlists.zip 的压缩包文件,压缩包解压后有多个xml文件,hlk客户端Tests页中有“load playlist”按钮,加载其中的HLK Version 2004 CompatPlaylist x86 x64 ARM64.xml文件,加载该文件后会列出测试用例集,通过这些测试用例后,实测可以拿到微软签名。(加载其它文件没有用,加载后没有任何测试项显示在列表中)

全选这些用例,点击“Run Selected”按钮开始测,此时能看到会客户端系统上执行测试用例的过程,例如不停的有cmd窗口被创建,里面打印测试相关的信息,甚至客户端系统自动重启等。

注意:

1)所有测试用例都通过后才能拿到正式签名,如果有用例执行失败了,双击失败的用例能看到原因,需要进行修改,然后在客户端重新安装驱动程序,重新进行测试。

失败一般有以下原因:

1.1).inf文件里有写得不对的地方;

1.2)驱动代码有错;

1.3)有些用例重复测几次也许就能通过;

1.4)驱动的某些功能没有使能;

1.5)也有可能是测试用例本身有问题

有些失败用例是hlk或hck的原因或os的原因,误判了,可以从微软下载一个.sql文件,这样错误的用例就能变通过。具体操作见:

Windows Hardware Certification Kit Filters

https://learn.microsoft.com/en-us/previous-versions/windows/hardware/hck/hh998024(v=vs.85)?redirectedfrom=MSDN

1.6)极少数的情况是hlk或hck本身的bug

例如 https://bugzilla.redhat.com/show_bug.cgi?id=1653219 帖子中提到的问题,就需要更新hck的一个名为WDTFNetData.dll的文件

2)测试用例的执行是非常耗时的,例如MirrorDriver显卡驱动,需要测试两天才能完成,这里就涉及一些技巧:

2.1)测试用例的type,表明一些用例是需要人工协助的(数量一般较少),例如键盘驱动,可能就会弹出一个界面,需要人点击键盘按键才能继续往下走,因此如果准备一次测多个用例,准备跑上一整晚,则不要选择需要人工协助的用例,以免中途被卡住;

2.2)第一次测时最好先将所有用例都测一遍,先测不需要人工协助的用例,再测需要人工协助的用例(用例之间没有顺序依赖)。将失败的用例都记录下来,对驱动进行修改,然后针对失败的用例进行测试;失败的用例都测过了,再将所有的用例执行一遍,直到一次性全部通过。

6. 测试结果打包

测试用例全部通过后,就可以将测试结果进行打包了。

1)在主机系统中创建一个目录,将驱动文件拷贝到该目录中,驱动文件一般包括.inf, .cat, .sys三个文件,有时也可能还包括.dll文件,.pdb文件不需要拷贝。

需要注意的是,之前为了在客户端系统中安装驱动程序,已经使用测试证书对驱动文件进行了签名,如果将驱动文件直接提交给微软伙伴中,微软签发证书后,驱动文件将包含两个证书,一个是测试证书,另一个是微软签发的证书。这样的驱动文件在win10上使用没有问题,在win7上却不一定,如果win7缺少一些补丁,则只能识别到测试证书,导致驱动文件无法正常使用。因此如果驱动程序将用于win7系统,则需要将驱动文件上的测试证书先删除再进行打包。

删除测试证书的方法:

1.1).inf文件 无需签名,不用处理,微软伙伴中心也不会对其进行签名;

1.2).sys文件 使用signtool.exe remove /s xxx.sys 来去除签名;  .dll文件也同样处理

不是所有signtool.exe 都有remove参数,要Windows8以上 sdk中的signtool工具才行

1.3).cat文件 使用vsigntool工具来去除签名,这是因为signtool.exe不支持.cat文件;

不要用vsigntool工具删除.sys,.dll文件的签名,可能会破坏文件。

 vSignTool的下载地址  VSign 远程数字签名解决方案_代码签名工具,下载的位置:

2)使用HLK(VHLK) studio或HCK studio工具进行打包

2.1)点击"Package"tab页,点击Add Driver Folder 按钮

点OK按钮后,出现下面的提示框,点yes:

选择语言:

点击ok按钮关闭对话框;

“Package” Tab的右下角有一个 Create Package选项,点击该选项弹出下面的对话框

选择 “Do not sign",  然后继续。后面会提示为生成的*.hlkx或*.hckx 文件指定文件名, 可任意指定。继续执行将生成指定名称的*.hlkx文件或*.hckx文件,生成的文件中包括驱动程序文件及测试结果。

说明:

生成的打包文件(即*.hlkx或*.hckx文件),需要用EV证书先进行签名,然后才能提交到微软伙伴中心,为什么此处选择Do not sign呢?这是因为HLK或HCK Server是部署在windows server中的,在windows server系统中,无法识别ukey,导致不能完成签名。因此先生成一个未签名的打包文件,将打包文件拷贝到另一个windows10的主机上,在该主机上完成EV证书签名。

7. 用EV证书签名测试结果文件

1)另外准备一台win10_64的主机,在该主机安装 HLK Studio, 该工具将用于对上面生成的*.hlkx或*.hckx文件进行EV证书签名。

说明:

上面已经说过只能在windows server系统安装HLK 控制器,这里仅安装HLK Studio,此时可以使用windows10操作系统,安装过程也很快,具体见:

安装独立 HLK Studio | Microsoft Learn

2.2.1)下载 HLKSetup.exe

2.2.2)双击.exe

2)win10主机上,安装 SafeNetAuthenticationClient 软件:

下载网址:   EV代码签名驱动下载    下载最新版本

3)插入保存了EV证书的uKey

要想获得微软的正式签名,你所在的公司需要先向有资质的公司申领购买EV证书。现在的EV证书已经不是一个文件了,而是一个像u盘的uKey

4)打开SafeNetAuthenticationClient,从uKey中导出.cer文件,如果已经导出过则不用再做此步

5)将未签名的*.hlkx或*.hckx文件拷贝到这台主机,打开HLK Studio,点击Connect, 打开*.hckx或*.hlkx文件

打开 Package tab,点击 Create Package

弹出窗口中,点击“Use a certificate file”, 加载从uKey中导出的.cer 文件,根据要求输入ukey密码,完成签名,生成一个新的*.hlkx文件;你没看错,如果输入的是HCK studio生成的*.hckx文件,生成的也是*.hlkx文件。

8. EV证书上传微软伙伴中心

这一步只用做一次,除非EV证书过期了,需要更换证书。

原因:

上面用EV证书签名的*.hlkx文件(实际是用私钥签名)将会上传微软伙伴中心,微软伙伴中心需要有对应的公钥验证上传文件的真实性,为此我们需要将EV证书中的公钥先上传到微软伙伴中心。

说明:

登录微软伙伴中心的账号如何注册,我没有操作过,无法进行描述,有可能是购买EV证书时,由证书代理公司帮忙注册的。

步骤:

登录微软伙伴中心,在“账户设置”中有一个“管理证书”,在其中上传新的证书。

    上传证书的步骤:

    1)按提示下载一个名为 SignableFile.bin 的文件

    2)用EV证书对该文件进行签名

使用vSignTool进行签名即可,证书中选择UKEY那个,即用token中的证书进行签名。 vSignTool的下载路径见第6节中的描述。

注意:

2.1)要插入token并打开SafeNet Authentication工具才能在vsigntool中看到对应的证书

2.2)不要使用mstsc登录远程主机并在远程主机中访问token,这样是看不到ukey证书的。

2.3)注意要带上时间戳,是GlobalSign的证书,就尽量用GlobalSign的时间戳服务器;

签名模式选择SHA256签名

3)将签好名的SignableFile.bin文件上传回去即可

4)如果上传文件失败,出现如下所示的提示信息。可找微软进行支持

微软开发支持的网站:https://developer.microsoft.com/zh-cn/windows/support/?tabs=Contact-us

是中国工程使在提供支持,用中文描述问题即可,响应较快的。

9. EV证书签名后的*.hlkx或*.hckx文件上传微软伙伴中心

访问网址:合作伙伴中心

输入账号或密码,如何在微软合作伙伴中心注册账号,我没有操作过,因此无法说明此步骤,有可能是购买EV证书时,由证书代理公司帮忙注册的。

弹出窗口中选择:输入验证码

会有一个验证码发送到注册账号绑定的手机上,输入验证码,完成登录。

登录完成后的界面中,点击 "Submit new hardware"

弹出页面中指定一个有意义的名字,加载之前签过名的*.hlkx文件

类型选 External,   Firmware version顺便填写, 其它保持默认,点submit开始认证。

微软伙伴中心处理大概要半小时到1小时,完成后下载正式签名的驱动程序文件

下载的文件包括 .sys, .cat, .inf等文件,检查.sys文件的属性,看是否获得微软的签名。

结束。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值