我正在尝试检查DLL是否基于文件路径进行签名。我看到使用WinVerifyTrust存在针对此类问题的预先存在的解决方案,但是,当我尝试针对" C:\ Windows \ System32 \ kernel32.dll"它说:"文件" C:\ Windows \ System32 \ kernel32.dll"没有签名。"虽然kernel32应该是一个签名的DLL。我在Windows 7上。
这是我调用的函数的源代码:https://msdn.microsoft.com/en-us/library/windows/desktop/aa382384(v=vs.85).aspx
如何修复此功能?
答案 0 :(得分:4)
是WinVerifyTrust
是正确使用的功能,但您必须准备好两次调用。
首先用WTD_CHOICE_FILE
调用它,成功然后就完成了。如果没有,则必须使用WTD_CHOICE_CATALOG
(CryptCATAdminCalcHashFromFileHandle
+ CryptCATAdminEnumCatalogFromHash
+ CryptCATCatalogInfoFromContext
)再次调用它,因为某些Windows文件未嵌入证书信息(尤其是非PE文件) 。 (您也可以尝试find the catalog info first以避免两次调用它,但我认为这样会慢一些)