CERT_CHAIN_FIND_ISSUER_PARA Struktur (wincrypt.h)

Die CERT_CHAIN_FIND_BY_ISSUER_PARA-Struktur enthält Informationen, die in der CertFindChainInStore-Funktion zum Erstellen von Zertifikatketten verwendet werden.

Syntax

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;

Member

cbSize

Enthält die Größe dieser Struktur in Bytes. Diese Größe sollte nicht hartcodiert sein. Sie sollte zur Kompilierzeit mit dem Operator sizeof festgelegt werden, wie im folgenden Beispiel gezeigt.

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

pszUsageIdentifier

Ein Zeiger auf eine NULL-beendete ANSI-Zeichenfolge, die den zu übereinstimmenden Verwendungsbezeichner enthält. Wenn dieses Element NULL ist, kann ein Zertifikat mit einer beliebigen Verwendung eine Übereinstimmung sein.

dwKeySpec

Enthält den Schlüsselspezifikationswert, der abgeglichen werden soll. Dies kann einer der folgenden Werte sein. Wenn dieser Parameter 0 ist, kann jedes Zertifikat übereinstimmen.

Wert Bedeutung
AT_KEYEXCHANGE
0x01
Der Schlüssel kann je nach Algorithmus zum Verschlüsseln oder Signieren verwendet werden.
AT_SIGNATURE
0x02
Der Schlüssel kann zum Signieren verwendet werden.

dwAcquirePrivateKeyFlags

Wenn der dwFindFlags-Parameter der CertFindChainInStore-FunktionCERT_CHAIN_FIND_BY_ISSUER_COMPARE_KEY_FLAG enthält, wird die CryptAcquireCertificatePrivateKey-Funktion aufgerufen, um den Vergleich mit öffentlichen Schlüsseln durchzuführen. In diesem Fall wird dieses Element als dwFlags-Parameter der CryptAcquireCertificatePrivateKey-Funktion übergeben. Mögliche Werte für dieses Element und ihre Bedeutungen finden Sie im dwFlags-Parameter der CryptAcquireCertificatePrivateKey-Funktion .

cIssuer

Enthält die Anzahl der Elemente im rgIssuer-Array . Wenn dieser Member 0 ist, kann jeder Aussteller eine Übereinstimmung sein.

rgIssuer

Ein Array aus X.509, Abstrakte Syntax Notation 1 (ASN.1) codierten Ausstellernamen BLOBs , die übereinstimmen. Wenn dieses Element NULL ist oder die Rückruffunktion TRUE zurückgibt, wird der Kette für das Zertifikat ein neues Element hinzugefügt, das einen privaten Schlüssel mit dem angegebenen KeySpec und der erweiterten Schlüsselverwendung aufweist.

pfnFindCallback

Ein Zeiger auf eine CertChainFindByIssuerCallback-Rückruffunktion , mit der die Anwendung die Zertifikate filtern kann, für die Ketten erstellt werden. Wenn dieses Element NULL ist, wird für jedes gefundene Zertifikat eine Kette erstellt. Wenn dieses Element nicht NULL ist, wird eine Kette für das Zertifikat erstellt, das auf dem Rückgabewert der Rückruffunktion basiert.

pvFindArg

Ein anwendungsdefinierter Wert, der als pvFindArg-Parameter der CertChainFindByIssuerCallback-Rückruffunktion übergeben wird, auf die vom pfnFindCallback-Member dieser Struktur verwiesen wird.

pdwIssuerChainIndex

Ein Zeiger auf einen DWORD-Wert , der den nullbasierten Index der Kette empfängt, der dem Aussteller entspricht. Wenn dieser Member NULL ist, wird es nicht verwendet.

Wenn cIssuer null ist, wird dieser Member nicht verwendet.

Dieses Element wird nur definiert, wenn das CERT_CHAIN_FIND_BY_ISSUER_PARA_HAS_EXTRA_FIELDS Makros definiert ist.

pdwIssuerElementIndex

Ein Zeiger auf einen DWORD-Wert , der den nullbasierten Index des Elements in der Kette des Zertifikats des Ausstellers empfängt. Wenn dieser Member NULL ist, wird es nicht verwendet.

Wenn cIssuer null ist, wird dieser Member nicht verwendet.

Dieses Element wird auf den Index des gefundenen Zertifikats plus einen festgelegt, um den Index des Zertifikats des Ausstellers bereitzustellen. Aus diesem Grund kann eine partielle Kette oder ein selbstsigniertes Zertifikat, das dem Namen BLOB entspricht, dazu führen, dass pdwIssuerElementIndex über das letzte Zertifikat in der Kette hinaus zeigt. Diese Situation kann erkannt werden, indem der Inhalt von pdwIssuerElementIndex mit dem cElement-Element der CERT_SIMPLE_CHAIN-Struktur verglichen wird, um sicherzustellen, dass der Index gültig ist.

Dieses Element wird nur definiert, wenn das CERT_CHAIN_FIND_BY_ISSUER_PARA_HAS_EXTRA_FIELDS Makros definiert ist.

Hinweise

Die Member pdwIssuerChainIndex und pdwIssuerElementIndex sind nur verfügbar, wenn das makro CERT_CHAIN_FIND_BY_ISSUER_PARA_HAS_EXTRA_FIELDS definiert ist. Wenn das CERT_CHAIN_FIND_BY_ISSUER_PARA_HAS_EXTRA_FIELDS Makros definiert ist, muss die Anwendung alle nicht verwendeten Felder auf Null initialisieren.

Beispiele

Der folgende Pseudocode zeigt, wie sie die Member pdwIssuerChainIndex und pdwIssuerElementIndex dieser Struktur verwenden, um auf das Zertifikat des Ausstellers zuzugreifen.

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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Kopfzeile wincrypt.h

Weitere Informationen

CertChainFindByIssuerCallback

CertFindChainInStore

CryptAcquireCertificatePrivateKey