我们有一个内部构建和签名的驱动程序。最近,我们在 Windows 7 上安装它时遇到了问题。最初是缺少证书,通过安装根证书和中间证书解决了这个问题。Signtool 检查全部成功。但现在我在安装过程中收到此错误:
Failed to verify file 'WdfCoInstaller01009.dll' against catalog. Catalog = avp3ioc2.cat, Error = 0xE000024B
!!! sto: Catalog did not contain file hash. File is likely corrupt or a victim of tampering.
我检查了目录文件,并将指纹与 WdfCoInstaller01009.dll 的指纹进行了验证。一切都匹配。
这可能是什么原因造成的?我可以不重新签署驱动程序就解决这个问题吗(这是一个漫长的过程)?任何帮助都将不胜感激。
PS Windows 分区已启用 EWF。驱动程序通过 DiInstallDriver 安装。
答案1
.cat 文件包含所有驱动程序文件的校验和。如果您只对 .cat 进行签名,则它仅覆盖原始文件(如 .sys 文件)。除非您也对该文件进行签名,否则您无法复制和使用新文件。
有两种不同的签名检查。一种是安装时检查,仅适用于 PnP 驱动程序包。此检查在所有系统(32 位和 64 位)上进行。在这种情况下,.cat 很重要。如果 .cat 文件是 WHQL 签名的,则安装不会发生。如果 .cat 是由您自己签名的,您会收到警告(“您信任这个吗...)”。如果您的 .cat 文件未签名或丢失,您会收到“未签名的驱动程序”警告。用户可以绕过其中任何一个并允许安装驱动程序。
另一个是内核模式代码签名,每次加载驱动程序时都会进行,但仅限于 64 位系统。对于此检查,您可以对 .sys 驱动程序文件进行签名,或者如果您有驱动程序包,则可以对 .cat 文件进行签名。对于此检查,您必须使用 3 类代码签名证书,并且必须使用 Microsoft 提供的相应交叉证书才能进入其证书域。您可以使用“signtool verify /kp /v”检查是否正确执行了此操作。如果您没有看到“Microsoft 代码验证根”,则您可能没有使用交叉证书。我知道这很麻烦。
现在这个问题已经解决了,你的问题的答案是肯定的,你需要重新签署驱动程序。