CertAddSerializedElementToStore 함수(wincrypt.h)

CertAddSerializedElementToStore 함수는 직렬화된 인증서, CRL(인증서 해지 목록) 또는 CTL(인증서 신뢰 목록) 요소를 저장소에 추가합니다. serialize된 요소에는 인코딩된 인증서, CRL 또는 CTL 및 확장 속성이 포함됩니다. 확장 속성은 인증서와 연결되며 인증 기관에서 발급한 인증서의 일부가 아닙니다. 확장 속성은 Microsoft가 아닌 플랫폼에서 사용되는 경우 인증서에서 사용할 수 없습니다.

구문

BOOL CertAddSerializedElementToStore(
  [in]  HCERTSTORE hCertStore,
  [in]  const BYTE *pbElement,
  [in]  DWORD      cbElement,
  [in]  DWORD      dwAddDisposition,
  [in]  DWORD      dwFlags,
  [in]  DWORD      dwContextTypeFlags,
  [out] DWORD      *pdwContextType,
  [out] const void **ppvContext
);

매개 변수

[in] hCertStore

만든 인증서가 저장될 인증서 저장소 의 핸들입니다. hCertStoreNULL인 경우 함수는 확장 속성을 사용하여 인증서, CRL 또는 CTL 컨텍스트의 복사본을 만들지만 인증서, CRL 또는 CTL은 저장소에 유지되지 않습니다.

[in] pbElement

직렬화하여 인증서 저장소에 추가할 인증서, CRL 또는 CTL 정보가 포함된 버퍼에 대한 포인터입니다.

[in] cbElement

pbElement 버퍼의 크기(바이트)입니다.

[in] dwAddDisposition

인증서, CRL 또는 CTL이 저장소에 이미 있는 경우 수행할 작업을 지정합니다. 현재 정의된 처리 값은 다음 표에 나와 있습니다.

의미
CERT_STORE_ADD_NEW
인증서, CRL 또는 CTL이 새 인증서인 경우 인증서가 만들어지고 저장소에 유지됩니다. 저장소에 동일한 인증서, CRL 또는 CTL이 이미 있는 경우 작업이 실패합니다. 마지막 오류 코드는 CRYPT_E_EXISTS 설정됩니다.
CERT_STORE_ADD_USE_EXISTING
인증서, CRL 또는 CTL이 새로운 경우 저장소에 추가됩니다. 동일한 인증서, CRL 또는 CTL이 이미 있는 경우 기존 요소가 사용됩니다. ppvContextNULL이 아니면 기존 컨텍스트가 중복됩니다. 함수는 아직 존재하지 않는 속성만 추가합니다. SHA-1 및 MD5 해시 속성은 복사되지 않습니다.
CERT_STORE_ADD_REPLACE_EXISTING
저장소에 동일한 인증서, CRL 또는 CTL이 이미 있는 경우 새 컨텍스트를 만들고 추가하기 전에 기존 인증서, CRL 또는 CTL 컨텍스트가 삭제됩니다.
CERT_STORE_ADD_ALWAYS
동일한 인증서, CRL 또는 CTL이 이미 있는지 여부를 확인하는 검사 없습니다. 새 요소는 항상 만들어집니다. 이로 인해 저장소에서 중복이 발생할 수 있습니다. 요소가 저장소에 이미 있는지 확인하려면 CertGetCRLFromStore 또는 CertGetSubjectCertificateFromStore를 호출합니다.
CERT_STORE_ADD_NEWER
일치하는 CRL 또는 CTL 또는 일치하는 CRL 또는 CTL에 대한 링크가 있는 경우 함수는 CRL 또는 CTL의 NotBefore 시간을 비교합니다. 기존 CRL 또는 CTL의 NotBefore 시간이 새 요소의 NotBefore 시간보다 작은 경우 이전 요소 또는 링크는 CERT_STORE_ADD_REPLACE_EXISTING 그대로 바뀝 수 있습니다. 기존 요소에 추가할 요소의 NotBefore 시간보다 크거나 같은 NotBefore 시간이 있는 경우 GetLastError 가 CRYPT_E_EXISTS 코드를 반환하면서 함수가 실패합니다.

