Función CertEnumCertificatesInStore (wincrypt.h)

La función CertEnumCertificatesInStore recupera el primer o siguiente certificado de un almacén de certificados. Se usa en un bucle , esta función puede recuperar en secuencia todos los certificados de un almacén de certificados.

Sintaxis

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

Parámetros

[in] hCertStore

Identificador de un almacén de certificados.

[in] pPrevCertContext

Puntero al CERT_CONTEXT del contexto de certificado anterior encontrado.

Este parámetro debe ser NULL para comenzar la enumeración y obtener el primer certificado del almacén. Los certificados sucesivos se enumeran estableciendo pPrevCertContext en el puntero devuelto por una llamada anterior a la función. Esta función libera la CERT_CONTEXT a la que hacen referencia los valores que no son NULL de este parámetro.

En el caso de los almacenes lógicos, incluidos los almacenes de recopilación, no se puede usar un duplicado de pCertContext devuelto por esta función para iniciar una nueva subsecuencia de enumeraciones porque el certificado duplicado pierde el estado de enumeración inicial. La enumeración omite cualquier certificado eliminado previamente por CertDeleteCertificateFromStore.

Valor devuelto

Si la función se realiza correctamente, la función devuelve un puntero al siguiente CERT_CONTEXT del almacén. Si no existen más certificados en el almacén, la función devuelve NULL.

Para obtener información de error extendida, llame a GetLastError. A continuación se indican algunos códigos de error posibles.

Valor Descripción
E_INVALIDARG
El identificador del parámetro hCertStore no es el mismo que en el contexto del certificado al que apunta pPrevCertContext.
CRYPT_E_NOT_FOUND
No se encontraron certificados. Esto sucede si el almacén está vacío o si la función alcanzó el final de la lista del almacén.
ERROR_NO_MORE_FILES
Se aplica a almacenes externos. No se encontraron certificados. Esto sucede si el almacén está vacío o si la función alcanzó el final de la lista del almacén.

Comentarios

El puntero devuelto se libera cuando se pasa como parámetro pPrevCertContext en una llamada posterior. De lo contrario, el puntero debe liberarse llamando a CertFreeCertificateContext. Un valor pPrevCertContext noNULL pasado a CertEnumCertificatesInStore siempre se libera incluso por un error.

Se puede realizar un duplicado del certificado enumerado actualmente llamando a CertDuplicateCertificateContext.

Ejemplos

En el ejemplo siguiente se enumeran los contextos de certificado en el almacén de certificados. Para obtener otro ejemplo que usa esta función, vea Programa C de ejemplo: eliminación de certificados de un almacén de certificados.

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

Requisitos

Requisito Value
Cliente mínimo compatible Windows XP [aplicaciones de escritorio | aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2003 [aplicaciones de escritorio | aplicaciones para UWP]
Plataforma de destino Windows
Encabezado wincrypt.h
Library Crypt32.lib
Archivo DLL Crypt32.dll

Consulte también

CERT_CONTEXT

CertDeleteCertificateFromStore

CertDuplicateCertificateContext

CertFindCRLInStore

CertFindCTLInStore

CertFindCertificateInStore

CertFreeCertificateContext

Funciones de certificado