CertEnumCertificatesInStore-Funktion (wincrypt.h)

Die CertEnumCertificatesInStore-Funktion ruft das erste oder nächste Zertifikat in einem Zertifikatspeicher ab. Diese Funktion wird in einer Schleife verwendet und kann nacheinander alle Zertifikate in einem Zertifikatspeicher abrufen.

Syntax

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

Parameter

[in] hCertStore

Ein Handle eines Zertifikatspeichers.

[in] pPrevCertContext

Ein Zeiger auf den CERT_CONTEXT des vorherigen Zertifikatkontexts gefunden.

Dieser Parameter muss NULL sein, um die Enumeration zu starten und das erste Zertifikat im Speicher abzurufen. Nachfolgende Zertifikate werden aufgelistet, indem pPrevCertContext auf den Zeiger festgelegt wird, der von einem vorherigen Aufruf der Funktion zurückgegeben wird. Diese Funktion gibt die CERT_CONTEXT frei, auf die von Nicht-NULL-Werten dieses Parameters verwiesen wird.

Für logische Speicher, einschließlich Sammlungsspeichern, kann ein Duplikat des von dieser Funktion zurückgegebenen pCertContext nicht verwendet werden, um eine neue Unterteilung von Enumerationen zu beginnen, da das duplizierte Zertifikat den anfänglichen Enumerationsstatus verliert. Die Enumeration überspringt alle Zertifikate, die zuvor von CertDeleteCertificateFromStore gelöscht wurden.

Rückgabewert

Wenn die Funktion erfolgreich ist, gibt die Funktion einen Zeiger auf die nächste CERT_CONTEXT im Speicher zurück. Wenn keine weiteren Zertifikate im Speicher vorhanden sind, gibt die Funktion NULL zurück.

Rufen Sie GetLastError auf, um erweiterte Fehlerinformationen zu erhalten. Es folgen einige mögliche Fehlercodes.

Wert BESCHREIBUNG
E_INVALIDARG
Das Handle im hCertStore-Parameter ist nicht dasselbe wie im Zertifikatkontext, auf den pPrevCertContext verweist.
CRYPT_E_NOT_FOUND
Es wurden keine Zertifikate gefunden. Dies geschieht, wenn der Speicher leer ist oder wenn die Funktion das Ende der Liste des Speichers erreicht hat.
ERROR_NO_MORE_FILES
Gilt für externe Speicher. Es wurden keine Zertifikate gefunden. Dies geschieht, wenn der Speicher leer ist oder wenn die Funktion das Ende der Liste des Speichers erreicht hat.

Hinweise

Der zurückgegebene Zeiger wird freigegeben, wenn er als pPrevCertContext-Parameter bei einem nachfolgenden Aufruf übergeben wird. Andernfalls muss der Zeiger durch Aufrufen von CertFreeCertificateContext freigegeben werden. Ein pPrevCertContext, der nicht NULL an CertEnumCertificatesInStore übergeben wird, wird immer für einen Fehler freigegeben.

Ein Duplikat des derzeit aufgezählten Zertifikats kann durch Aufrufen von CertDuplicateCertificateContext erstellt werden.

Beispiele

Im folgenden Beispiel werden die Zertifikatkontexte im Zertifikatspeicher aufgelistet. Ein weiteres Beispiel, das diese Funktion verwendet, finden Sie unter Beispiel C-Programm: Löschen von Zertifikaten aus einem Zertifikatspeicher.

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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile wincrypt.h
Bibliothek Crypt32.lib
DLL Crypt32.dll

Weitere Informationen

CERT_CONTEXT

CertDeleteCertificateFromStore

CertDuplicateCertificateContext

CertFindCRLInStore

CertFindCTLInStore

CertFindCertificateInStore

CertFreeCertificateContext

Zertifikatfunktionen