Condividi tramite


CERT_CHAIN_FIND_ISSUER_PARA struttura (wincrypt.h)

La struttura CERT_CHAIN_FIND_BY_ISSUER_PARA contiene informazioni usate nella funzione CertFindChainInStore per compilare catene di certificati.

Sintassi

typedef struct _CERT_CHAIN_FIND_BY_ISSUER_PARA {
  DWORD                                  cbSize;
  LPCSTR                                 pszUsageIdentifier;
  DWORD                                  dwKeySpec;
  DWORD                                  dwAcquirePrivateKeyFlags;
  DWORD                                  cIssuer;
  CERT_NAME_BLOB                         *rgIssuer;
  PFN_CERT_CHAIN_FIND_BY_ISSUER_CALLBACK pfnFindCallback;
  void                                   *pvFindArg;
  DWORD                                  *pdwIssuerChainIndex;
  DWORD                                  *pdwIssuerElementIndex;
} CERT_CHAIN_FIND_ISSUER_PARA, *PCERT_CHAIN_FIND_ISSUER_PARA, CERT_CHAIN_FIND_BY_ISSUER_PARA, *PCERT_CHAIN_FIND_BY_ISSUER_PARA;

Members

cbSize

Contiene le dimensioni di questa struttura, in byte. Questa dimensione non deve essere hardcoded. Deve essere impostato in fase di compilazione usando l'operatore sizeof , come illustrato nell'esempio seguente.

CERT_CHAIN_FIND_BY_ISSUER_PARA findParams;
findParams.cbSize = sizeof(CERT_CHAIN_FIND_BY_ISSUER_PARA);

pszUsageIdentifier

Puntatore a una stringa ANSI con terminazione null contenente l'identificatore di utilizzo da corrispondere. Se questo membro è NULL, un certificato con qualsiasi utilizzo può essere una corrispondenza.

dwKeySpec

Contiene il valore della specifica della chiave da corrispondere. Questo può essere uno dei valori seguenti. Se questo parametro è zero, qualsiasi certificato può corrispondere.

Valore Significato
AT_KEYEXCHANGE
0x01
La chiave può essere usata per crittografare o firmare a seconda dell'algoritmo.
AT_SIGNATURE
0x02
La chiave può essere usata per la firma.

dwAcquirePrivateKeyFlags

Quando il parametro dwFindFlags della funzione CertFindChainInStore contiene CERT_CHAIN_FIND_BY_ISSUER_COMPARE_KEY_FLAG, la funzione CryptAcquireCertificatePrivateKey viene chiamata per eseguire il confronto delle chiavi pubbliche. In questo caso, questo membro viene passato come parametro dwFlags della funzione CryptAcquireCertificatePrivateKey . Per i valori possibili per questo membro e i relativi significati, vedere il parametro dwFlags della funzione CryptAcquireCertificatePrivateKey .

cIssuer

Contiene il numero di elementi nella matrice rgIssuer . Se questo membro è zero, qualsiasi autorità emittente può essere una corrispondenza.

rgIssuer

Matrice di BLOB con codifica X.509, Notation One sintassi astratta (ASN.1). Se questo membro è NULL o la funzione di callback restituisce TRUE, un nuovo elemento viene aggiunto alla catena per il certificato con una chiave privata con l'utilizzo specificato di KeySpec e chiave avanzata.

pfnFindCallback

Puntatore a una funzione di callback CertChainFindByIssuerCallback che consente all'applicazione di filtrare i certificati per cui vengono create le catene. Se questo membro è NULL, viene compilata una catena per ogni certificato trovato. Se questo membro non è NULL, verrà compilata una catena per il certificato trovato in base al valore restituito della funzione di callback.

pvFindArg

Valore definito dall'applicazione che verrà passato come parametro pvFindArg della funzione di callback CertChainFindByIssuerCallback a cui fa riferimento il membro pfnFindCallback di questa struttura.

pdwIssuerChainIndex

Puntatore a un valore DWORD che riceve l'indice in base zero della catena corrispondente all'autorità emittente. Se questo membro è NULL, non viene usato.

Se cIssuer è zero, questo membro non viene usato.

Questo membro viene definito solo se viene definita la macro CERT_CHAIN_FIND_BY_ISSUER_PARA_HAS_EXTRA_FIELDS .

pdwIssuerElementIndex

Puntatore a un valore DWORD che riceve l'indice in base zero dell'elemento nella catena del certificato dell'autorità emittente. Se questo membro è NULL, non viene usato.

Se cIssuer è zero, questo membro non viene usato.

Questo membro è impostato sull'indice del certificato trovato più uno per specificare l'indice del certificato dell'autorità di certificazione. A causa di questo, una catena parziale o un certificato autofirmato che corrisponde al nome BLOB può causare pdwIssuerElementIndex per puntare l'ultimo certificato nella catena. Questa situazione può essere rilevata confrontando il contenuto di pdwIssuerElementIndex con il membro cElement della struttura CERT_SIMPLE_CHAIN per assicurarsi che l'indice sia valido.

Questo membro viene definito solo se viene definita la macro CERT_CHAIN_FIND_BY_ISSUER_PARA_HAS_EXTRA_FIELDS .

Commenti

I membri pdwIssuerChainIndex e pdwIssuerElementIndex sono disponibili solo se la macro CERT_CHAIN_FIND_BY_ISSUER_PARA_HAS_EXTRA_FIELDS è definita. Se la macro CERT_CHAIN_FIND_BY_ISSUER_PARA_HAS_EXTRA_FIELDS è definita, l'applicazione deve inizializzare tutti i campi inutilizzati su zero.

Esempio

Lo pseudocode seguente illustra come usare i membri pdwIssuerChainIndex e pdwIssuerElementIndex di questa struttura per accedere al certificato dell'autorità emittente.

CERT_CHAIN_FIND_BY_ISSUER_PARA findParams;
PCCERT_CHAIN_CONTEXT pChainContext = NULL;
DWORD dwChainIndex = 0;
DWORD dwElementIndex = 0;
findParams.pdwIssuerChainIndex = &dwChainIndex;
findParams.pdwIssuerElementIndex = &dwElementIndex;

pChainContext = CertFindChainInStore(
    hCertStore,
    X509_ASN_ENCODING,
    0,
    CERT_CHAIN_FIND_BY_ISSUER,
    (LPVOID)&findParams,
    NULL);
if(pChainContext)
{
    // Make sure the element index is valid.
    if(dwElementIndex < pChainContext->
        rgpChain[dwChainIndex]->cElement)
    {
        PCERT_CHAIN_ELEMENT pIssuerElement;
        pIssuerElement = pChainContext->
            rgpChain[dwChainIndex]->rgpElement[dwElementIndex];
       // ...
    }

    // Free the certificate chain.
    CertFreeCertificateChain(pChainContext);
}

Requisiti

Requisito Valore
Client minimo supportato Windows XP [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Intestazione wincrypt.h

Vedi anche

CertChainFindByIssuerCallback

CertFindChainInStore

CryptAcquireCertificatePrivateKey