CertAddEncodedCTLToStore-Funktion (wincrypt.h)

Die CertAddEncodedCTLToStore-Funktion erstellt einen Zertifikatvertrauenslistenkontext (Certificate Trust List, CTL) aus einer codierten CTL und fügt ihn dem Zertifikatspeicher hinzu. Die Funktion erstellt eine Kopie des CTL-Kontexts, bevor sie dem Speicher hinzugefügt wird.

Syntax

BOOL CertAddEncodedCTLToStore(
  [in]            HCERTSTORE    hCertStore,
  [in]            DWORD         dwMsgAndCertEncodingType,
  [in]            const BYTE    *pbCtlEncoded,
  [in]            DWORD         cbCtlEncoded,
  [in]            DWORD         dwAddDisposition,
  [out, optional] PCCTL_CONTEXT *ppCtlContext
);

Parameter

[in] hCertStore

Handle eines Zertifikatspeichers.

[in] dwMsgAndCertEncodingType

Gibt den verwendeten Codierungstyp an. Sowohl der Zertifikat- als auch der Nachrichtencodierungstyp müssen angegeben werden, indem sie mit einem bitweisen OR-Vorgang kombiniert werden, wie im folgenden Beispiel gezeigt:

X509_ASN_ENCODING | PKCS_7_ASN_ENCODING

Derzeit definierte Codierungstypen sind:

  • X509_ASN_ENCODING
  • PKCS_7_ASN_ENCODING

[in] pbCtlEncoded

Ein Zeiger auf einen Puffer, der die codierte CTL enthält, die dem Zertifikatspeicher hinzugefügt werden soll.

[in] cbCtlEncoded

Die Größe des pbCtlEncoded-Puffers in Bytes.

[in] dwAddDisposition

Gibt die Aktion an, die ausgeführt werden soll, wenn eine übereinstimmende CTL oder ein Link zu einer übereinstimmenden CTL bereits im Speicher vorhanden ist. Derzeit definierte Dispositionswerte und deren Verwendungen sind wie folgt:

Wert Bedeutung
CERT_STORE_ADD_ALWAYS
Führt keine Überprüfung auf eine vorhandene übereinstimmende CTL oder einen Link zu einer übereinstimmenden CTL durch. Dem Store wird immer eine neue CTL hinzugefügt. Dies kann zu Duplikaten in einem Speicher führen.
CERT_STORE_ADD_NEW
Wenn eine übereinstimmende CTL oder ein Link zu einer übereinstimmenden CTL vorhanden ist, schlägt der Vorgang fehl. GetLastError gibt den CRYPT_E_EXISTS Code zurück.
CERT_STORE_ADD_NEWER
Wenn eine übereinstimmende CTL oder ein Link zu einer übereinstimmenden CTL vorhanden ist, werden die ThisUpdate-Zeiten für die CTLs verglichen. Wenn die vorhandene CTL eine ThisUpdate-Zeit hat, die kleiner ist als die ThisUpdate-Zeit in der neuen CTL, wird die alte CTL oder der alte Link wie durch CERT_STORE_ADD_REPLACE_EXISTING ersetzt. Wenn die vorhandene CTL eine ThisUpdate-Zeit hat, die größer oder gleich der ThisUpdate-Zeit für die hinzuzufügende CTL ist, schlägt die Funktion fehl, da GetLastError den CRYPT_E_EXISTS Code zurückgibt.

Wenn eine übereinstimmende CTL oder ein Link zu einer übereinstimmenden CTL nicht im Store gefunden wird, wird dem Store eine neue CTL hinzugefügt.

CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES
Die Aktion ist die gleiche wie bei CERT_STORE_ADD_NEWER. Wenn eine ältere CTL ersetzt wird, werden die Eigenschaften der älteren CTL in die Ersatz-CTL integriert.
CERT_STORE_ADD_REPLACE_EXISTING
Wenn eine übereinstimmende CTL oder ein Link zu einer übereinstimmenden CTL vorhanden ist, wird die vorhandene CTL oder der Link gelöscht, und eine neue CTL wird erstellt und dem Speicher hinzugefügt. Wenn eine übereinstimmende CTL oder ein Link zu einer übereinstimmenden CTL nicht vorhanden ist, wird eine hinzugefügt.
CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES
Wenn eine übereinstimmende CTL im Speicher vorhanden ist, wird dieser vorhandene Kontext gelöscht, bevor der neue Kontext erstellt und hinzugefügt wird. Der hinzugefügte Kontext erbt Eigenschaften von der vorhandenen CTL.
CERT_STORE_ADD_USE_EXISTING
Wenn eine übereinstimmende CTL oder ein Link zu einer übereinstimmenden CTL vorhanden ist, wird diese vorhandene CTL verwendet, und Eigenschaften aus der neuen CTL werden hinzugefügt. Die Funktion schlägt nicht fehl, aber es wird keine neue CTL hinzugefügt. Wenn ppCertContext nicht NULL ist, wird der vorhandene Kontext dupliziert.

Wenn keine übereinstimmende CTL oder ein Link zu einer übereinstimmenden CTL vorhanden ist, wird eine neue CTL hinzugefügt.

[out, optional] ppCtlContext

Ein Zeiger auf einen Zeiger auf die decodierte CTL_CONTEXT-Struktur . Kann NULL sein, was angibt, dass die aufrufende Anwendung keine Kopie der hinzugefügten oder vorhandenen CTL erfordert. Wenn eine Kopie erstellt wird, muss sie mithilfe von CertFreeCTLContext freigegeben werden.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert TRUE.

Wenn die Funktion fehlschlägt, ist der Rückgabewert FALSE. Rufen Sie GetLastError auf, um erweiterte Fehlerinformationen zu erhalten.

Es folgen einige mögliche Fehlercodes.

Rückgabecode Beschreibung
CRYPT_E_EXISTS
CERT_STORE_ADD_NEW festgelegt ist und die CTL bereits im Store vorhanden ist; oder CERT_STORE_ADD_NEWER festgelegt ist und eine CTL im Speicher vorhanden ist, deren ThisUpdate-Zeit größer oder gleich der ThisUpdate-Zeit für die hinzuzufügende CTL ist.
E_INVALIDARG
Im dwAddDisposition-Parameter wurde ein ungültiger Dispositionswert angegeben, oder es wurde ein ungültiger Codierungstyp angegeben. Derzeit werden nur die Codierungstypen X509_ASN_ENCODING und PKCS_7_ASN_ENCODING unterstützt.
 

Wenn die Funktion fehlschlägt, gibt GetLastError möglicherweise einen ASN.1-Codierungs-/Decodierungsfehler ( Abstract Syntax Notation One ) zurück. Informationen zu diesen Fehlern finden Sie unter ASN.1-Rückgabewerte für Codierung/Decodierung.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile wincrypt.h
Bibliothek Crypt32.lib
DLL Crypt32.dll

Weitere Informationen

CertAddCTLContextToStore

CertFreeCTLContext

Listenfunktionen für Zertifikatvertrauensstellungen