C++ 如何从PCCERT_上下文中获取CSP的提供商名称?

C++ 如何从PCCERT_上下文中获取CSP的提供商名称?,c++,cryptoapi,C++,Cryptoapi,我一直试图从PCCERT_上下文中获取提供商名称,因为在我当前的项目中,我必须将智能卡中的所有证书加载到我的程序中。而在将来,我必须处理这些证书与一些任务,如更新证书,删除证书。但我有问题,我必须将CSP名称和提供者名称与CryptAcquireContext映射到executive。我现在很困惑如何存档,谁能给我一些指导来帮助我解决这个问题。 我尝试了CertGetCertificateContextProperty,dwPropId为CERT\u KEY\u PROV\u INFO\u PR

我一直试图从PCCERT_上下文中获取提供商名称,因为在我当前的项目中,我必须将智能卡中的所有证书加载到我的程序中。而在将来,我必须处理这些证书与一些任务,如更新证书,删除证书。但我有问题,我必须将CSP名称和提供者名称与CryptAcquireContext映射到executive。我现在很困惑如何存档,谁能给我一些指导来帮助我解决这个问题。
我尝试了CertGetCertificateContextProperty,dwPropId为CERT\u KEY\u PROV\u INFO\u PROP\u ID,但无法获取CRYPT\u KEY\u PROV\u INFO。

如果我理解正确,下面的代码片段将显示如何从证书中提取密钥提供程序信息

void trace(char* message, DWORD errorCode)
{
    cout << message << errorCode;
}

std::wstring Test_CertGetCertificateContextProperty(PCCERT_CONTEXT pCertContext)
{
    DWORD dwSize = 0;    
    BOOL bIsSuccess = CertGetCertificateContextProperty(pCertContext, 
                                                        CERT_KEY_PROV_INFO_PROP_ID,
                                                        NULL,
                                                        &dwSize);
    if (!bIsSuccess)
    {
        trace("CertGetCertificateContextProperty failed with error: ", GetLastError());
        return L"";
    }

    PCRYPT_KEY_PROV_INFO pKeyProvInfo = (PCRYPT_KEY_PROV_INFO)LocalAlloc(LMEM_ZEROINIT, dwSize);
    if (pKeyProvInfo == NULL)
    {
        trace("LocalAlloc failed with error:", GetLastError());
        return L"";
    }

    bIsSuccess = CertGetCertificateContextProperty(pCertContext, 
                                                   CERT_KEY_PROV_INFO_PROP_ID,
                                                   pKeyProvInfo,
                                                   &dwSize);

    std::wstring provName;
    if (bIsSuccess)
    {
        provName = pKeyProvInfo->pwszProvName;
    }

    LocalFree(pKeyProvInfo);

    return provName;
}
void跟踪(字符*消息,DWORD错误代码)
{
库特