Freigeben über


CertEnumCertificatesInStore-Funktion (wincrypt.h)

Die funktion CertEnumCertificatesInStore ruft das erste oder nächste Zertifikat in einem Zertifikatspeicherab. Diese Funktion kann in einer Schleife alle Zertifikate in einem Zertifikatspeicher sequenziert abrufen.

Syntax

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

Parameter

[in] hCertStore

Ein Handle eines Zertifikatspeichers.

[in] pPrevCertContext

Ein Zeiger auf die CERT_CONTEXT des vorherigen Zertifikatkontexts gefunden.

Dieser Parameter muss NULL- sein, um die Enumeration zu beginnen und das erste Zertifikat im Speicher abzurufen. Aufeinanderfolgende Zertifikate werden aufgezählt, 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 durch nicht-NULL- Werte dieses Parameters verwiesen wird.

Bei logischen Speicher, einschließlich Sammlungsspeichern, kann ein Duplikat des pCertContext, das von dieser Funktion zurückgegeben wird, nicht verwendet werden, um eine neue Unteranforderung von Enumerationen zu beginnen, da das duplizierte Zertifikat die ursprüngliche Enumeration Zustandverliert. Die Aufzählung überspringt alle Zertifikate, die zuvor von CertDeleteCertificateFromStoregelö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 im Speicher keine weiteren Zertifikate vorhanden sind, gibt die Funktion NULL-zurück.

Rufen Sie für erweiterte Fehlerinformationen GetLastError-auf. Einige mögliche Fehlercodes folgen.

Wert Beschreibung
E_INVALIDARG
Das Handle im hCertStore--Parameter entspricht nicht dem im Zertifikatkontext, auf den pPrevCertContextverweist.
CRYPT_E_NOT_FOUND
Es wurden keine Zertifikate gefunden. Dies geschieht, wenn der Speicher leer ist oder 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 die Funktion das Ende der Liste des Speichers erreicht hat.

Bemerkungen

Der zurückgegebene Zeiger wird beim Übergeben als pPrevCertContext Parameter für einen nachfolgenden Aufruf freigegeben. Andernfalls muss der Zeiger durch Aufrufen CertFreeCertificateContextfreigegeben werden. Ein nichtNULLpPrevCertContext an CertEnumCertificatesInStore übergeben wird, wird auch für einen Fehler immer freigegeben.

Ein Duplikat des aktuell aufgezählten Zertifikats kann durch Aufrufen von CertDuplicateCertificateContexterfolgen.

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
mindestens unterstützte Client- Windows XP [Desktop-Apps | UWP-Apps]
mindestens unterstützte Server- Windows Server 2003 [Desktop-Apps | UWP-Apps]
Zielplattform- Fenster
Header- wincrypt.h
Library Crypt32.lib
DLL- Crypt32.dll

Siehe auch

CERT_CONTEXT

CertDeleteCertificateFromStore-

CertDuplicateCertificateContext

CertFindCRLInStore-

CertFindCTLInStore-

CertFindCertificateInStore-

CertFreeCertificateContext-

Zertifikatfunktionen