Fonction CertEnumCertificatesInStore (wincrypt.h)

La fonction CertEnumCertificatesInStore récupère le premier ou le prochain certificat dans un magasin de certificats. Utilisée dans une boucle, cette fonction peut récupérer dans l’ordre tous les certificats d’un magasin de certificats.

Syntaxe

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

Paramètres

[in] hCertStore

Handle d’un magasin de certificats.

[in] pPrevCertContext

Pointeur vers le CERT_CONTEXT du contexte de certificat précédent trouvé.

Ce paramètre doit être NULL pour commencer l’énumération et obtenir le premier certificat dans le magasin. Les certificats successifs sont énumérés en définissant pPrevCertContext sur le pointeur retourné par un appel précédent à la fonction. Cette fonction libère les CERT_CONTEXT référencées par des valeurs non NULL de ce paramètre.

Pour les magasins logiques, y compris les magasins de collections, un doublon du pCertContext retourné par cette fonction ne peut pas être utilisé pour commencer une nouvelle sous-séquence d’énumérations, car le certificat dupliqué perd l’état d’énumération initial. L’énumération ignore tout certificat précédemment supprimé par CertDeleteCertificateFromStore.

Valeur retournée

Si la fonction réussit, la fonction retourne un pointeur vers le CERT_CONTEXT suivant dans le magasin. S’il n’existe plus de certificats dans le magasin, la fonction retourne NULL.

Pour obtenir des informations d’erreur étendues, appelez GetLastError. Certains codes d’erreur possibles suivent.

Valeur Description
E_INVALIDARG
Le handle dans le paramètre hCertStore n’est pas le même que dans le contexte de certificat pointé par pPrevCertContext.
CRYPT_E_NOT_FOUND
Aucun certificat n’a été trouvé. Cela se produit si le magasin est vide ou si la fonction a atteint la fin de la liste du magasin.
ERROR_NO_MORE_FILES
S’applique aux magasins externes. Aucun certificat n’a été trouvé. Cela se produit si le magasin est vide ou si la fonction a atteint la fin de la liste du magasin.

Remarques

Le pointeur retourné est libéré lorsqu’il est passé en tant que paramètre pPrevCertContext lors d’un appel suivant. Sinon, le pointeur doit être libéré en appelant CertFreeCertificateContext. Un pPrevCertContext non NULL passé à CertEnumCertificatesInStore est toujours libéré, même en cas d’erreur.

Vous pouvez effectuer un doublon du certificat actuellement énuméré en appelant CertDuplicateCertificateContext.

Exemples

L’exemple suivant répertorie les contextes de certificat dans le magasin de certificats. Pour obtenir un autre exemple qui utilise cette fonction, consultez Exemple de programme C : suppression de certificats d’un magasin de certificats.

#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);
}

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows XP [applications de bureau | applications UWP]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau | applications UWP]
Plateforme cible Windows
En-tête wincrypt.h
Bibliothèque Crypt32.lib
DLL Crypt32.dll

Voir aussi

CERT_CONTEXT

CertDeleteCertificateFromStore

CertDuplicateCertificateContext

CertFindCRLInStore

CertFindCTLInStore

CertFindCertificateInStore

CertFreeCertificateContext

Fonctions de certificat