CertAddCertificateContextToStore-Funktion (wincrypt.h)
Die CertAddCertificateContextToStore-Funktion fügt dem Zertifikatspeicher einen Zertifikatkontext hinzu.
Syntax
BOOL CertAddCertificateContextToStore(
[in] HCERTSTORE hCertStore,
[in] PCCERT_CONTEXT pCertContext,
[in] DWORD dwAddDisposition,
[out, optional] PCCERT_CONTEXT *ppStoreContext
);
Parameter
[in] hCertStore
Handle eines Zertifikatspeichers.
[in] pCertContext
Ein Zeiger auf die CERT_CONTEXT Struktur, die dem Speicher hinzugefügt werden soll.
[in] dwAddDisposition
Gibt die Aktion an, die ausgeführt werden soll, wenn bereits ein übereinstimmende Zertifikat oder ein Link zu einem übereinstimmenden Zertifikat im Speicher vorhanden ist. Derzeit definierte Dispositionswerte und ihre Verwendungen sind wie folgt.
Wert | Bedeutung |
---|---|
|
Die Funktion überprüft weder ein vorhandenes übereinstimmende Zertifikat noch einen Link zu einem übereinstimmenden Zertifikat. Dem Speicher wird immer ein neues Zertifikat hinzugefügt. Dies kann zu Duplikaten in einem Store führen. |
|
Wenn ein übereinstimmende Zertifikat oder ein Link zu einem übereinstimmenden Zertifikat vorhanden ist, schlägt der Vorgang fehl. GetLastError gibt den CRYPT_E_EXISTS-Code zurück. |
|
Wenn ein übereinstimmende Zertifikat oder ein Link zu einem übereinstimmenden Zertifikat vorhanden ist und die NotBefore-Zeit des vorhandenen Kontexts gleich oder größer ist als die NotBefore-Zeit des hinzugefügten neuen Kontexts, schlägt der Vorgang fehl, und GetLastError gibt den CRYPT_E_EXISTS Code zurück.
Wenn die NotBefore-Zeit des vorhandenen Kontexts kleiner als die NotBefore-Zeit des hinzugefügten neuen Kontexts ist, wird das vorhandene Zertifikat oder der vorhandene Link gelöscht, und ein neues Zertifikat wird erstellt und dem Speicher hinzugefügt. Wenn kein übereinstimmende Zertifikat oder ein Link zu einem übereinstimmenden Zertifikat vorhanden ist, wird ein neuer Link hinzugefügt. Wenn Zertifikatsperrlisten (Certificate Revocation Lists , CRLs) oder Certificate Trust List (CTLs) verglichen werden, wird die ThisUpdate-Zeit verwendet. |
|
Wenn ein übereinstimmende Zertifikat oder ein Link zu einem übereinstimmenden Zertifikat vorhanden ist und die NotBefore-Zeit des vorhandenen Kontexts gleich oder größer ist als die NotBefore-Zeit des hinzugefügten neuen Kontexts, schlägt der Vorgang fehl, und GetLastError gibt den CRYPT_E_EXISTS Code zurück.
Wenn die NotBefore-Zeit des vorhandenen Kontexts kleiner ist als die NotBefore-Zeit des hinzugefügten neuen Kontexts, 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. Wenn CRLs oder CTLs verglichen werden, wird die ThisUpdate-Zeit verwendet. |
|
Wenn ein Link zu einem übereinstimmenden Zertifikat vorhanden ist, wird das vorhandene Zertifikat oder der link gelöscht, und ein neues Zertifikat wird erstellt und dem Speicher hinzugefügt. Wenn kein übereinstimmende Zertifikat oder ein Link zu einem übereinstimmenden Zertifikat vorhanden ist, wird ein neuer Link hinzugefügt. |
|
Wenn im Speicher ein übereinstimmende Zertifikat vorhanden ist, wird der vorhandene Kontext nicht ersetzt. Der vorhandene Kontext erbt Eigenschaften vom neuen Zertifikat. |
|
Wenn ein übereinstimmende Zertifikat oder ein Link zu einem übereinstimmenden Zertifikat vorhanden ist, wird dieses vorhandene Zertifikat oder link verwendet, und Eigenschaften aus dem neuen Zertifikat werden hinzugefügt. Die Funktion schlägt nicht fehl, fügt aber keinen neuen Kontext hinzu. Wenn pCertContext nicht NULL ist, wird der vorhandene Kontext dupliziert.
Wenn kein übereinstimmende Zertifikat oder ein Link zu einem übereinstimmenden Zertifikat vorhanden ist, wird ein neues Zertifikat hinzugefügt. |
[out, optional] ppStoreContext
Ein Zeiger auf einen Zeiger auf die Kopie des Zertifikats, das dem Speicher hinzugefügt wurde.
Der ppStoreContext-Parameter kann NULL sein, was angibt, dass die aufrufende Anwendung keine Kopie des hinzugefügten Zertifikats erfordert. Wenn eine Kopie erstellt wird, muss sie mithilfe von CertFreeCertificateContext 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 |
---|---|
|
Dieser Wert wird zurückgegeben, wenn CERT_STORE_ADD_NEW festgelegt ist und das Zertifikat bereits im Speicher vorhanden ist, oder wenn CERT_STORE_ADD_NEWER festgelegt ist und ein Zertifikat im Speicher mit einem NotBefore-Datum vorhanden ist, das größer oder gleich dem NotBefore-Datum für das hinzuzufügende Zertifikat ist. |
|
Im dwAddDisposition-Parameter wurde ein ungültiger Dispositionswert angegeben. |
Fehler aus den aufgerufenen Funktionen CertAddEncodedCertificateToStore und CertSetCertificateContextProperty können an diese Funktion weitergegeben werden.
Hinweise
Der Zertifikatkontext wird nicht mit CertDuplicateCertificateContext dupliziert. Stattdessen erstellt die Funktion eine neue Kopie des Kontexts und fügt sie dem Speicher hinzu.
Zusätzlich zum codierten Zertifikat kopiert CertDuplicateCertificateContext auch die Eigenschaften des Kontexts, mit Ausnahme der Eigenschaften CERT_KEY_PROV_HANDLE_PROP_ID und CERT_KEY_CONTEXT_PROP_ID.
Um den Zertifikatkontext aus dem Zertifikatspeicher zu entfernen, verwenden Sie die CertDeleteCertificateFromStore-Funktion .
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
CertAddEncodedCertificateToStore