Funzione CertEnumCertificatesInStore (wincrypt.h)

La funzione CertEnumCertificatesInStore recupera il primo o il certificato successivo in un archivio certificati. Usata in un ciclo, questa funzione può recuperare in sequenza tutti i certificati in un archivio certificati.

Sintassi

PCCERT_CONTEXT CertEnumCertificatesInStore(
  [in] HCERTSTORE     hCertStore,
  [in] PCCERT_CONTEXT pPrevCertContext
);

Parametri

[in] hCertStore

Handle di un archivio certificati.

[in] pPrevCertContext

Puntatore al CERT_CONTEXT del contesto del certificato precedente trovato.

Questo parametro deve essere NULL per iniziare l'enumerazione e ottenere il primo certificato nell'archivio. I certificati successivi vengono enumerati impostando pPrevCertContext sul puntatore restituito da una chiamata precedente alla funzione. Questa funzione libera il CERT_CONTEXT a cui fa riferimento i valori non NULL di questo parametro.

Per gli archivi logici, inclusi gli archivi di raccolta, non è possibile usare un duplicato di pCertContext restituito da questa funzione per avviare una nuova sottosequenza di enumerazioni perché il certificato duplicato perde lo stato di enumerazione iniziale. L'enumerazione ignora tutti i certificati eliminati in precedenza da CertDeleteCertificateFromStore.

Valore restituito

Se la funzione ha esito positivo, la funzione restituisce un puntatore al CERT_CONTEXT successivo nell'archivio. Se non sono presenti altri certificati nell'archivio, la funzione restituisce NULL.

Per informazioni sugli errori estesi, chiamare GetLastError. Di seguito sono riportati alcuni possibili codici di errore.

Valore Descrizione
E_INVALIDARG
L'handle nel parametro hCertStore non corrisponde a quello nel contesto del certificato a cui punta pPrevCertContext.
CRYPT_E_NOT_FOUND
Non sono stati trovati certificati. Ciò si verifica se l'archivio è vuoto o se la funzione ha raggiunto la fine dell'elenco dello store.
ERROR_NO_MORE_FILES
Si applica agli archivi esterni. Non sono stati trovati certificati. Ciò si verifica se l'archivio è vuoto o se la funzione ha raggiunto la fine dell'elenco dello store.

Commenti

Il puntatore restituito viene liberato quando viene passato come parametro pPrevCertContext in una chiamata successiva. In caso contrario, il puntatore deve essere liberato chiamando CertFreeCertificateContext. Un valore pPrevCertContext non NULL passato a CertEnumCertificatesInStore viene sempre liberato anche per un errore.

È possibile creare un duplicato del certificato attualmente enumerato chiamando CertDuplicateCertificateContext.

Esempio

Nell'esempio seguente sono elencati i contesti del certificato nell'archivio certificati. Per un altro esempio che usa questa funzione, vedere Esempio di programma C: eliminazione di certificati da un archivio certificati.

#include <windows.h>
#include <stdio.h>
#include <Wincrypt.h>
#pragma comment(lib, "crypt32.lib")


//--------------------------------------------------------------------
// Declare and initialize variables.
HANDLE          hStoreHandle = NULL;
PCCERT_CONTEXT  pCertContext = NULL;   
char * pszStoreName = "CA";

//--------------------------------------------------------------------
// Open a system certificate store.
if (hStoreHandle = CertOpenSystemStore(
     NULL,     
     pszStoreName))
    {
         printf("The %s store has been opened. \n", pszStoreName);
    }
    else
    {
         printf("The store was not opened.\n");
         exit(1);
    }

//-------------------------------------------------------------------
// Find the certificates in the system store. 
while(pCertContext= CertEnumCertificatesInStore(
      hStoreHandle,
      pCertContext)) // on the first call to the function,
                     // this parameter is NULL 
                     // on all subsequent calls, 
                     // this parameter is the last pointer 
                     // returned by the function
{
    //----------------------------------------------------------------
    // Do whatever is needed for a current certificate.
    // ...
} // End of while.

//--------------------------------------------------------------------
//   Clean up.
if (!CertCloseStore(
         hStoreHandle,
         0))
{
    printf("Failed CertCloseStore\n");
    exit(1);
}

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

CERT_CONTEXT

CertDeleteCertificateFromStore

CertDuplicateCertificateContext

CertFindCRLInStore

CertFindCTLInStore

CertFindCertificateInStore

CertFreeCertificateContext

Funzioni per i certificati