일치하는 CRL 또는 CTL 또는 일치하는 CRL 또는 CTL에 대한 링크를 저장소에 찾을 수 없는 경우 새 요소가 저장소에 추가됩니다.

CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES
작업은 CERT_STORE_ADD_NEWER 경우와 동일합니다. 그러나 이전 CRL 또는 CTL을 대체하면 이전 요소의 속성이 대체 요소에 통합됩니다.
CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES
일치하는 인증서가 저장소에 있는 경우 새 컨텍스트를 만들고 추가하기 전에 기존 컨텍스트가 삭제됩니다. 추가된 새 컨텍스트는 기존 인증서의 속성을 상속합니다.

[in] dwFlags

나중에 사용할 수 있으며 0이어야 합니다.

[in] dwContextTypeFlags

추가할 수 있는 컨텍스트를 구체적으로 설명합니다. 예를 들어 인증서, CRL 또는 CTL을 추가하려면 dwContextTypeFlags를CERT_STORE_CERTIFICATE_CONTEXT_FLAG 또는 CERT_STORE_CRL_CONTEXT_FLAG 설정합니다.

현재 정의된 컨텍스트 형식 플래그는 다음 표에 나와 있습니다.

의미
CERT_STORE_ALL_CONTEXT_FLAG
컨텍스트를 추가합니다.
CERT_STORE_CERTIFICATE_CONTEXT_FLAG
인증서 컨텍스트만 추가합니다.
CERT_STORE_CRL_CONTEXT_FLAG
CRL 컨텍스트만 추가합니다.
CERT_STORE_CTL_CONTEXT_FLAG
CTL 컨텍스트만 추가합니다.

[out] pdwContextType

추가된 serialized 요소의 컨텍스트 형식에 대한 포인터입니다. 이는 선택적 매개 변수이며 호출 애플리케이션에 컨텍스트 형식이 필요하지 않음을 나타내는 NULL일 수 있습니다.

현재 정의된 컨텍스트 형식은 다음 표에 나와 있습니다.

의미
CERT_STORE_CERTIFICATE_CONTEXT
인증서
CERT_STORE_CRL_CONTEXT
CRL
CERT_STORE_CTL_CONTEXT
CTLs

[out] ppvContext

디코딩된 인증서, CRL 또는 CTL 컨텍스트에 대한 포인터입니다. 이는 선택적 매개 변수이며 NULL일 수 있습니다. 이는 호출 애플리케이션에 추가된 인증서 또는 기존 인증서, CRL 또는 CTL의 컨텍스트가 필요하지 않음을 나타냅니다.

ppvContextNULL이 아닌 경우 CERT_CONTEXT, CRL_CONTEXT또는CTL_CONTEXT 대한 포인터의 주소여야 합니다. 애플리케이션이 컨텍스트로 완료되면 인증서에 CertFreeCertificateContext , CRL의 경우 CertFreeCRLContext 또는 CTL에 CertFreeCTLContext 를 사용하여 컨텍스트를 해제해야 합니다.

반환 값

함수가 성공하면 함수는 0이 아닌 값을 반환합니다.

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

반환 코드 설명
CRYPT_E_EXISTS
dwAddDisposition 매개 변수가 CERT_STORE_ADD_NEW 설정된 경우 인증서, CRL 또는 CTL이 저장소에 이미 있습니다.
E_INVALIDARG
유효하지 않은 처리 값이 dwAddDisposition 매개 변수에 지정되었습니다.
 

함수가 실패하면 GetLastError 는 ASN.1( 추상 구문 표기법 1) 인코딩/디코딩 오류를 반환할 수 있습니다. 이러한 오류에 대한 자세한 내용은 ASN.1 반환 값 인코딩/디코딩을 참조하세요.

요구 사항

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

추가 정보

CertSerializeCRLStoreElement

CertSerializeCertificateStoreElement

인증서 및 인증서 저장소 유지 관리 기능