CertCreateCertificateChainEngine返回"无效参数" (80070057)

时间:2015-05-07 01:47:25

标签: c++ visual-studio-2010 visual-studio-2012 cryptoapi

我一直在尝试使用已发布的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。

0 个答案:

没有答案