Funzione CertEnumCertificatesInStore (wincrypt.h)
La funzione CertEnumCertificatesInStore
Sintassi
PCCERT_CONTEXT CertEnumCertificatesInStore(
[in] HCERTSTORE hCertStore,
[in] PCCERT_CONTEXT pPrevCertContext
);
Parametri
[in] hCertStore
Handle di un archivio certificati .
[in] pPrevCertContext
Puntatore alla
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 |
---|---|
|
L'handle nel parametro hCertStore non è uguale a quello nel contesto del certificato a cui punta pPrevCertContext. |
|
Non sono stati trovati certificati. Ciò si verifica se l'archivio è vuoto o se la funzione ha raggiunto la fine dell'elenco dello store. |
|
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
CertDeleteCertificateFromStore