1

Windows7 で Crypto API を使用して CTL (Certificate Trust List) を取得したいのですが、CertFindCTLInStore 関数を使用していますが、常に false を返します。GetLastError() 関数は -2146885682 を返します。どこで間違ったのかわかりません。コードは次のとおりです。

hCertStore = CertOpenSystemStore(NULL, pszStoreName);

if(NULL != hCertStore)
{
    char buffer[8*1024];
    memset(buffer,0,sizeof(buffer));
    PCCTL_CONTEXT pCTL = CertCreateCTLContext(
                         X509_ASN_ENCODING|PKCS_7_ASN_ENCODING,
                         (const BYTE*)buffer,
                         sizeof(buffer));
    CTL_FIND_USAGE_PARA usagePara;
    //first
    pCTL =  CertFindCTLInStore(
            hCertStore, 
            X509_ASN_ENCODING|PKCS_7_ASN_ENCODING,
            0,
            CTL_FIND_ANY,
            NULL,
            NULL);

    if (NULL != pCTL)
    {
        printf("Find a CTL\n");
    }
    else
    {
        printf("Error Code :%d\n",GetLastError());
    }


    //Second 
    CRYPT_HASH_BLOB cryBlob;
    pCTL =  CertFindCTLInStore(
        hCertStore, 
        X509_ASN_ENCODING|PKCS_7_ASN_ENCODING, 
        0,
        CTL_FIND_SHA1_HASH,
        &cryBlob, 
        NULL);

    if (NULL != pCTL)
    {
        printf("Find a CTL\n");
    }
    else
    {
        printf("Error Code :%d\n",GetLastError());
    }


    //third
    pCTL =  CertFindCTLInStore(
        hCertStore, 
        X509_ASN_ENCODING|PKCS_7_ASN_ENCODING, 
        0,
        CTL_FIND_MD5_HASH,
        &cryBlob, 
        NULL);

    if (NULL != pCTL)
    {
        printf("Find a CTL\n");
    }
    else
    {
        printf("Error Code :%d\n",GetLastError());
    }

    //fourth
    CTL_FIND_USAGE_PARA ctlPara;
    pCTL =  CertFindCTLInStore(
        hCertStore, 
        X509_ASN_ENCODING|PKCS_7_ASN_ENCODING, 
        0,
        CTL_FIND_USAGE,
        &ctlPara,
        NULL);

    if (NULL != pCTL)
    {
        printf("Find a CTL\n");
    }
    else
    {
        printf("Error Code :%d\n",GetLastError());
    }


    //fifth
    CTL_FIND_USAGE_PARA ctlPara2;
    pCTL =  CertFindCTLInStore(
        hCertStore, 
        X509_ASN_ENCODING|PKCS_7_ASN_ENCODING, 
        0,
        CTL_FIND_SAME_USAGE_FLAG,
        &ctlPara2, 
        NULL);

    if (NULL != pCTL)
    {
        printf("Find a CTL\n");
    }
    else
    {
        printf("Error Code :%d\n",GetLastError());
    }


    //six
    CTL_CONTEXT ctlText;
    pCTL =  CertFindCTLInStore(
        hCertStore, 
        X509_ASN_ENCODING|PKCS_7_ASN_ENCODING, 
        0,
        CTL_FIND_EXISTING,
        &ctlText, 
        NULL);

    if (NULL != pCTL)
    {
        printf("Find a CTL\n");
    }
    else
    {
        printf("Error Code :%d\n",GetLastError());
    }

    //seven
    CTL_FIND_SUBJECT_PARA ctlSubPara;
    pCTL =  CertFindCTLInStore(
        hCertStore, 
        X509_ASN_ENCODING|PKCS_7_ASN_ENCODING, 
        0,
        CTL_FIND_SUBJECT,
        &ctlSubPara, 
        NULL);

    if (NULL != pCTL)
    {
        printf("Find a CTL\n");
    }
    else
    {
        printf("Error Code :%d\n",GetLastError());
    }
4

1 に答える 1

0

-2146885682 ではなく、-2146885628、別名 0x80092004 を取得していると思いますCRYPT_E_NOT_FOUND。簡単に言うと、ストアに CTL はありません。

于 2013-08-08T04:11:01.823 に答える