c - 调用 CertCreateCertificateChainEngine 函数时出现未处理的异常

标签 c visual-c++ cryptoapi

我正在关注 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 的调试屏幕截图:

ChainConfig

hChainEngine 显示为 NULL,例如0x00000000

最佳答案

我找到了这个异常的原因。问题是,由于 Windows 7 之后进行了更改,我们也应该初始化 hExclusivrTrustPeople 和 hExclusiveRoot 成员。所以提到的文章对于较新的 Windows 系统来说有点过时了

关于c - 调用 CertCreateCertificateChainEngine 函数时出现未处理的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41768523/

相关文章:

bitcoin - 我如何通过 Coinbase API 获得交易费?

c - 如何在 C 中退出无限 for(;TRUE;) ?

C 语言中的级联和嵌套 if 语句

winapi - 逆向工程 SEH : Why doesn't my IDENTICAL assembler code work like the original?

c++ - 字符数组末尾的额外字符 (char *Result = new char) 8OI

digital-signature - 从具有多个签名的签名可执行文件中读取证书数据

c++ - 快速排序(n 个数组应被视为 1 并根据需要重新映射值)

c++ - 链接分配对性能有何影响

c++ - 内存地址可以存储为整数类型吗?

c - 是否可以重用 CryptVerifySignature() 哈希对象?