我正在尝试根据文件路径检查 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
如何修复该功能?
最佳答案
是的 WinVerifyTrust
是正确使用的函数,但您必须准备调用它两次。
首先你用WTD_CHOICE_FILE
调用它,如果成功,那么你就完成了。如果没有,您必须使用 WTD_CHOICE_CATALOG
(CryptCATAdminCalcHashFromFileHandle
+ CryptCATAdminEnumCatalogFromHash
+ CryptCATCatalogInfoFromContext
) 再次调用它,因为某些 Windows 文件会不要嵌入证书信息(尤其是非 PE 文件)。 (您也可以尝试 find the catalog info first 来避免调用它两次,但我认为这会比较慢)
关于c++ - 检查 DLL 是否已签名 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45181009/