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 |
---|---|
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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.
[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 |
---|---|
|
Zertifikate |
|
CRLs |
|
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 |
---|---|
|
Wenn der dwAddDisposition-Parameter auf CERT_STORE_ADD_NEW festgelegt ist, ist das Zertifikat, die Zertifikatsperrliste oder die CTL bereits im Speicher vorhanden. |
|
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 |