Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 以编程方式验证签名dll';s C++;_C++_Visual Studio 2010_Dll_Digital Signature - Fatal编程技术网

C++ 以编程方式验证签名dll';s C++;

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,希望在使用它之前验证它的签名。 我的应用程序是用C++编写的。如何以编程方式获取dll的签名?

您可以使用。
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(可移植可执行文件)格式,没有区别。