C++ 以编程方式验证签名dll';s C++;
我有一个已签名的dll,希望在使用它之前验证它的签名。 我的应用程序是用C++编写的。如何以编程方式获取dll的签名?您可以使用。C++ 以编程方式验证签名dll';s C++;,c++,visual-studio-2010,dll,digital-signature,C++,Visual Studio 2010,Dll,Digital Signature,我有一个已签名的dll,希望在使用它之前验证它的签名。 我的应用程序是用C++编写的。如何以编程方式获取dll的签名?您可以使用。dll和PE几乎相同,只是头中有2到3个字节的差异。 完整的代码示例是(也适用于dll)。MSDN推荐的方法是运行SignTool,它是CryptoAPI的一部分- SignTool返回说明签名检查结果的命令行文本。此外,SignTool为成功执行返回一个退出代码零,为失败执行返回一个退出代码,为已完成但出现警告的执行返回两个退出代码 有关详细信息,请参阅。其中一个选
dll和PE几乎相同,只是头中有2到3个字节的差异。
完整的代码示例是(也适用于dll)。MSDN推荐的方法是运行SignTool,它是CryptoAPI的一部分- SignTool返回说明签名检查结果的命令行文本。此外,SignTool为成功执行返回一个退出代码零,为失败执行返回一个退出代码,为已完成但出现警告的执行返回两个退出代码 有关详细信息,请参阅。其中一个选项是,它来自Microsoft。验证代码可以简单到:
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);
CComPtr pSignedCode;
AtlSure_成功(pSignedCode.CoCreateInstance(uuuIdof(Capicom::SignedCode));
ATLsure_成功(pSignedCode->put_文件名(CComBSTR(pszPath));
HRESULT nVerifyResult=pSignedCode->Verify(ATL_VARIANT_FALSE);
您还可以轻松获得附加信息,如签名者、证书等
如果您不想使用CAPICOM,MSDN建议在上面的代码段中使用。将dll作为文件读入,注意签名的开头(通过位置或标记开头的特定字符/字符集),读入所有字符,直到签名的结尾进入缓冲区,将其与您已经加载到程序中的签名进行比较,完成。感谢您的回复。VerifyEmbeddedSignature(LPCWSTR pwszSourceFile)希望得到什么?dll的名称?dll文件是PE(可移植可执行文件)格式,没有区别。