简短说明:我有一个签名的驱动程序,它通过了SignTool验证,但是Windows拒绝加载它时出现错误:CodeIntegrity 3004 - 在系统上找不到文件哈希。我该如何解决这个问题?
详细说明: 我正在使用赛普拉斯套件USB 3.4.7开发套件为我们的仪器创建USB驱动程序,以便在Windows 7 64位下运行。我已使用正确的ID配置INF,并且只要我通过绕过驱动程序签名实施,未签名的驱动程序就可以正常工作。我想创建一个已签名的驱动程序,并且一直按照http://www.davidegrayson.com/signing/
中描述的步骤操作我使用带有/ os:7_X64标志的Inf2Cat v3.2创建了一个目录文件。我正在使用SignTool / sha1进行签名,并且可以验证.cat和cyusb.sys文件上的签名。文件资源管理器显示两个文件都有数字签名,高级选项卡显示“此数字签名正常。”
我插入了我的USB设备,它在设备管理器中显示为未知设备。我选择更新驱动程序,然后我看到一个屏幕,说明驱动程序是由我签名的。我继续,片刻之后,安装失败,说明驱动程序没有正确签名。事件查看器显示CodeIntegrity错误3004,“Windows无法验证CYUSB.sys的映像完整性,因为在系统上找不到文件哈希”
我无法找到无法找到的“文件哈希”的解释。任何有关如何进一步排除故障并解决此问题的帮助都将非常感激!
答案 0 :(得分:4)
事件日志中的错误消息具有误导性。缺少的“文件哈希”实际上是Microsoft根级别证书。我的驱动程序由GlobalSign ObjectSign CA签署,这是一个有效的签名,但我没有指定将GlobalSign链接到Microsoft根证书的交叉证书。
要清楚地检测原始错误,我需要使用SignTool验证/ kp开关,它测试此USB驱动程序所需的内核级权限。使用该开关我收到一个错误,明确指出它无法找到Microsoft根证书。
我在这里下载了GlobalSign的交叉证书:http://msdn.microsoft.com/en-us/library/windows/hardware/dn170454(v=vs.85).aspx
使用带有SignTool Sign的/ ac开关我能够使用链接到Microsoft根证书来签署.cat文件。此驱动程序已成功安装在Win 7 64位系统上。胜利!