Freigeben über


Verwalten eines Zertifikatspeicherstatus

Mehrere Funktionen stellen Dienste zum Verwalten eines Zertifikatspeicher-Status bereit.

Um Zugriff auf Zertifikate zu erhalten, muss der Zertifikatspeicher, in dem sie gespeichert werden, über einen Aufruf von CertOpenStore oder CertOpenSystemStore geöffnet werden.

Normalerweise wird ein Zertifikatspeicher im zwischengespeicherten Speicher geöffnet. Es kann ein neuer Speicher sein oder sein Inhalt kann aus der lokalen Registrierung, der Registrierung auf einem Remote-Computer, einer Datenträgerdatei, einer PKCS #7-Nachricht oder einer anderen Quelle geladen werden.

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

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 C-Beispielcode zum Öffnen von Zertifikatspeichern.

CertCloseStore schließt einen Zertifikatspeicher. Wenn ein Zertifikatspeicher geschlossen wird, wird die Anzahl der Referenzen für jeden der Zertifikatskontexte in diesem Speicher um eins reduziert. Der Speicher wird für Zertifikate freigegeben, deren Referenzanzahl auf Null gesetzt wird.

Das Festlegen von CERT_CLOSE_STORE_FORCE_FLAG mit CertCloseStore schließt den Zertifikatspeicher und gibt Arbeitsspeicher für alle Zertifikatkontexte frei, unabhängig von ihrer Referenzanzahl. 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 ein Warnwert wird von der Funktion zurückgegeben, wenn der Speicher noch für Zertifikate zugewiesen ist, deren Referenzanzahl nicht auf Null reduziert wurde. Wenn die Referenzanzahl eines Zertifikats größer als 0 ist, wurde kein Duplikat dieses Zertifikatkontexts freigegeben. Verwenden Sie CertFreeCertificateContext, CertFreeCRLContext und CertFreeCTLContext, um alle offenen Zertifikate freizugeben.

Hinweis

Ein Zertifikatkontext ist eine Struktur vom Typ CERT_CONTEXT, die, unter anderen Mitgliedern, 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 den Kontextstrukturen Zertifikat, Zertifikatsperrliste (Certificate Revocation List, CRL) und Zertifikatvertrauensliste (Certificate Trust List, CTL) finden Sie unter Codieren und Decodieren eines Zertifikatkontexts.

Jeder Zertifikatkontext enthält auch eine Referenzanzahl, die die Anzahl der zugewiesenen Kopien der Adresse des Kontextes angibt. Jedes Mal, wenn ein Zertifikatkontext auf irgendeine Weise dupliziert wird, wird die Referenzanzahl um eins erhöht. Jedes Mal, wenn ein Zeiger auf einen Zertifikatkontext freigegeben wird, wird die Referenzanzahl im Zertifikatkontext um eins erhöht. Wenn die Referenzanzahl für einen Zertifikatkontext null erreicht, wird die Zuordnung des Speichers, der den Kontext enthält, aufgehoben. Die Zuordnung von Speicher für einen Zertifikatkontext wird auch aufgehoben, wenn sich dieser Kontext in einem Speicher befindet und der Speicher mit CERT_CLOSE_STORE_FORCE_FLAG geschlossen wird. Wenn die Zuordnung des Speichers für einen Kontext aufgehoben wird und Zeiger für diesen Kontext weiterhin verwendet werden, sind diese Zeiger nicht mehr gültig.

 

CertDuplicateStore erhöht die Referenzanzahl im Speicher.

CertSaveStore speichert den Inhalt eines Speichers in einer Datenträgerdatei oder einem Speicher-Speicherort 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 Domänencontroller-Computer in den lokalen Computerspeicher kopiert wurden.

Wenn Änderungen erkannt werden, kann der zwischengespeicherte Speicher seinen zwischengespeicherten Speicher erneut synchronisieren, um dem persistenten Zustand des Speichers zu entsprechen. CertControlStore unterstützt auch einen Prozess, der zwischengespeicherte Speicheränderungen in den permanenten Speicher kopiert, 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 in einem Zertifikatspeicher festgelegt sind. Derzeit ist die einzige vordefinierte Zertifikatspeichereigenschaft der lokalisierte Name eines Speichers.