structure CERT_CHAIN_FIND_ISSUER_PARA (wincrypt.h)

La structure CERT_CHAIN_FIND_BY_ISSUER_PARA contient des informations utilisées dans la fonction CertFindChainInStore pour générer des chaînes de certificats.

Syntaxe

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;

Membres

cbSize

Contient la taille de cette structure, en octets. Cette taille ne doit pas être codée en dur. Il doit être défini au moment de la compilation à l’aide de l’opérateur sizeof , comme illustré dans l’exemple suivant.

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

pszUsageIdentifier

Pointeur vers une chaîne ANSI terminée par null qui contient l’identificateur d’utilisation à mettre en correspondance. Si ce membre a la valeur NULL, un certificat avec n’importe quelle utilisation peut être une correspondance.

dwKeySpec

Contient la valeur de spécification de clé à mettre en correspondance. Il peut s’agir de l’une des valeurs suivantes. Si ce paramètre est égal à zéro, n’importe quel certificat peut correspondre.

Valeur Signification
AT_KEYEXCHANGE
0x01
La clé peut être utilisée pour chiffrer ou signer en fonction de l’algorithme.
AT_SIGNATURE
0x02
La clé peut être utilisée pour la signature.

dwAcquirePrivateKeyFlags

Lorsque le paramètre dwFindFlags de la fonction CertFindChainInStore contient CERT_CHAIN_FIND_BY_ISSUER_COMPARE_KEY_FLAG, la fonction CryptAcquireCertificatePrivateKey est appelée pour effectuer la comparaison de clé publique. Dans ce cas, ce membre est passé en tant que paramètre dwFlags de la fonction CryptAcquireCertificatePrivateKey . Pour connaître les valeurs possibles pour ce membre et leurs significations, consultez le paramètre dwFlags de la fonction CryptAcquireCertificatePrivateKey .

cIssuer

Contient le nombre d’éléments dans le tableau rgIssuer . Si ce membre est égal à zéro, n’importe quel émetteur peut être une correspondance.

rgIssuer

Tableau de blobs encodés de nom d’émetteur X.509, Abstract Syntax Notation One (ASN.1) à mettre en correspondance. Si ce membre a la valeur NULL ou si la fonction de rappel retourne TRUE, un nouvel élément est ajouté à la chaîne pour le certificat disposant d’une clé privée avec le KeySpec spécifié et l’utilisation améliorée de la clé.

pfnFindCallback

Pointeur vers une fonction de rappel CertChainFindByIssuerCallback qui permet à l’application de filtrer les certificats pour ant des chaînes créées. Si ce membre a la valeur NULL, une chaîne est créée pour chaque certificat trouvé. Si ce membre n’est pas NULL, une chaîne est créée pour le certificat trouvé en fonction de la valeur de retour de la fonction de rappel.

pvFindArg

Valeur définie par l’application qui sera passée en tant que paramètre pvFindArg de la fonction de rappel CertChainFindByIssuerCallback pointée par le membre pfnFindCallback de cette structure.

pdwIssuerChainIndex

Pointeur vers une valeur DWORD qui reçoit l’index de base zéro de la chaîne qui correspond à l’émetteur. Si ce membre a la valeur NULL, il n’est pas utilisé.

Si cIssuer est égal à zéro, ce membre n’est pas utilisé.

Ce membre est défini uniquement si la macro CERT_CHAIN_FIND_BY_ISSUER_PARA_HAS_EXTRA_FIELDS est définie.

pdwIssuerElementIndex

Pointeur vers une valeur DWORD qui reçoit l’index de base zéro de l’élément dans la chaîne du certificat de l’émetteur. Si ce membre a la valeur NULL, il n’est pas utilisé.

Si cIssuer est égal à zéro, ce membre n’est pas utilisé.

Ce membre est défini sur l’index du certificat trouvé plus un pour fournir l’index du certificat de l’émetteur. Pour cette raison, une chaîne partielle ou un certificat auto-signé qui correspond au nom BLOB peut faire pointer pdwIssuerElementIndex au-delà du dernier certificat de la chaîne. Cette situation peut être détectée en comparant le contenu de pdwIssuerElementIndex avec le membre cElement de la structure CERT_SIMPLE_CHAIN pour vous assurer que l’index est valide.

Ce membre est défini uniquement si la macro CERT_CHAIN_FIND_BY_ISSUER_PARA_HAS_EXTRA_FIELDS est définie.

Remarques

Les membres pdwIssuerChainIndex et pdwIssuerElementIndex ne sont disponibles que si la macro CERT_CHAIN_FIND_BY_ISSUER_PARA_HAS_EXTRA_FIELDS est définie. Si la macro CERT_CHAIN_FIND_BY_ISSUER_PARA_HAS_EXTRA_FIELDS est définie, l’application doit initialiser tous les champs inutilisés à zéro.

Exemples

Le pseudocode suivant montre comment utiliser les membres pdwIssuerChainIndex et pdwIssuerElementIndex de cette structure pour accéder au certificat de l’émetteur.

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);
}

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
En-tête wincrypt.h

Voir aussi

CertChainFindByIssuerCallback

CertFindChainInStore

CryptAcquireCertificatePrivateKey