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 |
---|---|
|
Der Schlüssel kann je nach Algorithmus zum Verschlüsseln oder Signieren verwendet werden. |
|
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 |