Condividi tramite


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 alla 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 i CERT_CONTEXT a cui fa riferimento nonvalori NULL di questo parametro.

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

Valore restituito

Se la funzione ha esito positivo, la funzione restituisce un puntatore alla CERT_CONTEXT successiva nell'archivio. Se nell'archivio non sono presenti altri certificati, 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 è uguale 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.

Osservazioni

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. UnNULLpPrevCertContext passato a CertEnumCertificatesInStore viene sempre liberato anche per un errore.

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

Esempi

L'esempio seguente elenca i contesti del certificato nell'archivio certificati. Per un altro esempio che usa questa funzione, vedere Programma C di esempio: 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);
}

Fabbisogno

Requisito Valore
client minimo supportato Windows XP [app desktop | App UWP]
server minimo supportato Windows Server 2003 [app desktop | App UWP]
piattaforma di destinazione Finestre
intestazione wincrypt.h
libreria Crypt32.lib
dll Crypt32.dll

Vedere anche

CERT_CONTEXT

CertDeleteCertificateFromStore

CertDuplicateCertificateContext

CertFindCRLInStore

CertFindCTLInStore

CertFindCertificateInStore

CertFreeCertificateContext

funzioni del certificato