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 |
---|---|
|
hCertStore 매개 변수의 핸들은 pPrevCertContext가 가리키는 인증서 컨텍스트의 핸들과 다릅니다. |
|
인증서를 찾을 수 없습니다. 이 문제는 저장소가 비어 있거나 함수가 저장소 목록의 끝에 도달한 경우에 발생합니다. |
|
외부 저장소에 적용됩니다. 인증서를 찾을 수 없습니다. 이 문제는 저장소가 비어 있거나 함수가 저장소 목록의 끝에 도달한 경우에 발생합니다. |
설명
반환된 포인터는 후속 호출에서 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 |
추가 정보
CertDeleteCertificateFromStore
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기