我有一个已签名的dll并希望在使用前验证其签名。 我的应用程序是用C++编写的。如何以编程方式获取dll的签名?
我有一个已签名的dll并希望在使用前验证其签名。 我的应用程序是用C++编写的。如何以编程方式获取dll的签名?
其中一个选项是CAPICOM库,它可以从微软作为32位可分发文件获得。验证代码可以非常简单:
CComPtr<Capicom::ISignedCode> pSignedCode;
ATLENSURE_SUCCEEDED(pSignedCode.CoCreateInstance(__uuidof(Capicom::SignedCode)));
ATLENSURE_SUCCEEDED(pSignedCode->put_FileName(CComBSTR(pszPath)));
HRESULT nVerifyResult = pSignedCode->Verify(ATL_VARIANT_FALSE);
您还可以轻松获得其他信息,例如签名者、证书等。
如果您不想使用 CAPICOM,则 MSDN 建议使用上面代码片段中所使用的 SignedCode 类的替代选项。
MSDN 推荐使用 CryptoAPI 的一部分 SignTool 运行 -
SignTool 返回命令行文本,指示签名检查结果。此外,对于成功执行,SignTool 返回零退出代码;对于失败执行,返回 1 退出代码;对于带有警告的执行,返回 2 退出代码。
详细信息请参见 使用 SignTool 验证文件签名。