我正在关注 Microsoft Example C Program: Creating a Certificate Chain 的本教程
但是我在以下 block 调用 CertCreateCertificateChainEngine 函数时遇到未处理的异常
if(CertCreateCertificateChainEngine(
&ChainConfig,
&hChainEngine)) {
printf("A chain engine has been created.\n");
}
else {
MyHandleError("The engine creation function failed.");
}
异常消息是:
Unhandled exception at 0x7535F61A (crypt32.dll) in capi_verify.exe: 0xC0000005: Access violation writing location 0xCCCCCCD0.
以下是变量的定义方式:
HCERTCHAINENGINE hChainEngine = NULL;
CERT_CHAIN_ENGINE_CONFIG ChainConfig;
ChainConfig 结构体初始化为:
ChainConfig.cbSize = sizeof(CERT_CHAIN_ENGINE_CONFIG);
ChainConfig.hRestrictedRoot= NULL ;
ChainConfig.hRestrictedTrust= NULL ;
ChainConfig.hRestrictedOther= NULL ;
ChainConfig.cAdditionalStore=0 ;
ChainConfig.rghAdditionalStore = NULL ;
ChainConfig.dwFlags = CERT_CHAIN_CACHE_END_CERT;
ChainConfig.dwUrlRetrievalTimeout= 0 ;
ChainConfig.MaximumCachedCertificates=0 ;
ChainConfig.CycleDetectionModulus = 0;
CertCreateCertificateChainEngine 函数具有以下签名:
BOOL WINAPI CertCreateCertificateChainEngine(
_In_ PCERT_CHAIN_ENGINE_CONFIG pConfig,
_Out_ HCERTCHAINENGINE *phChainEngine
);
这是 ChainConfig 的调试屏幕截图:
hChainEngine 显示为 NULL,例如0x00000000
最佳答案
我找到了这个异常的原因。问题是,由于 Windows 7 之后进行了更改,我们也应该初始化 hExclusivrTrustPeople 和 hExclusiveRoot 成员。所以提到的文章对于较新的 Windows 系统来说有点过时了
关于c - 调用 CertCreateCertificateChainEngine 函数时出现未处理的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41768523/