发布签名标识了加载到Windows Vista内核中模块的发布者。内核模块由一个SPC和一个相关联的交叉证书发布签名。这一节提供了WDK中的Tastpkg作为发布签名的例子。
Windows Vista对内核模块进行发布签名
1、准备一台进行发布签名的计算机。
2、获得内核代码的SPC。
3、下载关联的交叉证书。
4、创建一个目录文件。
5、发布签名目录文件。
6、如果想对驱动镜像文件进行发布签名,可参照4和5。
本节的其余部分对每一步提供了解释,更多细节,参考“给驱动包进行测试签名”这里为了方便再重复下。
Step1:准备好一台发布签名的计算机
注:此步骤与“Step1如何给一个内核模块测试签名”节中的内容相同,为了方便这里进行一下重复。
准备一台发布签名的计算机
-
安装WDK
此步骤的例子假设WDK已经安装,并且打开WDK的编译命令行窗口。Windows的环境变量包含数字签名工具的路径。命令行窗口是使用超级管理员权限运行的。
打开一个命令行窗口
1、点击[开始]按钮,单击[所有程序],从单出的菜单中选择[Windows Driver Kits],[WDK5739],选择[Build Environments\Windows Vista andWindows Server 2008]。
2、右键单击[Windows Vista and Windows Server 2008],选择以管理员权限运行。
此步骤使用WDK中的Toastpkg示例,显示了如何使用数字签名工具。开发者也可以使用他们的驱动包。用于演示的Toastpkg驱动包通常安装在C:\WinDDK\BuildNumber\src\general\toaster\toastpkg文件夹中。此步骤中国所有的示例使用的示例代码都是从WDK中RC1版本中获得。
Step2:获得SPC
发布签名需要一个代码签名证书,从商业CA获得的软件发布证书(SPC)。按照CA的说明,获取代码签名证书和在签名的计算机中安装私钥。有关SPC的CA列表,参考本文档的最后一节“资源”。
此节中示例使用的发布签名使用一个虚拟的证书,由CA发布的“Contoso.com”证书。这个证书被安装到个人证书存储中。
重要:请使用强壮的密码保护好.pvk和.pfx文件。更多的信息参考“Creating Strong Password”。
SignTool可以被用来使用从商业CA中获得代码签名证书对二进制文件进行签名。用来给内核模式程序和目录文件签名的证书,必须要安装在本地的个人证书存储中。
一些证书认证机构在.pvk文件存储着数字签名证书的私钥,在.spc .cer证书中存储着公钥。例如,Versign Class-3证书当前就是有.pvk和.spc打包构成。将.pvk和.spc文件转换为.pfx格式,以确保证书和私钥的安全可移植性。Pvk2pfx代码签名工具使用.pvk和.spc文件生成.pfx文件。
•下面的例子将名为abc.pvk的.pvk文件和名为abc.spc的.spc文件转换为名为abc.pfx的.pfx文件:
Pvk2pfx -pvkabc.pvk-pi pvkpassword-spc abc.spc-pfx abc.pfx-popfxpassword-f
•Pvk2pfx参数
-pvkPvkFileName
输入的.pvk文件名称,abc.pvk。
-piPassWord
.pvk文件密码。
-spcSpcFileName
输入的.SPC文件,abc.spc。
-pfx
输出PFX文件,abc.pfx。
-poOptionalPassword
.pfx文件的密码。如果.pfx文件没有指定密码,.pfx文件会被分配与.pvk文件相关联的相同密码。由-pi参数指定。
-f
覆盖现有的.pfx文件。
如果-pfx参数省略了,Pvk2pfx打开一个输入向导并忽略-po和-f参数。
重要:对于给内核模式驱动程序签名,存储在.pfx文件中的证书和密钥必须导入到本地个人证书存储区中。SignTool不支持使用.pfx文件给内核模式驱动程序签名。限制是由于在使用.pfx文件中的证书时和在签名中添加交叉证书时发生冲突。
将.pfx文件导入本地个人证书存储区
1、打开windows资源管理器,双击.pfx文件,弹出证书导入向导。
2、跟随证书导入向导导入代码签名证书到个人证书存储区。
3、证书和私钥现在可以被SignTool使用。
将.pfx文件导入本地个人证书存储库的另一种方法是使用CertUtil命令行实用程序。
使用CertUtil工具导入.pfx文件
1、打开命令行窗口并且跳转到包含.pfx文件的路径中。
2、使用以下命令:
certutil –user –p password–importPFX PFXFile
•Certutil参数
-ppassword
.pfk文件的密码。
-importPFXPFXfile
导入的.pfx文件。
-user
将证书放在“CurrentUser”个人存储中。
注:此certutil命令行已更正为包括-user参数。
•查看SPC属性
使用证书管理单元(certmgr.msc)查看个人证书存储中的证书。
使用MMC证书管理单元
1、点击[开始]按钮,点击[运行]。
2、输入certmgr.msc命令,然后点击[确定]。
3、在弹出的证书管理单元中,从左侧选择[个人]证书存储文件夹
4、点击[证书]文件夹,对右侧发布签名的证书双击。
5、在弹出的证书对话框中选择[详细信息]选项卡,从字段列表框中选择主题以突出显示证书的主题名称。这是在本节中的示例中与SignTool的/ n参数一起使用的名称。
当完成签名这一步骤,从系统当前使用的系统中移除证书和私钥。certmgr.msc可以通过命令行用于查看,导出或从个人证书存储中删除证书。
Step3:获得一个交叉证书
发布签名需要交叉证书和SPC。
确定内核模式代码签名需要哪个交叉证书
1、单击[开始]按钮和点击[运行]。
2、输入Certmgr.msc后,点击[确定]按钮,启动证书管理单元。
3、在证书存储空间中找到签名的证书。证书应该在以下位置中的一个列出,位置依赖于如何安装的。
-
Current user,[个人]证书存储
-
Local machine证书存储
4、双击证书,打开证书对话框。
5、在[证书路径]选项卡中,查找颁发签名证书的CA的颁发者名称和缩略图。
6、点击[查看证书]。
7、在[详细信息]选项卡中,找到CA发布的签名证书中发布者和指纹。
8、在根权限交叉证书列表网页中找到相应的交叉证书。
Step4:创建用于发布签名的目录文件
注:此步骤与标题为“如何给一个内核模块测试签名”的部分中的Step 3相同。这里为了方便理解,再重复一遍。
下一步为驱动包创建一个目录文件,共有两种方法:
-
如果驱动使用INF文件安装的,使用Inf2Cat工具创建目录文件。Inf2Cat自动包括驱动程序包中的所有文件。
-
如果内核模块的安装不使用INF文件:
-
手动的创建.cdf文件,再使用MakeCat创建目录文件。
-
省略目录文件,在二进制文件中使用嵌入式签名。在这一情况下,省略创建签名的目录文件这一节。更多细节关于二进制嵌入式签名,参考“Step 6:使用嵌入式数字签名给驱动进行发布签名”。
-
使用Inf2Cat创建一个目录文件
Inf2Cat可以在任何有INF文件的工程中被用来创建目录文件。Toastpkg是使用INF文件安装,所以这个示例显示了如何使用Inf2Cat为ToastPkg创建一个目录文件。
Inf2Cat生成的目录文件的名称在程序包的INF文件中指定。添加一个目录文件的条目在[Version]节中,并设置目录文件的文件名。
[Version]
...
CatalogFile=CatalogFileName
...
注:要使用Inf2Cat正确工作,Toastpkg示例中的INF文件需要进行合适的更改。当使用这个版本的示例:
-
使用cd跳到目录...\toastpkg\toastcddirectory。
-
运行以下的命令更新INF文件的版本信息:
stampinf -f toastpkg.inf -d 09/01/2006 -v 6.0.9999.0
如下的示例显示了如何创建目录文件。
注:Inf2Cat当前还不是WDK工具的一部分;它是由Winqual提交工具安装附加的工具。当Wiinqual提交工具包被安装后,Inf2Cat的位置位于:Program Files (x86)\Microsoft Winqual Submission Tool文件夹下。要将Inf2Cat添加到他签名工具环境下,请将Inf2cat.exe和文件夹中的所有DLL复制到%WinDDK%\ BuildNumber \ bin \ SelfSign文件夹。
使用Inf2Cat创建目录文件
-
打开x64编译环境命令窗口。
-
设置当前的目录为没有签名的驱动包目录中。
-
运行当前的命令行创建目录文件。
Inf2cat.exe/driver:C:\WinDDK\5739\src\general\toaster\toastpkg\toastcd\ /os:Vista_x64
•Inf2Cat参数:
/driver:PackagePath
指出包含驱动包文件夹的路径.
/os:OSValue
OSValue指定了驱动包文件安装目标操作系统。
OSValue是一个包含以下一个或多个逗号分隔的值:
2000 XP_X86, Server2003_X86, Vista_X86, XP_X64, Server2003_X64, Vista_X64, orServer2003_IA64
使用Signability工具创建一个目录文件
Signability是一个用来创建目录文件的工具。Signability工具被包含在WDK中,但是现在已经被Inf2Cat所取代。但是仍然可以用来使用创建目录文件,为了防止不能获得Winqual提交工具中的Inf2Cat,文档中加入本节。
使用Signability工具创建一个目录文件
-
打开一个x64的编译环境命令行窗口。
-
设置当前的目录为未签名驱动包的路径。
-
运行下列命令来创建目录文件:
Signability.exe /auto /cat /driver:C:\WinDDK\5739\src\general\toaster\toastpkg\toastcd\ /os:512
•Signability参数:
/auto
不需要客户干预,运行Signability工具。
/cat
从指定驱动包中的INF文件中的cat文件名,生成一个目录文件。
/driver:PackagePath
指定包含驱动包文件的文件路径。
/os:OSValue
验证的驱动包中的INF文件是否符合Windows版本的要求。对应于64位版本的WindowsVista的值为512。
Signability工具会打开一个对话框,指示命令选项和进度对话框。目录文件的名称基于INF文件中的入口位置。在Toastpkg示例中,Signability工具创建一个目录文件,名称为tstamd64.cat。
使用MakeCat
MakeCat可以为任何工程创建目录文件,但是必须用于需要目录文件但不使用INF安装的项目中。也可以直接对二进制文件进行签名,即嵌入式签名,而不是创建目录文件。更多给二进制文件嵌入式签名的细节,参考“step6为一个驱动镜像文件进行嵌入式测试签名”
创建一个目录文件,必须手动创建一个.cdf文件,描述目录文件头属性和文件条目。
使用MakeCat工具为Toastpkg创建一个目录
-
打开记事本并且将下列的例子拷贝到文档中。它包含了要编目的文件列表以及它们的属性。
[CatalogHeader]
Name=tstamd64.cat
PublicVersion=0x0000001
EncodingType=0x00010001
CATATTR1=0x10010001:OSAttr:2:6.0
[CatalogFiles]
<hash>File1=amd64\toaster.pdb
<hash>File2=amd64\toaster.sys
<hash>File3=amd64\toastva.exe
<hash>File4=amd64\toastva.pdb
<hash>File5=amd64\tostrcls.dll
<hash>File6=amd64\tostrcls.pdb
<hash>File7=amd64\tostrco2.dll
<hash>File8=amd64\tostrco2.pdb
2、将文档命名为”tstamd64.cdf”,并且将文档保存到驱动包中。
注:当驱动的创建需要支持多平台时,为每一个平台分别创建目录文件。
3、使用“tstamd64.cdf”运行MakeCat工具
makecat –v tstamd64.cdf
•MakeCat参数:
-v
指定MakeCat的详细模式。
tstamd64.cdf
指定.cdf文件名。
图示23显示了如果使用MakeCat工具从.cdf文件中生成目录文件
图示23使用MakeCat创建目录文件
Step5对目录文件进行发布签名
目录文件现在已经准备好进行发布签名。SignTool可以对镜像文件或者目录文件进行数字签名和验证数字签名。并且可以可选择的对数字签名添加时间戳。时间戳可以用于确定签名何时被创建,并且如果必要的话,支持更灵活的证书撤销选项。
如下的示例使用SignTool工具对tstamd64.cat进行发布签名和验证签名。它类似于本文前面讨论的测试签名过程。但是,该过程使用一个SPC代替测试证书,并且添加了交叉证书,也在数字签名中添加了时间戳。
Signtool sign/v /ac MSCV-VSClass3.cer/s my /n contoso.com /thttp://timestamp.verisign.com/scripts/timestamp.dlltstamd64.cat
•SignTool参数
sign
SignTool指出了需要进行数字签名的目录文件。
/v
详细信息的可选项,显示成功执行和警告信息。
/acCrossCertName
交叉证书,MSCV-VSClass3.cer。如果交叉证书不是当前目录,使用全路径。
/sCertStore
一个名称为Contoso.com的SPC。更多描述如何获得SPC的描述,可以参考“查看SPC属性”,“step2获得一个SPC”。
/nCertName
名称为Contoso.com的SPC。如何获得SPC的名称,有关如何获取SPC主题名称的说明,请参见标题为“Step2:获得SPC”的内容。
/tURL
由时间戳权限(TSA)加时间戳的数字签名,由http://timestamp.verisign.com/scripts/timestamp.dllURL指定。
tstamd64.cat
目录文件的名称。
图示24显示了使用时间戳进行发布签名的示例
图示24使用SignTool工具,一个SPC和一个交叉证书进行发布签名。
当目录文件使用SPC和交叉证书进行签名后,可以使用SignTool工具验证目录文件中的数字签名。检查结果是以验证SPC的内核策略的证书链根是“Microsoft Code Verification Root[1]”。
下面的示例验证tstamd64.cat签名目录文件中的“toaster.sys”的签名:
Signtoolverify /kp /v /c tstamd64.cat amd64\toaster.sys
•SignTool参数
Verify
验证目录文件中指定的文件的数字签名。
/kp
验证是否已满足内核策略。
/v
指定的细节的选项,显示成功执行和警告信息。
/cCatalogFileName
指定的目录文件,tstamd64.cat。
toaster.sys
指定需要验证的文件名称,toaster.sys。
图示25显示对目录文件带有时间戳的发布签名。注意在标记签名证书链的输出下的两个关键信息:
-
/kp参数显示了内核策略的证书链,MicrosoftCode Verification Root。
-
交叉证书Class 3 PublicPrimary Certification Authority发布,由Microsoft Code Verification Root颁布。
图示25使用SignTool工具验证目录文件的数字签名
缺省的Authenticode验证策略也可以在驱动镜像文件中被验证,toaster.sys,已签名的目录文件tstamd64.cat有一个散列值。这将确保驱动程序在用户模式即插即用安装对话框和MMC设备管理器管理单元中显示为已签名。
Signtool verify /pa /v /ctstamd64.cat amd64\toaster.sys
•SignTool参数
Verify
在目录文件中的指定文件进行验证数字签名。
/pa
当验证数字签名时使用Authenticode数字签名验证策略。
/v
指定细节的选项,显示成功执行和警告信息。
/cCatalogFileName
指定目录文件tstamd64.cat
FileName
指定需要验证的的文件名,toaster.sys。
图示26显示了toaster.sys数字签名的验证。注意使用/pa参数而不是使用/kp参数,SignTool显示了缺省Authenticode证书链,而不是微软内核策略验证链。缺省Authenticode证书链位于Verisign的3类公共主证书颁发机构中。如果两个证书链都是合法的。缺省的Authenticode证书链会在Windows内核模式下被使用。内核政策证书链被用在WindowsVista内核模式的代码验证。
图示26使用SignTool工具验证目录文件上的签名
在Windows资源管理器中,验证目录文件的数字签名使用右键单击选择属性。对于数字签名的文件,文件的“属性”对话框有一个附加的数字签名选项卡,会显示出用于签名文件的签名,时间戳和证书的详细信息。
Step6:使用嵌入式签名给驱动镜像文件进行发布签名
一个已签名的目录文件是正确安装和加载大多数驱动程序包所必需的文件。但是,嵌入式签名也可能是一个选项,并且是某些类型的驱动程序所必需的。嵌入式签名是指向驱动程序的二进制映像文件本身添加数字签名,而不是将文件散列置于签名的目录文件中。
内核模式的嵌入式签名可能需要以下两个实例:
•当驱动包包含一个引导-启动的驱动。
•当驱动被作为一个应用程序安装且不使用目录文件时。
更多的讨论引导启动驱动,参考节“step6:使用嵌入式签名给一个驱动镜像文件测试签名”
SignTool被用来给二进制文件和目录文件进行嵌入式签名,包括使用SPC对二进制镜像进行签名。下面的示例使用SPC和相关联的交叉证书对二进制文件toaster.sys文件进行签名。它也在数字签名中添加了时间戳。
Signtoolsign /v /ac MSCV-VSClass3.cer/s my /n contoso.com /thttp://timestamp.verisign.com/scripts/timestamp.dllamd64\toaster.sys
•SignTool参数
Sign
指定的二进制文件进行签名。
/v
指定细节的选项,显示成功执行和警告信息。
/acCrossCertName
添加the MSCV-VSClass3.cer交叉证书。
/sCertificationStoreName
指定证书存储空间命名为my,包含SPC。
/nCertName
指定SPC命名为Contoso.com。更多描述如何获得一个SPC命名参考“查看SPC属性”,“Step2获得一个SPC”。
/tURL
指定数字签名,由URL指示的TSA打上时间戳。
FileName
指定需要进行嵌入式签名的二进制文件,toaster.sys。
图示27显示了给一个二进制文件toaster.sys进行嵌入式签名,使用了一个SPC一个交叉证书和一个时间戳。
图示27使用SignTool进行嵌入式签名。
当使用SignTool工具签名完毕后,可以进行验证。检查内核策略“Microsoft Code Verification Root”验证SPC证书链的根的结果。下列命令可以对toaster.sys进行验证。
Signtool verify /kp /v amd64\toaster.sys
•SignTool参数
Verify
指定需要验证的文件。
/kp
验证是否已满足内核策略。
FileName
指定包含要验证的签名amd64 \ toaster.sys二进制文件的名称。
图示28显示了使用内核策略验证二进制文件的嵌入式签名
图示28在二进制镜像文件上验证发布签名
如何安装和加载一个发布签名驱动包
本部分介绍如何在WindowsVista x64测试计算机上安装和加载发行标识的驱动程序包。该示例继续使用在本文前面部分中签名的Toastpkg示例驱动程序包。
注:测试系统必须是运行RC1或更高版本的Windows Vista的x64计算机。如果只是跟随演练以熟悉工具和过程,您可以继续在用于测试签名的同一系统上测试驱动程序安装。
以下常规过程用于安装和加载发布签名的驱动程序包。
准备测试计算机
-
禁用内核模式测试签名引导配置选项。
-
启用代码完整性事件日志和系统审计。
-
重新启动测试计算机
安装和加载发布签名驱动包
-
将发布签名驱动包拷贝到测试计算机中
-
安装发布签名驱动包
-
验证发布签名驱动的正确性
准备测试计算机
要准备测试系统,如果已启用测试签名引导配置选项请禁用内核模式。要在系统启动期间观察与映像文件验证相关的系统事件,还必须启用代码完整性详细日志记录选项。
注:该示例假定测试计算机上使用的临时文件被复制到文件夹c:\ toaster。在开始本部分之前,在测试系统上创建此文件夹。
Step1:禁用测试签名引导配置选项
如果内核模式测试签名引导配置选项被启用来安装测试签名驱动,禁用选项。
禁用测试签名引导配置选项
-
使用右键单击选择管理员权限运行命令行窗口
-
使用如下的命令启用测试签名
bcdedit.exe/set TESTSIGNING OFF
•BCDEdit参数
/set
设置引导条目选项值。
TESTSIGNING OFF
设置TESTSIGNING选项为OFF
默认情况下,在WindowsVista中未定义测试签名选项。这相当于将测试签名引导配置选项设置为OFF。
Step2:启用代码完整性事件日志和系统审计
注:这一步与“如何安装和加载一个测试签名的驱动包”中的step3内容相同。为了方便起见,再重复一次。
-
代码完整性操作日志显示映像验证错误事件。
-
代码完整性细节日志显示了数字签名验证成功的事件。
如下的程序显示了如何启用代码完整性细节事件日志来显示所有成功操作系统加载器和内核模式的镜像验证事件。
启用代码完整性细节事件日志
-
启动系统事件查看器。
最简单的方式打开开始菜单,右键单击计算机,选择管理,打开计算机管理控制面板应用程序,事件查看器也可以命令行中输入eventvwr.exe打开。
2、展开事件查看器中应用程序和服务日志,选择Microsoft\Windows\Code Integrity文件夹。
3、点击Code Integrity节点。
4、右键点击Code integrity,选择查看,点击显示分析和调试日志。
这将添加一个叫做Verbose的节点。
5、右键点击Verbos节点,并且选择属性。
6、在常规选项卡中,在启用日志记录的复选框中勾选,单击确定按钮。
也可以启用系统事件记录,包括代码完整性镜像验证失败事件。当Windows内核加载驱动因为数字签名失败会产生事件,像类似事件也记录在代码完整性操作事件日志视图中。
启用审计策略在失败操作系统类别生成审计事件
输入如下的命令行在命令行窗口中:
Auditpol /set /Category:”System”/failure:enable
图示29显示了打开系统类别审计策略
图示29启用安全审计策略
Step 3:重启测试计算机
重启测试计算机,允许内核模式引导配置选项生效。
安装和加载发布签名驱动包
当系统重启完毕后,驱动包可以被安装和加载了。
Step4:将发布签名驱动包拷贝到测试计算机上
将发布签名驱动包Toastpkg拷贝到C:\toaster中。本示例使用了临时文件夹作为本地安装发布签名驱动包。
Step5:安装发布签名驱动包
有两种方式安装驱动包
-
使用Devcon工具,WDK中为了驱动安装的命令行工具。
-
使用Windows添加硬件向导。
使用Devcon安装驱动包
-
打开WDK中编译环境命令行窗口,设置路径目录为C:\toaster
-
跟着使用Devxon中WDK中的自签名示例。
示例位置在%WinDDK%\BuildNumber\bin\selfsign\selfsign_example.cmd.
下面的示例演示了安装一个基于INF文件具有发布签名的驱动包,该驱动包为Toastpkg并且使用添加硬件向导。
使用添加硬件向导安装驱动包
-
打开一个命令行窗口
-
输入hdwwiz.cpl打开设备管理器窗口,选择操作菜单,添加过时硬件,点击下一步。
-
选择高级选项,单击下一步。
-
选择显示所有设备,点击下一步。
-
选择从磁盘安装选项。
-
输入包含驱动包的目录C:\toaster路径。
-
选择toastpkg.inf文件,并且点击打开。
-
单击确定。
-
在下两个属性页中都点击下一步,最后点击结束完成安装。
-
在弹出的“Would you like to install this device software”对话款中,点击安装。
-
点击结束,完成安装。
注:系统根据用于对目录进行签名的SPC来验证发布者信息是否准确。如果发行者信任等级是未知的,对于Contoso.com是真的,图示30中系统显示对话框。为了安装能够进行下去,用户必须点击安装。有关信任和驱动程序安装的更多信息,参考“Code-Signing Best Practices.”。
图示30windows驱动安装安全对话框。
Step 6.验证发布签名的驱动程序是否正确运行
验证Toastpkg正确安装。
-
打开设备管理器。
-
在设备列表中选择Toaster。示例参考图示31。
-
打开驱动属性对话框,双击Toaster Package Sample Toaster。
-
确认toaster正常工作,在常规选项卡中,检查状态对话框。
图示31验证Toastpkg操作正确
驱动发布签名的疑难解答
注:这一步与节“驱动测试签名的疑难解答”内容相同,为了方便,再进行重复。
以下列表提供了几种常见的方法来解决加载版本驱动程序的问题。将在以下部分中更详细地讨论它们:
-
使用添加硬件向导或设备管理器检查驱动程序是否已加载并签名。
-
检查Windows安全审核日志,以查看是否存在用于镜像验证失败的系统完整性事件。要记录这些事件,必须启用系统审核策略类别。
-
检查代码完整性操作事件日志,查看是否存在驱动程序签名或映像验证错误。
-
检查代码完整性信息事件日志,以查看与驱动程序签名验证相关的所有事件。
注:必须明确启用列表中的最后三个项目。更多信息,参考“Step3:启动代码完整性事件日志和系统审计”。
使用添加硬件向导
添加硬件向导当安装完成后悔显示了驱动的状态。如果Windows不能加载设备驱动,状态指示出一个错误码39,如图示32显示。
图示32添加硬件向导显示了驱动安装后,没有加载。
使用设备管理器
使用设备管理器解决发布签名的疑难问题,双击驱动的名称,弹出属性对话框。图示33显示了Toaster属性对话框。
图示33Toastpkg属性对话框
对话框显示了设备状态码39。状态指示出代码完整性不允许驱动或者内核模块不允许加载因为它们没有被正确的签名。按照下节的说明确定签名是无效的还是驱动程序或内核模块未被签名,是哪个原因不允许加载。
使用Windows安全审计日志
如果驱动程序由于缺少有效的签名而无法加载,则审核失败事件将记录在Windows安全日志中,指示代码完整性无法验证驱动程序文件镜像的哈希值。日志条目包括驱动程序文件的完整路径名。仅当本地安全审核策略启用系统故障事件日志记录时,才会生成安全日志审核事件。
注:安全审计日志必须明确启动。更多信息,参看“step3:启用代码完整性事件日志和系统审计”。
检查安全日志
-
打开一个命令行窗口。
-
在运行中输入Ecentvwr.exe,启动Windows事件查看器。事件查看器也可以通过控制面板中的计算机管理程序启动。
-
打开Windows安全审计日志。
-
点击系统完整事件,检查事件ID为5038,。
-
双击日志条目,显示事件属性对话框,提供了事件描述的细节。
图示34显示了由未签名的Toaster.sys文件引起的安全审计日志事件的事件对话框。
图示34代码完整性安全审计日志条目
使用代码完整性事件操作事件日志
如果驱动因为没有签名或者镜像验证失败导致加载失败,代码完整性操作事件日志会记录下该事件。始终启用代码完整性操作事件。
代码完整性事件可以在事件查看器中查看。
检查代码完整性操作日志
-
打开命令行窗口
-
输入Eventver.exe打开windows事件查看器。
事件查看器也可以通过计算机管理控制面板应用程序启动。
-
打开Windows CodeIntegrity日志。
-
双击一个日志条目显示事件属性对话框,上面提供了事件的详细描述。
图示35显示由未签名的Toaster.sys文件引起的代码完整性操作日志事件的事件属性对话框。
图示35代码完整性操作事件日志条目
使用代码完整性详细日志的信息信息
代码完整性信息日志的详细视图中可以跟踪所有内核模式镜像验证检查的事件。这些事件显示了系统中所有驱动加载镜像验证成功的事件。
启用代码Code Integrity verbose视图
-
如前面的示例,打开事件查看器。
-
点击CodeIntegrity节点。
-
右键点击CodeIntegrity,在弹出的快捷菜单中选择查看。
-
选择显示分析和调试日志。
这步创建了一个子树中的两个附加节点:Operational and Verbose。
-
右键点击Verbose,在快捷菜单中选择属性。
-
在常规选项卡中,选择启用日志记录,打开verbose日志记录模式。
-
重启系统和重新加载所有的内核模式二进制文件。
-
当重启完毕后,打开MMC计算机管理管理单元并查看代码完整性详细事件日志。