c++ - 检查 DLL 是否已签名 C++

标签 c++ windows dll windows-7 digital-signature

我正在尝试根据文件路径检查 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 来避免调用它两次,但我认为这会比较慢)

Sysinternals 论坛上有各种主题(thisthis)也许是解决与此相关问题的最佳资源。

关于c++ - 检查 DLL 是否已签名 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45181009/

相关文章:

c++ - 自动生成的 move 构造函数,成员不可 move

asp.net - Web.Config 的 System.Web 部分中的 AllowLocation ="true"有什么作用?

delphi - 在 Delphi 7 中直接从内存加载 DLL

c# - .NET Core 应用程序加载 C++ DLL 失败

c# - 检查 DLL 文件是否是 C# 中的 CLR 程序集的最佳方法

c++ - 如何在 C++ 中实现生成器?

c++ - 获取 std::fstream 失败错误消息和/或异常

c++ - operator= 从模板类重载

c++ - 如何从崩溃中提取调试信息

c# - 表单运行时不显示上下文菜单项