Funzione CertCloseStore (wincrypt.h)

La funzione CertCloseStore chiude un handle dell'archivio certificati e riduce il conteggio dei riferimenti nell'archivio. Deve essere presente una chiamata corrispondente a CertCloseStore per ogni chiamata riuscita alle funzioni CertOpenStore o CertDuplicateStore .

Sintassi

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

Parametri

[in] hCertStore

Handle dell'archivio certificati da chiudere.

[in] dwFlags

In genere, questo parametro usa il valore predefinito zero. L'impostazione predefinita consiste nel chiudere l'archivio con memoria rimanente allocata per i contesti che non sono stati liberati. In questo caso, non viene eseguito alcun controllo per determinare se la memoria per i contesti rimane allocata.

I flag di impostazione possono forzare la liberazione della memoria per tutti i contesti di certificato, elenco di revoche di certificati (CRL) e elenco di certificati (CTL) quando l'archivio viene chiuso. I flag possono anche essere impostati che controllano se tutti i contesti di certificato, CRL e CTL dell'archivio sono stati liberati. Vengono definiti i valori seguenti.

Valore Significato
CERT_CLOSE_STORE_CHECK_FLAG
Verifica la presenza di contesti certificati, CRL e CTL nonfreed. Un codice di errore restituito indica che uno o più elementi dello store sono ancora in uso. Questo flag deve essere usato solo come strumento di diagnostica nello sviluppo di applicazioni.
CERT_CLOSE_STORE_FORCE_FLAG
Forza la liberazione della memoria per tutti i contesti associati all'archivio. Questo flag può essere usato in modo sicuro solo quando l'archivio viene aperto in una funzione e né l'handle di archiviazione né i relativi contesti vengono passati a qualsiasi funzione chiamata. Per informazioni dettagliate, vedere la sezione Osservazioni.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è TRUE.

Se la funzione ha esito negativo, il valore restituito è FALSE. Per informazioni sugli errori estesi, chiamare GetLastError.

Se CERT_CLOSE_STORE_CHECK_FLAG non è impostato o se è impostato e tutti i contesti associati all'archivio sono stati liberati, il valore restituito è TRUE.

Se CERT_CLOSE_STORE_CHECK_FLAG è impostato e la memoria per uno o più contesti associati all'archivio rimane allocata, il valore restituito è FALSE. L'archivio viene sempre chiuso anche quando la funzione restituisce FALSE. Per informazioni dettagliate, vedere la sezione Osservazioni.

GetLastError è impostato su CRYPT_E_PENDING_CLOSE se la memoria per i contesti associati all'archivio rimane allocata. Qualsiasi valore esistente restituito da GetLastError viene mantenuto a meno che non sia impostato CERT_CLOSE_STORE_CHECK_FLAG.

Commenti

Mentre un archivio certificati è aperto, i contesti di tale archivio possono essere recuperati o duplicati. Quando un contesto viene recuperato o duplicato, il conteggio dei riferimenti viene incrementato. Quando un contesto viene liberato passandolo a una funzione di ricerca o enumerazione come contesto precedente o usando CertFreeCertificateContext, CertFreeCRLContext o CertFreeCTLContext, il conteggio dei riferimenti viene decrementato. Quando il conteggio dei riferimenti di un contesto raggiunge zero, la memoria allocata per tale contesto viene liberata automaticamente. Quando la memoria allocata per un contesto è stata liberata, tutti i puntatori al contesto diventano non validi.

Per impostazione predefinita, la memoria usata per archiviare i contesti con conteggio dei riferimenti maggiore di zero non viene liberata quando un archivio certificati viene chiuso. I riferimenti a tali contesti rimangono validi; tuttavia, ciò può causare perdite di memoria. Inoltre, tutte le modifiche apportate alle proprietà di un contesto dopo la chiusura dell'archivio non vengono rese persistenti.

Per forzare la liberazione della memoria per tutti i contesti associati a un archivio, impostare CERT_CLOSE_STORE_FORCE_FLAG. Con questo flag impostato, la memoria per tutti i contesti associati all'archivio viene liberata e tutti i puntatori a certificati, CRL o contesti CTL associati all'archivio non diventano validi. Questo flag deve essere impostato solo quando l'archivio viene aperto in una funzione e né l'handle di archiviazione né i relativi contesti sono mai stati passati a qualsiasi funzione chiamata.

Lo stato dei conteggi dei riferimenti sui contesti associati a un archivio può essere controllato quando l'archivio viene chiuso usando CERT_CLOSE_STORE_CHECK_FLAG. Quando questo flag è impostato e non sono stati rilasciati tutti i contesti di certificato, CRL o CTL, la funzione restituisce FALSE e GetLastError restituisce CRYPT_E_PENDING_CLOSE. Si noti che l'archivio viene ancora chiuso quando viene restituito FALSE e la memoria per tutti i contesti attivi non viene liberata.

Se CERT_STORE_NO_CRYPT_RELEASE_FLAG non è stato impostato quando l'archivio è stato aperto, la chiusura di un archivio rilascia l'handle CSP.

Requisiti

Requisito Valore
Client minimo supportato Windows XP [app desktop | App UWP]
Server minimo supportato Windows Server 2003 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione wincrypt.h
Libreria Crypt32.lib
DLL Crypt32.dll

Vedi anche

CertDuplicateStore

CertFreeCRLContext

CertFreeCTLContext

CertFreeCertificateContext

CertOpenStore

Funzioni dell'archivio certificati

CryptReleaseContext