我一直在尝试使用已发布的https://msdn.microsoft.com/en-us/library/windows/desktop/aa382042(v=vs.85).aspx
示例的修改版本创建非默认证书链
CERT_CHAIN_ENGINE_CONFIG chainConfig;
HCERTCHAINENGINE hChainEngine;
:: SecureZeroMemory (&chainConfig, sizeof (CERT_CHAIN_ENGINE_CONFIG));
chainConfig.cbSize = sizeof(chainConfig);
chainConfig.hRestrictedRoot = NULL;
chainConfig.hRestrictedTrust = NULL;
chainConfig.hRestrictedOther = NULL;
// Following two parameters are optionally enabled.
chainConfig.hExclusiveRoot = NULL;
chainConfig.hExclusiveTrustedPeople = NULL;
chainConfig.cAdditionalStore = 0;
chainConfig.rghAdditionalStore = NULL;
chainConfig.dwFlags = CERT_CHAIN_CACHE_END_CERT;
chainConfig.dwUrlRetrievalTimeout = 0;
chainConfig.MaximumCachedCertificates = 0;
chainConfig.CycleDetectionModulus = 0;
// optionally enabled following param.
chainConfig.dwExclusiveFlags = CERT_CHAIN_EXCLUSIVE_ENABLE_CA_FLAG;
if (!CertCreateCertificateChainEngine(&chainConfig, &hChainEngine))
{
// failure
}
当我使用Visual Studio 2010运行此程序时 - 我可以获得hChainEngine的有效值,但在VS 2013下运行相同的程序时,我收到错误E_INVALIDPARAM(0x80070057)(参数不正确。)
我尝试了其他所有组合,以了解哪里出了问题,但无法弄清楚这里有哪些参数,但API并不喜欢。
我观察到的一件事是,虽然VS2010指向" C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ Include"和VS2013指向" C:\ Program Files(x86)\ Windows Kits \ 8.1 \ Include \ um"它具有_CERT_CHAIN_ENGINE_CONFIG的不同结构。我试着相应地管理我的结构分配,但没有运气!
有人可以帮我理解这里有什么问题吗?感谢
我在Windows 7上安装了两个版本的Visual Studio。