一些情况下我们需要空驱动来避免设备管理器中出现 Yellow Bang(当然,这种驱动没有任何功能)。这个问题我请教了一下天杀,在他的指导下写了这篇问斩给。
本文介绍如何制作一个 PCIE 的空驱动。
本文提到的软件包括 OpenSSL (来自 https://slproweb.com/products/Win32OpenSSL.html的Win64OpenSSL_Light-3_5_0.exe),此外,签名使用到的文件都来自 Windows SDK 和 WDK。
一.准备用于签名的密钥文件
1. 生成私钥:openssl genrsa -out LABZprivate.key 2048
运行结果:

2. 创建证书签名请求(CSR):
openssl req -new -key LABZprivate.key -out LABZrequest.csr
运行结果:

3.生成自签名证书(.crt)文件
openssl x509 -req -days 365 -in LABZrequest.csr -signkey LABZprivate.key -out LABZcertificate.crt
运行结果:

4.转换为 pfx 格式
openssl pkcs12 -export -out LABZPFX.pfx -inkey LABZprivate.key -in LABZcertificate.crt
会要求你设定一个密码,这里使用 “labz123”
运行结果:

5. 生成 cer 文件
Openssl pkcs12 -in LABZPFX.pfx -clcerts -out LABZcert.cer -nodes
这里输入前面设定的密码 labz123

至此,需要用到的签名的密钥文件已经准备好了。
此外,还可以不用openssl来生成证书,WDK提供了一个更简单的生成自签名证书的工具:makecert.exe。有兴趣的朋友可以继续研究。
二.修改 INF文件
以如下设备为例,查看属性

将上述信息写入EmptyPciDriver.inf

三.使用工具生成 CAT文件以及签名
1.生成 CAT 文件(可以看作是 INF 的签名文件)
“C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x86\inf2cat.exe” /driver:”C:\ndrv ” /os:10_NI_X64

2.生成 INF 的 Hash
“C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64\signtool.exe” sign /f LABZPFX.pfx /p labz123 /fd sha256 “c:\ndrv\EmptyPciDriver.cat”

四.测试
1.将前面的公钥加入目标机中(只用于测试,不要用于工作机)
Certutil -addstore root LABZcert.cer
2.将公钥加入受信任的发布者列表中
Certutil -addstore TrustedPublisher LABZcert.cer
然后像普通驱动一样安装即可:

安装后设备管理器中可以看到:

测试完成之后,拿去做正式签名,之后对于相同 VID DID SVID SDID的PCIE设备就可以直接使用了(无需步骤四提到在目标机中导入公钥的步骤)
本文提到的 INF 文件下载:
本文生成的签名文件: