CertAddCertificateContextToStore 함수(wincrypt.h)

CertAddCertificateContextToStore 함수는 인증서 저장소에 인증서컨텍스트를 추가합니다.

구문

BOOL CertAddCertificateContextToStore(
  [in]            HCERTSTORE     hCertStore,
  [in]            PCCERT_CONTEXT pCertContext,
  [in]            DWORD          dwAddDisposition,
  [out, optional] PCCERT_CONTEXT *ppStoreContext
);

매개 변수

[in] hCertStore

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

[in] pCertContext

저장소에 추가할 CERT_CONTEXT 구조체에 대한 포인터입니다.

[in] dwAddDisposition

일치하는 인증서 또는 일치하는 인증서에 대한 링크가 저장소에 이미 있는 경우 수행할 작업을 지정합니다. 현재 정의된 처리 값 및 해당 용도는 다음과 같습니다.

의미
CERT_STORE_ADD_ALWAYS
함수는 일치하는 기존 인증서 또는 일치하는 인증서에 대한 링크를 검사 않습니다. 새 인증서는 항상 저장소에 추가됩니다. 이로 인해 저장소에서 중복이 발생할 수 있습니다.
CERT_STORE_ADD_NEW
일치하는 인증서 또는 일치하는 인증서에 대한 링크가 있는 경우 작업이 실패합니다. GetLastError 는 CRYPT_E_EXISTS 코드를 반환합니다.
CERT_STORE_ADD_NEWER
일치하는 인증서 또는 일치하는 인증서에 대한 링크가 있고 기존 컨텍스트의 NotBefore 시간이 추가되는 새 컨텍스트의 NotBefore 시간과 같거나 크면 작업이 실패하고 GetLastError 가 CRYPT_E_EXISTS 코드를 반환합니다.

기존 컨텍스트의 NotBefore 시간이 추가되는 새 컨텍스트의 NotBefore 시간보다 작으면 기존 인증서 또는 링크가 삭제되고 새 인증서가 만들어지고 저장소에 추가됩니다. 일치하는 인증서 또는 일치하는 인증서에 대한 링크가 없는 경우 새 링크가 추가됩니다.

CRL(인증서 해지 목록) 또는 CTL(인증서 신뢰 목록)을 비교하는 경우 ThisUpdate 시간이 사용됩니다.

CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES
일치하는 인증서 또는 일치하는 인증서에 대한 링크가 있고 기존 컨텍스트의 NotBefore 시간이 추가되는 새 컨텍스트의 NotBefore 시간과 같거나 크면 작업이 실패하고 GetLastError 가 CRYPT_E_EXISTS 코드를 반환합니다.

기존 컨텍스트의 NotBefore 시간이 추가되는 새 컨텍스트의 NotBefore 시간보다 작으면 새 컨텍스트를 만들고 추가하기 전에 기존 컨텍스트가 삭제됩니다. 추가된 새 컨텍스트는 기존 인증서의 속성을 상속합니다.

CRL 또는 CTL을 비교하는 경우 ThisUpdate 시간이 사용됩니다.

CERT_STORE_ADD_REPLACE_EXISTING
일치하는 인증서에 대한 링크가 있는 경우 기존 인증서 또는 링크가 삭제되고 새 인증서가 만들어지고 저장소에 추가됩니다. 일치하는 인증서 또는 일치하는 인증서에 대한 링크가 없는 경우 새 링크가 추가됩니다.
CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES
일치하는 인증서가 저장소에 있는 경우 기존 컨텍스트는 대체되지 않습니다. 기존 컨텍스트는 새 인증서의 속성을 상속합니다.
CERT_STORE_ADD_USE_EXISTING
일치하는 인증서 또는 일치하는 인증서에 대한 링크가 있는 경우 기존 인증서 또는 링크가 사용되고 새 인증서의 속성이 추가됩니다. 함수는 실패하지 않지만 새 컨텍스트를 추가하지는 않습니다. pCertContextNULL이 아니면 기존 컨텍스트가 중복됩니다.

일치하는 인증서 또는 일치하는 인증서에 대한 링크가 없는 경우 새 인증서가 추가됩니다.

[out, optional] ppStoreContext

저장소에 추가된 인증서로 만들 복사본에 대한 포인터입니다.

ppStoreContext 매개 변수는 NULL일 수 있으며, 이는 호출 애플리케이션에 추가된 인증서의 복사본이 필요하지 않음을 나타냅니다. 복사본이 만들어지면 CertFreeCertificateContext를 사용하여 해제해야 합니다.

반환 값

함수가 성공하면 반환 값은 TRUE입니다.

함수가 실패하면 반환 값은 FALSE입니다. 확장된 오류 정보는 GetLastError를 호출합니다. 몇 가지 가능한 오류 코드는 다음과 같습니다.

반환 코드 설명
CRYPT_E_EXISTS
이 값은 CERT_STORE_ADD_NEW 설정되고 인증서가 저장소에 이미 있거나 CERT_STORE_ADD_NEWER 설정되고 인증서가 추가할 인증서의 NotBefore 날짜보다 크거나 같은 NotBefore 날짜가 있는 저장소에 있는 경우 반환됩니다.
E_INVALIDARG
유효하지 않은 처리 값이 dwAddDisposition 매개 변수에 지정되었습니다.
 

호출된 함수인 CertAddEncodedCertificateToStoreCertSetCertificateContextProperty의 오류를 이 함수로 전파할 수 있습니다.

설명

인증서 컨텍스트CertDuplicateCertificateContext를 사용하여 중복되지 않습니다. 대신 함수는 컨텍스트의 새 복사본을 만들어 저장소에 추가합니다.

인코딩된 인증서 외에도 CertDuplicateCertificateContext 는 CERT_KEY_PROV_HANDLE_PROP_ID 및 CERT_KEY_CONTEXT_PROP_ID 속성을 제외하고 컨텍스트의 속성을 복사합니다.

인증서 저장소에서 인증서 컨텍스트를 제거하려면 CertDeleteCertificateFromStore 함수를 사용합니다.

참고 인증서 컨텍스트의 순서는 저장소 내에서 유지되지 않을 수 있습니다. 특정 인증서에 액세스하려면 저장소의 인증서를 반복해야 합니다.
 

요구 사항

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

추가 정보

CertAddEncodedCertificateToStore

CertSetCertificateContextProperty

인증서 함수