Freigeben über


CertAddSerializedElementToStore-Funktion (wincrypt.h)

Die CertAddSerializedElementToStore-Funktion fügt dem Speicher ein serialisiertes Zertifikat, eine Zertifikatsperrliste (Certificate Revocation List , CRL) oder ein CTL-Element (Certificate Trust List ) hinzu. Das serialisierte Element enthält das codierte Zertifikat, die Zertifikatsperrliste oder die CTL und die zugehörigen erweiterten Eigenschaften. Erweiterte Eigenschaften sind einem Zertifikat zugeordnet und nicht Teil eines Zertifikats, wie es von einer Zertifizierungsstelle ausgestellt wurde. Erweiterte Eigenschaften sind für ein Zertifikat nicht verfügbar, wenn sie auf einer Nicht-Microsoft-Plattform verwendet werden.

Syntax

BOOL CertAddSerializedElementToStore(
  [in]  HCERTSTORE hCertStore,
  [in]  const BYTE *pbElement,
  [in]  DWORD      cbElement,
  [in]  DWORD      dwAddDisposition,
  [in]  DWORD      dwFlags,
  [in]  DWORD      dwContextTypeFlags,
  [out] DWORD      *pdwContextType,
  [out] const void **ppvContext
);

Parameter

[in] hCertStore

Das Handle eines Zertifikatspeichers , in dem das erstellte Zertifikat gespeichert wird. Wenn hCertStoreNULL ist, erstellt die Funktion eine Kopie eines Zertifikat-, Zertifikatsperrlisten- oder CTL-Kontexts mit den erweiterten Eigenschaften, aber das Zertifikat, die Zertifikatsperrliste oder die CTL wird in keinem Speicher beibehalten.

[in] pbElement

Ein Zeiger auf einen Puffer, der die Zertifikat-, Zertifikatsperrlisten- oder CTL-Informationen enthält, die serialisiert und dem Zertifikatspeicher hinzugefügt werden sollen.

[in] cbElement

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

[in] dwAddDisposition

Gibt die Aktion an, die ausgeführt werden soll, wenn das Zertifikat, die Zertifikatsperrliste oder die CTL bereits im Speicher vorhanden ist. Die derzeit definierten Dispositionswerte sind in der folgenden Tabelle dargestellt.

Wert Bedeutung
CERT_STORE_ADD_NEW
Wenn das Zertifikat, die Zertifikatsperrliste oder die CTL neu ist, wird es erstellt und im Speicher beibehalten. Der Vorgang schlägt fehl, wenn im Speicher bereits ein identisches Zertifikat, eine identische Zertifikatsperrliste oder eine identische Zertifikatsperrliste vorhanden ist. Der letzte Fehlercode ist auf CRYPT_E_EXISTS festgelegt.
CERT_STORE_ADD_USE_EXISTING
Wenn das Zertifikat, die Zertifikatsperrliste oder die CTL neu ist, wird es dem Speicher hinzugefügt. Wenn bereits ein identisches Zertifikat, eine CRL oder eine CTL vorhanden ist, wird das vorhandene Element verwendet. Wenn ppvContext nicht NULL ist, wird der vorhandene Kontext dupliziert. Die Funktion fügt nur Eigenschaften hinzu, die noch nicht vorhanden sind. Die Hasheigenschaften SHA-1 und MD5 werden nicht kopiert.
CERT_STORE_ADD_REPLACE_EXISTING
Wenn bereits ein identisches Zertifikat, eine zertifikatsperrliste oder eine CTL im Speicher vorhanden ist, wird der vorhandene Zertifikat-, Zertifikatsperrlisten- oder CTL-Kontext vor dem Erstellen und Hinzufügen des neuen Kontexts gelöscht.
CERT_STORE_ADD_ALWAYS
Es wird nicht überprüft, ob bereits ein identisches Zertifikat, eine Zertifikatsperrliste oder eine CTL vorhanden ist. Es wird immer ein neues Element erstellt. Dies kann zu Duplikaten im Store führen. Um zu ermitteln, ob das Element bereits im Speicher vorhanden ist, rufen Sie CertGetCRLFromStore oder CertGetSubjectCertificateFromStore auf.
CERT_STORE_ADD_NEWER
Wenn eine übereinstimmende Zertifikatsperrliste oder CTL oder ein Link zu einer übereinstimmenden Zertifikatsperrliste oder CTL vorhanden ist, vergleicht die Funktion die NotBefore-Zeiten für die Zertifikatsperrliste oder die CTL. Wenn die vorhandene CRL oder CTL eine NotBefore-Zeit unter der NotBefore-Zeit für das neue Element aufweist, wird das alte Element oder der alte Link genauso wie durch CERT_STORE_ADD_REPLACE_EXISTING ersetzt. Wenn das vorhandene Element eine NotBefore-Zeit hat, die größer als oder gleich der NotBefore-Zeit für das hinzuzufügende Element ist, schlägt die Funktion fehl, da GetLastError den CRYPT_E_EXISTS Code zurückgibt.

