Función CertEnumCertificatesInStore (wincrypt.h)

La función CertEnumCertificatesInStore recupera el primer o siguiente certificado de un almacén de certificados de . 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 de .

[in] pPrevCertContext

Puntero al CERT_CONTEXT del contexto de certificado de 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 al puntero devuelto por una llamada anterior a la función. Esta función libera los valores de CERT_CONTEXT a los que hace referencia novalores NULL de este parámetro.

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

Valor devuelto

Si la función se ejecuta 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.

Observaciones

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. UnpPrevCertContext noNULL pasado a certEnumCertificatesInStore siempre se libera incluso para 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 use esta función, vea Programa C de ejemplo: eliminar 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 Valor
cliente mínimo admitido Windows XP [aplicaciones de escritorio | Aplicaciones para UWP]
servidor mínimo admitido Windows Server 2003 [aplicaciones de escritorio | Aplicaciones para UWP]
de la plataforma de destino de Windows
encabezado de wincrypt.h
biblioteca de Crypt32.lib
DLL de Crypt32.dll

Consulte también

CERT_CONTEXT

CertDeleteCertificateFromStore

certDuplicateCertificateContext

CertFindCRLInStore

CertFindCTLInStore

CertFindCertificateInStore

CertFreeCertificateContext

funciones de certificado