CertEnumCertificatesInStore 함수(wincrypt.h)

CertEnumCertificatesInStore 함수는 인증서 저장소에서 첫 번째 또는 다음 인증서를 검색합니다. 루프에서 사용되는 이 함수는 인증서 저장소의 모든 인증서를 순서대로 검색할 수 있습니다.

구문

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

매개 변수

[in] hCertStore

인증서 저장소의 핸들입니다.

[in] pPrevCertContext

찾은 이전 인증서 컨텍스트CERT_CONTEXT 대한 포인터입니다.

열거형을 시작하고 저장소에서 첫 번째 인증서를 얻으려면 이 매개 변수가 NULL 이어야 합니다. 연속 인증서는 pPrevCertContext 를 함수에 대한 이전 호출에서 반환된 포인터로 설정하여 열거됩니다. 이 함수는 이 매개 변수의 NULL이 아닌 값에서 참조하는 CERT_CONTEXT 해제합니다.

컬렉션 저장소를 포함한 논리 저장소의 경우 중복된 인증서가 초기 열거 상태를 잃기 때문에 이 함수에서 반환된 pCertContext의 중복을 사용하여 열거형의 새 하위 시퀀스를 시작할 수 없습니다. 열거형은 CertDeleteCertificateFromStore에서 이전에 삭제한 인증서를 건너뜁니다.

반환 값

함수가 성공하면 함수는 저장소의 다음 CERT_CONTEXT 대한 포인터를 반환합니다. 저장소에 인증서가 더 이상 없으면 함수는 NULL을 반환합니다.

확장 오류 정보는 GetLastError를 호출합니다. 몇 가지 가능한 오류 코드는 다음과 같습니다.

Description
E_INVALIDARG
hCertStore 매개 변수의 핸들은 pPrevCertContext가 가리키는 인증서 컨텍스트의 핸들과 다릅니다.
CRYPT_E_NOT_FOUND
인증서를 찾을 수 없습니다. 이 문제는 저장소가 비어 있거나 함수가 저장소 목록의 끝에 도달한 경우에 발생합니다.
ERROR_NO_MORE_FILES
외부 저장소에 적용됩니다. 인증서를 찾을 수 없습니다. 이 문제는 저장소가 비어 있거나 함수가 저장소 목록의 끝에 도달한 경우에 발생합니다.

설명

반환된 포인터는 후속 호출에서 pPrevCertContext 매개 변수로 전달될 때 해제됩니다. 그렇지 않으면 CertFreeCertificateContext를 호출하여 포인터를 해제해야 합니다. CertEnumCertificatesInStore에 전달된 NULL이 아닌 pPrevCertContext는 오류 발생 시에도 항상 해제됩니다.

CertDuplicateCertificateContext를 호출하여 현재 열거된 인증서의 중복을 만들 수 있습니다.

예제

다음 예제에서는 인증서 저장소의 인증서 컨텍스트를 나열합니다. 이 함수를 사용하는 또 다른 예제는 예제 C 프로그램: 인증서 저장소에서 인증서 삭제를 참조하세요.

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

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 wincrypt.h
라이브러리 Crypt32.lib
DLL Crypt32.dll

추가 정보

CERT_CONTEXT

CertDeleteCertificateFromStore

CertDuplicateCertificateContext

CertFindCRLInStore

CertFindCTLInStore

CertFindCertificateInStore

CertFreeCertificateContext

인증서 함수