Wenn eine übereinstimmende Zertifikatsperrliste oder CTL oder ein Link zu einer übereinstimmenden Zertifikatsperrliste oder CTL nicht im Speicher gefunden wird, wird dem Speicher ein neues Element hinzugefügt.

CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES
Die Aktion ist identisch mit CERT_STORE_ADD_NEWER. Wenn jedoch eine ältere Zertifikatsperrliste oder CTL ersetzt wird, werden die Eigenschaften des älteren Elements in die Ersetzung integriert.
CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES
Wenn ein übereinstimmende Zertifikat im Speicher vorhanden ist, wird der vorhandene Kontext vor dem Erstellen und Hinzufügen des neuen Kontexts gelöscht. Der neue hinzugefügte Kontext erbt Eigenschaften vom vorhandenen Zertifikat.

[in] dwFlags

Für die zukünftige Verwendung reserviert und muss null sein.

[in] dwContextTypeFlags

Gibt die Kontexte an, die hinzugefügt werden können. Um beispielsweise ein Zertifikat, eine Zertifikatsperrliste oder eine CTL hinzuzufügen, legen Sie dwContextTypeFlags auf CERT_STORE_CERTIFICATE_CONTEXT_FLAG oder CERT_STORE_CRL_CONTEXT_FLAG fest.

Derzeit definierte Kontexttypflags werden in der folgenden Tabelle angezeigt.

Wert Bedeutung
CERT_STORE_ALL_CONTEXT_FLAG
Fügt einen beliebigen Kontext hinzu.
CERT_STORE_CERTIFICATE_CONTEXT_FLAG
Fügt nur einen Zertifikatkontext hinzu.
CERT_STORE_CRL_CONTEXT_FLAG
Fügt nur einen CRL-Kontext hinzu.
CERT_STORE_CTL_CONTEXT_FLAG
Fügt nur einen CTL-Kontext hinzu.

[out] pdwContextType

Ein Zeiger auf den Kontexttyp des hinzugefügten serialisierten Elements. Dies ist ein optionaler Parameter und kann NULL sein, was angibt, dass die aufrufende Anwendung den Kontexttyp nicht erfordert.

Die derzeit definierten Kontexttypen werden in der folgenden Tabelle dargestellt.

Wert Bedeutung
CERT_STORE_CERTIFICATE_CONTEXT
Zertifikate
CERT_STORE_CRL_CONTEXT
CRLs
CERT_STORE_CTL_CONTEXT
CTLs

[out] ppvContext

Ein Zeiger auf einen Zeiger auf den decodierten Zertifikat-, Sperrlisten- oder CTL-Kontext. Dies ist ein optionaler Parameter und kann NULL sein, was angibt, dass die aufrufende Anwendung nicht den Kontext des hinzugefügten oder vorhandenen Zertifikats, der Zertifikatsperrliste oder der CTL erfordert.

Wenn ppvContext nicht NULL ist, muss es sich um die Adresse eines Zeigers auf einen CERT_CONTEXT, CRL_CONTEXT oder CTL_CONTEXT handeln. Wenn die Anwendung mit dem Kontext abgeschlossen ist, muss der Kontext mithilfe von CertFreeCertificateContext für ein Zertifikat, CertFreeCRLContext für eine CRL oder CertFreeCTLContext für eine CTL freigegeben werden.

Rückgabewert

Wenn die Funktion erfolgreich ist, gibt die Funktion nonzero zurück.

Wenn die Funktion fehlschlägt, gibt sie null zurück. Rufen Sie GetLastError auf, um erweiterte Fehlerinformationen zu erhalten. Es folgen einige mögliche Fehlercodes.

Rückgabecode Beschreibung
CRYPT_E_EXISTS
Wenn der dwAddDisposition-Parameter auf CERT_STORE_ADD_NEW festgelegt ist, ist das Zertifikat, die Zertifikatsperrliste oder die CTL bereits im Speicher vorhanden.
E_INVALIDARG
Im dwAddDisposition-Parameter wurde ein ungültiger Dispositionswert angegeben.
 

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 Encoding/Decoding Return Values.

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

CertSerializeCRLStoreElement

CertSerializeCertificateStoreElement

Wartungsfunktionen für Zertifikat- und Zertifikatspeicher