我是Windows驱动程序开发的初学者。我写了一个简单的DbgPrint()。sys驱动程序。
经过大量搜索,我发现在x86架构中,.sys驱动程序的签名是可选的,但在x64中是强制性的。 所以我手动创建了一个证书:
makecert -r -n "CN=MyCompany" -ss MyCompanyCertStore -sr LocalMachine
之后,我将其导出为(例如)GlobalSign.cer并添加到我的证书列表中:
certmgr.exe -add GlobalSign.cer -c -s -r localMachine Root
certmgr.exe -add GlobalSign.cer -c -s -r localMachine TrustedPublisher
然后,我将MyDriver1.sys
和MyDriver1.inf
放在c:\MyDriver1
文件夹中并创建了目录文件:
inf2cat /driver:"c:\MyDriver1" /os:7_x64
并签了名:
SignTool sign /s MyCompanyCertStore /n MyCompany /t http://timestamp.verisign.com/scripts/timestamp.dll c:\MyDriver1\mydriver1.cat
完成!
但是当我在MyDriver1.sys
程序中加载OSR Driver Loader
时,会显示以下错误:
---------------------------
OSRLOADER
---------------------------
Windows cannot verify the digital signature for this file. A recent hardware or software change might have installed a file that is signed incorrectly or damaged, or that might be malicious software from an unknown source.
---------------------------
OK
---------------------------
我不知道为什么。
注意目录文件的“安全目录”标签中只有MyDriver1.inf
条目,我无法添加MyDriver1.sys
条目。
以下是MyDriver1.inf
的内容(最初由Visual Studio制作,但我只是将CatalogFile=
更改为CatalogFile=mydriver1.cat
)
;
; MyDriver1.inf
;
[Version]
Signature="$WINDOWS NT$"
Class=
ClassGuid=
Provider=
DriverVer=09/21/2017,21.4.29.698
CatalogFile=
[DestinationDirs]
DefaultDestDir = 12
[SourceDisksNames]
1 = %DiskName%,,,""
[SourceDisksFiles]
[Manufacturer]
%ManufacturerName%=Standard,NTamd64
[Standard.NTamd64]
[Strings]
ManufacturerName=""
ClassName=""
DiskName="MyDriver1 Source Disk"
答案 0 :(得分:1)
KMCS没有使用证书存储(实现的是用户模式,因此很有意义......)。
安装驱动程序的证书链的根证书必须是Cross-Certificates for Kernel Mode Code Signing页面上列出的证书链。