CertCloseStore-Funktion (wincrypt.h)

Die CertCloseStore-Funktion schließt ein Zertifikatspeicherhandle und reduziert die Verweisanzahl im Speicher. Für jeden erfolgreichen Aufruf der Funktionen CertOpenStore oder CertDuplicateStore muss ein entsprechender Aufruf von CertCloseStore vorhanden sein.

Syntax

BOOL CertCloseStore(
  [in] HCERTSTORE hCertStore,
  [in] DWORD      dwFlags
);

Parameter

[in] hCertStore

Handle des zu schließenden Zertifikatspeichers.

[in] dwFlags

In der Regel verwendet dieser Parameter den Standardwert 0. Die Standardeinstellung besteht darin, den Speicher zu schließen, wobei Arbeitsspeicher für nicht freigegebene Kontexte reserviert bleibt. In diesem Fall wird nicht überprüft, ob Arbeitsspeicher für Kontexte zugewiesen bleibt.

Festlegen von Flags können die Freigabe des Arbeitsspeichers für alle Kontexte des Zertifikats, der Zertifikatsperrliste (Certificate Revocation List , CRL) und der Zertifikatvertrauensliste (Certificate Trust List , CTL) eines Speichers erzwingen, wenn der Speicher geschlossen wird. Es können auch Flags festgelegt werden, die überprüfen, ob alle Zertifikat-, Zertifikatsperrlisten- und CTL-Kontexte des Speichers freigegeben wurden. Die folgenden Werte werden definiert.

Wert Bedeutung
CERT_CLOSE_STORE_CHECK_FLAG
Überprüft, ob Ess-, Zertifikatsperrlisten- und CTL-Kontexte gibt. Ein zurückgegebener Fehlercode gibt an, dass mindestens ein Speicherelement weiterhin verwendet wird. Dieses Flag sollte nur als Diagnosetool bei der Entwicklung von Anwendungen verwendet werden.
CERT_CLOSE_STORE_FORCE_FLAG
Erzwingt die Freigabe von Arbeitsspeicher für alle dem Speicher zugeordneten Kontexte. Dieses Flag kann nur dann sicher verwendet werden, wenn der Speicher in einer Funktion geöffnet wird und weder das Speicherhandle noch der zugehörige Kontext an aufgerufene Funktionen übergeben wird. Einzelheiten finden Sie unter "Hinweise".

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.

Wenn CERT_CLOSE_STORE_CHECK_FLAG nicht festgelegt oder festgelegt ist und alle dem Speicher zugeordneten Kontexte freigegeben wurden, ist der Rückgabewert TRUE.

Wenn CERT_CLOSE_STORE_CHECK_FLAG festgelegt ist und der Arbeitsspeicher für einen oder mehrere dem Speicher zugeordnete Kontexte zugeordnet bleibt, ist der Rückgabewert FALSE. Der Speicher wird immer geschlossen, auch wenn die Funktion FALSE zurückgibt. Einzelheiten finden Sie unter "Hinweise".

GetLastError ist auf CRYPT_E_PENDING_CLOSE festgelegt, wenn Arbeitsspeicher für dem Speicher zugeordnete Kontexte zugewiesen bleibt. Jeder vorhandene Wert, der von GetLastError zurückgegeben wird, wird beibehalten, es sei denn, CERT_CLOSE_STORE_CHECK_FLAG festgelegt ist.

Hinweise

Während ein Zertifikatspeicher geöffnet ist, können Kontexte aus diesem Speicher abgerufen oder dupliziert werden. Wenn ein Kontext abgerufen oder dupliziert wird, wird seine Verweisanzahl erhöht. Wenn ein Kontext durch Übergeben an eine Such- oder Enumerationsfunktion als vorheriger Kontext oder mithilfe von CertFreeCertificateContext, CertFreeCRLContext oder CertFreeCTLContext freigegeben wird, wird seine Verweisanzahl verringert. Wenn die Referenzanzahl eines Kontexts null erreicht, wird der für diesen Kontext zugewiesene Arbeitsspeicher automatisch freigegeben. Wenn der für einen Kontext zugewiesene Arbeitsspeicher freigegeben wurde, werden alle Zeiger auf diesen Kontext ungültig.

Standardmäßig wird arbeitsspeicher, der zum Speichern von Kontexten verwendet wird, deren Verweisanzahl größer 0 als 0 ist, nicht freigegeben, wenn ein Zertifikatspeicher geschlossen wird. Verweise auf diese Kontexte bleiben gültig; Dies kann jedoch zu Speicherverlusten führen. Außerdem werden alle Änderungen, die nach dem Schließen des Speichers an den Eigenschaften eines Kontexts vorgenommen wurden, nicht beibehalten.

Um die Freigabe von Arbeitsspeicher für alle einem Speicher zugeordneten Kontexte zu erzwingen, legen Sie CERT_CLOSE_STORE_FORCE_FLAG fest. Mit diesem Flagsatz wird der Arbeitsspeicher für alle dem Speicher zugeordneten Kontexte freigegeben, und alle Zeiger auf Zertifikat-, Sperrlisten- oder CTL-Kontexte, die dem Speicher zugeordnet sind, werden ungültig. Dieses Flag sollte nur festgelegt werden, wenn der Speicher in einer Funktion geöffnet wird und weder das Speicherhandle noch der zugehörige Kontext jemals an aufgerufene Funktionen übergeben wurden.

Die status der Verweisanzahl in Kontexten, die einem Speicher zugeordnet sind, kann mithilfe von CERT_CLOSE_STORE_CHECK_FLAG überprüft werden, wenn der Speicher geschlossen wird. Wenn dieses Flag festgelegt ist und alle Zertifikat-, CRL- oder CTL-Kontexte nicht freigegeben wurden, gibt die Funktion FALSE und GetLastError CRYPT_E_PENDING_CLOSE zurück. Beachten Sie, dass der Speicher weiterhin geschlossen ist, wenn FALSE zurückgegeben wird und der Arbeitsspeicher für aktive Kontexte nicht freigegeben wird.

Wenn CERT_STORE_NO_CRYPT_RELEASE_FLAG beim Öffnen des Speichers nicht festgelegt wurde, wird das CSP-Handle beim Schließen eines Speichers freigegeben.

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

CertDuplicateStore

CertFreeCRLContext

CertFreeCTLContext

CertFreeCertificateContext

CertOpenStore

Zertifikatspeicherfunktionen

CryptReleaseContext