Verwalten eines zertifikats Store Zustands

Mehrere Funktionen stellen Dienste zum Verwalten eines Zertifikatspeicherzustands bereit.

Um Zugriff auf Zertifikate zu erhalten, muss der Zertifikatspeicher, in dem sie gespeichert sind, durch einen Aufruf von CertOpenStore oder CertOpenSystemStoregeöffnet werden.

In der Regel wird ein Zertifikatspeicher im zwischengespeicherten Speicher geöffnet. Es kann sich um einen neuen Speicher oder seinen Inhalt aus der lokalen Registrierung, der Registrierung auf einem Remotecomputer, einer Datenträgerdatei, einer PKCS # 7-Nachricht oder einer anderen Quelle befinden.

CryptoAPI-Zertifikatspeicherfunktionen ermöglichen es einem Speicher auch, Zertifikate außerhalb des zwischengespeicherten Speichers zu verwalten, z. B. in einer externen Datenbank mit Zertifikaten, z. B. der von der Microsoft Certificate Server-Datenbank bereitgestellten.

Einer der Parameter der CertOpenStore-Funktion lpszStoreProvider bestimmt den Typ des geöffneten Speichers und den Anbieter, der zum Öffnen dieses Speichers verwendet wird. Beispiele zum Öffnen von Zertifikatspeichern mit verschiedenen Anbietern finden Sie unter Beispiel-C-Code zum Öffnen von Zertifikatspeichern.

CertCloseStore schließt einen Zertifikatspeicher. Wenn ein Zertifikatspeicher geschlossen wird, wird der Verweiszähler für jeden Zertifikatkontext in diesem Speicher um 1 reduziert. Arbeitsspeicher wird für Zertifikate freigegeben, deren Verweisanzahl 0 (null) beträgt.

Wenn Sie das CERT _ CLOSE STORE FORCE FLAG mit _ _ _ CertCloseStore festlegen, wird der Zertifikatspeicher geschlossen, und der Arbeitsspeicher für alle Zertifikatkontexte wird unabhängig von derEn Verweisanzahl freigegeben. In einigen Fällen, z. B. in Multithreadprogrammen, kann dies nicht wünschenswert sein. Wenn CERT _ CLOSE STORE CHECK FLAG festgelegt _ _ _ ist, wird der Speicher geschlossen, aber von der Funktion wird ein Warnungswert zurückgegeben, wenn weiterhin Arbeitsspeicher für Zertifikate zugeordnet ist, deren Verweisanzahl nicht auf null reduziert wurde. Wenn der Verweiszähler eines Zertifikats größer als 0 (null) ist, wurde kein Duplikat dieses Zertifikatkontexts freigegeben. Verwenden Sie CertFreeCertificateContext, CertFreeCRLContextund CertFreeCTLContext, um alle geöffneten Zertifikate freizugeben.

Hinweis

Ein Zertifikatkontext ist eine Struktur vom Typ CERT _ CONTEXT, die unter anderem einen Zeiger auf das codierte Zertifikat-BLOB und einen Zeiger auf eine CERT _ INFO-Struktur enthält. Die CERT _ INFO-Struktur enthält die wichtigsten Zertifikatdaten. Weitere Informationen zu Zertifikat-, Zertifikatsperrlisten - und CTL-Kontextstrukturen (Certificate Trust List) finden Sie unter Codieren und Decodieren eines Zertifikatkontexts.

Jeder Zertifikatkontext enthält auch einen Verweiszähler, der die Anzahl der Kopien der zugewiesenen Adresse des Kontexts angibt. Jedes Mal, wenn ein Zertifikatkontext in irgendeiner Weise dupliziert wird, wird sein Verweiszähler um eins erhöht. Jedes Mal, wenn ein Zeiger auf einen Zertifikatkontext freigegeben wird, wird der Verweiszähler im Zertifikatkontext um eins dekrementiert. Wenn der Verweiszähler für einen Zertifikatkontext 0 (null) erreicht, wird der Arbeitsspeicher, in dem der Kontext gespeichert ist, nicht mehr zugeordnet. Der für einen Zertifikatkontext belegte Arbeitsspeicher wird ebenfalls nicht mehr zugeordnet, wenn sich dieser Kontext in einem Speicher befindet und der Speicher mithilfe von CERT CLOSE STORE FORCE FLAG geschlossen _ _ _ _ wird. Wenn der Arbeitsspeicher für einen Kontext nicht mehr zugeordnet ist und Zeiger auf diesen Kontext noch verwendet werden, sind diese Zeiger nicht mehr gültig.

CertDuplicateStore erhöht den Verweiszähler für den Speicher.

CertSaveStore speichert den Inhalt eines Speichers in einer Datenträgerdatei oder einem Speicherspeicherort und

CertControlStore verwaltet einen Speicher, während er geöffnet ist. Eine Anwendung mit einem geöffneten Speicher kann benachrichtigt werden, wenn sich der persistente Zustand dieses Speichers durch einen anderen Prozess geändert hat. Dies kann passieren, wenn neue Zertifikate von einem Computer mit Domänensteuerung in den lokalen Computerspeicher kopiert werden.

Wenn Änderungen erkannt werden, kann der zwischengespeicherte Speicher den zwischengespeicherten Speicher erneut synchronisieren, um mit dem persistenten Zustand des Speichers übereinzugleichen. CertControlStore unterstützt auch einen Prozess, bei dem zwischengespeicherte Speicheränderungen in den permanenten Speicher kopiert werden, wenn diese Änderungen im zwischengespeicherten Speicher nicht automatisch gespeichert werden.

Zertifikatspeicherähnliche Zertifikatkontexte können erweiterte Eigenschaften aufweisen. CertSetStoreProperty fügt einem Zertifikatspeicher erweiterte Eigenschaften hinzu. CertGetStoreProperty ruft alle Eigenschaften ab, die für einen Zertifikatspeicher festgelegt sind. Derzeit ist die einzige vordefinierte Zertifikatspeichereigenschaft der lokalisierte Name eines Speichers.