对于Win7
需要一个CA证书,和对应的交叉证书(https://docs.microsoft.com/en-us/windows-hardware/drivers/install/cross-certificates-for-kernel-mode-code-signing)。sha1签名方法:
signtool.exe sign /v /f 你的CA证书 /p 密码 /ac 微软下载的交叉证书 /t http://timestamp.digicert.com 你的驱动。注意,在纯净版Win7有些CA证书是不行的,需要在Win7里面进行系统更新。
对于Win10
1.购买一个EV代码签名的证书。
2.在https://partner.microsoft.com/zh-CN/dashboard/Registration/Hardware?step=GetStarted注册微软开发者账号。注册完账号后,微软会对账户信息进行审核,审核的方式是微软会在网页上提供一个bin文件,需要我们下载下来对其添加EV代码的数字签名,上传给微软验证。只有数字证书里边的公司名与我们注册的开发者账号能够对应得上的话,才能注册成功使用账号。
3.签名你的驱动。sha1签名方法:signtool.exe sign /t http://timestamp.digicert.com /f 你的EV证书 你的驱动(购买EV证书后,商家会给你一个保存着EV证书的U盘,可以从里面导出一个EV证书,签名时需要把U盘插在电脑上)。
4.进行HLK测试(官方文档https://docs.microsoft.com/en-us/windows-hardware/test/hlk/getstarted/step-1-install-controller-and-studio-on-the-test-server)。
至少需要两个系统(都必须为英文操作系统,并且win10 1703和1607有问题,实测大坑,不建议使用,我用的是1809):
- 测试服务器 一个windows server版本的系统,推荐使用windows server 2016 ,可以是虚拟机。
- 测试系统 需要windows 10 (建议使用专业版,家庭版好像不行)版本的操作系统,不能是任何的虚拟机,必须是物理机。
保证两个系统在同一局域网下(连的同一个WIFI)。
安装测试服务器
Windows Hardware Lab Kit (Windows HLK) 是一套进行whql认证的测试框架。HLK安装包的下载地址:https://docs.microsoft.com/en-us/windows-hardware/test/hlk/。(我用的是1809)安装完选择Controller + Studio 一路点击Next即可完成测试服务器的安装。
安装测试系统
首先需要在测试系统上面安装你的驱动,进入BIOS,找到Security——Secure Boot,将Secure Boot Control改为Disabled(一般默认为Enabled),按F10保存退出进入系统,用管理员权限打开cmd,运行 bcdedit /set testsigning on,重启电脑进入测试模式, 在测试模式下安装要测试的驱动程序,可以用以下sc命令安装 sc create 服务名字binPath= 驱动路径 type= kernel start= auto。
如果配置测试服务器是虚拟机,以vmware为例,需要用桥接模式,如果桥接模式上不了网,需要配置vmvare 编辑->虚拟网络编辑器->更改设置,如果网络列表没有VMnet0,手动添加一个VMnet0网络,然后选择桥接模式,并将已桥接至选择你当前上网使用的网络适配器,如果还没有好,就重启虚拟机,保证测试服务器和测试系统在同一网段下。
测试系统的安装不需要额外的去下载安装包,应该从安装完成的测试服务器获取。地址为:
HLKInstallClientSetup.cmd
例如我们的服务器地址是192.168.1.46:
![e8820de7314b20e7e7abf15bfb757dc5.png](https://i-blog.csdnimg.cn/blog_migrate/587f0fd5e5c5302790cf7a43edf8ce9a.jpeg)
双击setup.cmd,即可出现安装界面,一路点击next即可完成安装。
安装完HLK client之后,去服务端打开HLK studio,便可以在默认连接池中找到我们刚刚成功安装的HLK client
![52e054cabb4ce869746ed56e7d5aa36f.png](https://i-blog.csdnimg.cn/blog_migrate/b3e0aa9f4dbff5b705f7c68df2956f0a.jpeg)
HLK的测试环境到此搭建完成。
开始测试
首先需要新建一个计算机池(HLK控制器会把测试的任务,分配到你选择的计算机池里边),然后将默认的计算机池中的计算机拖动至我们新建的计算机池中,然后右键计算机池中的计算机,可以改变其状态,当计算机的状态为Ready状态的时候,即表示当前的计算机可以开始测试任务了。
配置好计算机池后,我们就可以新建测试项目了:
![e45832b5a0478f825d93dbae704b3427.png](https://i-blog.csdnimg.cn/blog_migrate/1ac101bad2bf1d8062cfa98c126e2b8b.jpeg)
新建完成后选择项目,然后点击Selection,到这里可以选择测项,由于我们的驱动程序是一个文件系统,选择下图红圈中的Software device,选到对应的驱动程序,打上勾即可:
![8121dc3efb7355a3358f3073cc0e2c40.png](https://i-blog.csdnimg.cn/blog_migrate/53450b5857a0ee0112ce7fd04f20c0fe.jpeg)
下面切换到Tests选项,下图是测项旁边可能会出现的几种标志的意思,比如有个人形的logo代表测试的时候需要交互:
![dbbf5d5d7d4fc65c28eff3dbe4a886e4.png](https://i-blog.csdnimg.cn/blog_migrate/c8ba2beaff596ff3f8f54132297bcfb3.jpeg)
给全部的测项打上勾,点击Run Selected,此时测试就开始了。
![d57cbec9a438cf347a446975759bfcd2.png](https://i-blog.csdnimg.cn/blog_migrate/3271986205a509e9034db4f0f541701e.jpeg)
测试的过程中测试系统会重启,等重启完成后,如果驱动程序需要手动启动的话,就先启动我们的驱动程序,驱动程序启动后就不需要再操作测试系统了,等待测试完成即可。当测试结果出现错误的时候,首先确保测试系统为英文操作系统,如果系统环境配置都正确,不同类型驱动会运行不同的测试,报错了需要自己google解决。
笔者开发的是WFP驱动,当测试WindowsFilteringPlatform_Tests时,中间需要配置http://WFPLogo.Info,其中Provider比较坑,在你的驱动代码中,必须要在DriverEntry中Install 一个Provider,在unload中uninstall这个provider。(参考官方文档https://docs.microsoft.com/en-us/windows/win32/fwp/installing-a-provider)
![e2e50a06ce4f7c643fb9e0f8fd041c19.png](https://i-blog.csdnimg.cn/blog_migrate/1885893fcd976e1aeac496bf0eacbde3.jpeg)