다음을 통해 공유


CertOpenStore 함수(wincrypt.h)

CertOpenStore 함수는 지정된 저장소 공급자 유형을 사용하여 인증서 저장소를 엽니다. 이 함수는 대부분의 용도로 인증서 저장소를 열 수 있지만 CertOpenSystemStore 는 가장 일반적인 인증서 저장소를 여는 것이 좋습니다. CertOpenStore 는 더 복잡한 옵션 및 특수한 경우에 필요합니다.

구문

HCERTSTORE CertOpenStore(
  [in] LPCSTR            lpszStoreProvider,
  [in] DWORD             dwEncodingType,
  [in] HCRYPTPROV_LEGACY hCryptProv,
  [in] DWORD             dwFlags,
  [in] const void        *pvPara
);

매개 변수

[in] lpszStoreProvider

저장소 공급자 형식을 포함하는 null로 종료된 ANSI 문자열에 대한 포인터입니다.

다음 값은 미리 정의된 저장소 형식을 나타냅니다. 저장소 공급자 유형은 pvPara 매개 변수의 내용과 dwFlags 매개 변수의 상위 단어의 사용 및 의미를 결정합니다. CryptInstallOIDFunctionAddress 또는 CryptRegisterOIDFunction 함수를 사용하여 추가 저장소 공급자를 설치하거나 등록할 수 있습니다. 저장소 공급자를 추가하는 방법에 대한 자세한 내용은 CertOpenStore 기능 확장을 참조하세요.

의미
CERT_STORE_PROV_COLLECTION
sz_CERT_STORE_PROV_COLLECTION
다른 저장소의 컬렉션이 될 저장소를 엽니다. Store는 CertAddStoreToCollectionCertRemoveStoreFromCollection을 사용하여 컬렉션에 추가되거나 제거됩니다. 저장소가 컬렉션에 추가되면 해당 저장소의 모든 인증서, CRL 및 CTL을 컬렉션 저장소의 검색 또는 열거에 사용할 수 있게 됩니다.

dwFlags의 상위 단어는 0으로 설정됩니다.

pvPara 값: pvPara 매개 변수는 NULL이어야 합니다.

CERT_STORE_PROV_FILE
지정된 열린 파일에서 읽은 인증서, CRL 및 CTL을 사용하여 저장소를 초기화합니다. 이 공급자는 파일에 PKCS #7 서명된 메시지 또는 단일 인코딩된 인증서가 아닌 직렬화된 저장소만 포함해야 합니다.

파일 포인터는 직렬화된 저장소 정보의 시작 부분에 위치해야 합니다. 직렬화된 저장소의 데이터가 인증서 저장소에 로드된 후 파일 포인터는 파일의 직렬화된 저장소 데이터를 따를 수 있는 데이터의 시작 부분에 배치됩니다. CERT_FILE_STORE_COMMIT_ENABLE dwFlags에 설정된 경우 파일 핸들이 중복되고 저장소는 항상 직렬화된 저장소로 커밋됩니다. 저장소가 닫혀 있을 때 파일이 닫혀 있지 않습니다.

pvPara 값: pvPara 매개 변수는 CreateFile을 사용하여 연 파일의 핸들에 대한 포인터를 포함해야 합니다.

CERT_STORE_PROV_FILENAME_A
파일의 인증서, CRL 및 CTL을 사용하여 저장소를 초기화합니다. 공급자는 파일을 열고 먼저 파일을 직렬화된 저장소로 읽은 다음, PKCS #7 서명된 메시지로, 마지막으로 인코딩된 단일 인증서로 읽으려고 시도합니다.

dwEncodingType 매개 변수에는 메시지와 인증서 모두에 사용할 인코딩 형식이 포함되어야 합니다. 파일에 X.509 로 인코딩된 인증서가 포함되어 있으면 열기 작업이 실패하고 GetLastError 함수를 호출하면 ERROR_ACCESS_DENIED 반환됩니다. CERT_FILE_STORE_COMMIT_ENABLE 플래그가 dwFlags로 설정된 경우 CreateFile에 전달된 dwCreationDisposition 값은 다음과 같습니다.

  • CERT_STORE_CREATE_NEW_FLAG 플래그가 설정되면 CreateFileCREATE_NEW 사용합니다.
  • CERT_STORE_OPEN_EXISTING_FLAG 플래그가 설정되면 CreateFileOPEN_EXISTING 사용합니다.
  • 다른 모든 dwFlag 설정의 경우 CreateFileOPEN_ALWAYS 사용합니다.

dwFlagsCERT_FILE_STORE_COMMIT_ENABLE 포함된 경우 파일은 열린 파일 형식에 따라 PKCS #7 또는 직렬화된 저장소로 커밋됩니다. 파일이 비어 있거나 파일 이름에 .p7c 또는 .spc 확장명 중 하나가 있는 경우 파일은 PKCS #7로 커밋됩니다. 그렇지 않으면 파일이 직렬화된 저장소로 커밋됩니다.

pvPara 값: pvPara 매개 변수는 미개봉된 기존 파일의 이름을 포함하는 null로 종료된 ANSI 문자열에 대한 포인터를 포함해야 합니다.

CERT_STORE_PROV_FILENAME(_W)
sz_CERT_STORE_PROV_FILENAME(_W)
CERT_STORE_PROV_FILENAME_A 동일합니다.

pvPara 값: pvPara 매개 변수는 미개봉된 기존 파일의 이름을 포함하는 null로 종료된 유니코드 문자열에 대한 포인터를 포함해야 합니다.

CERT_STORE_PROV_LDAP(_W)
sz_CERT_STORE_PROV_LDAP(_W)
LDAP 쿼리의 결과에서 인증서, CRL 및 CTL을 사용하여 저장소를 초기화합니다.

저장소에서 쓰기 작업을 수행하려면 쿼리 문자열이 필터와 단일 특성이 없는 BASE 쿼리를 지정해야 합니다.

pvPara 값: dwFlags 매개 변수에 CERT_LDAP_STORE_OPENED_FLAG 포함된 경우 pvPara를 사용할 설정된 LDAP 세션을 지정하는 CERT_LDAP_STORE_OPENED_PARA 구조체의 주소로 설정합니다.

그렇지 않으면 PVPara 를 LDAP 쿼리 문자열이 포함된 null로 끝나는 유니코드 문자열을 가리키도록 설정합니다. LDAP 쿼리 문자열에 대한 자세한 내용은 LDAP 언어를 참조하세요.

CERT_STORE_PROV_MEMORY
sz_CERT_STORE_PROV_MEMORY
캐시된 메모리에 인증서 저장소를 만듭니다. 인증서, CRL( 인증서 해지 목록 ) 또는 CTL( 인증서 신뢰 목록 )은 처음에 저장소에 로드되지 않습니다. 일반적으로 임시 저장소를 만드는 데 사용됩니다.

인증서, CRL 또는 CTL을 추가하거나 메모리 저장소의 인증서, CRL 또는 CTL 속성의 변경 내용은 자동으로 저장되지 않습니다. CertSaveStore를 사용하여 파일 또는 메모리 BLOB에 저장할 수 있습니다.

pvPara 값: pvPara 매개 변수가 사용되지 않습니다.

CERT_STORE_PROV_MSG
지정된 암호화 메시지의 인증서, CRL 및 CTL을 사용하여 저장소를 초기화합니다. dwEncodingType 매개 변수에는 메시지와 인증서 모두에 사용되는 인코딩 형식이 포함되어야 합니다.

pvPara 값: pvPara 매개 변수에는 CryptMsgOpenToDecode 호출에서 반환된 인코딩된 메시지의 HCRYPTMSG 핸들이 포함되어 있습니다.

CERT_STORE_PROV_PHYSICAL(_W)
sz_CERT_STORE_PROV_PHYSICAL(_W)
논리 시스템 저장소의 구성원인 지정된 물리적 저장소에서 인증서, CRL 및 CTL을 사용하여 저장소를 초기화합니다.

두 이름은 중간 백슬래시(\)로 구분됩니다(예: "Root.Default"). 여기서 "Root"는 시스템 저장소의 이름과 "입니다. 기본값"은 실제 저장소의 이름입니다. 시스템 및 실제 저장소 이름에는 백슬라이시를 포함할 수 없습니다. dwFlags의 높은 단어는 일반적으로 CERT_SYSTEM_STORE_CURRENT_USER 시스템 저장소 위치를 나타냅니다. 자세한 내용은 이 항목의 뒷부분에 있는 dwFlags 를 참조하고 시스템 저장소 위치를 참조하세요. 일부 물리적 저장소 위치는 원격으로 열 수 있습니다.

pvPara 값: pvPara 매개 변수는 시스템 저장소 이름과 실제 이름을 모두 포함하는 null로 끝나는 유니코드 문자열을 가리킵니다.

CERT_STORE_PROV_PKCS7
sz_CERT_STORE_PROV_PKCS7
인코딩된 PKCS #7 서명된 메시지에서 인증서, CRL 및 CTL을 사용하여 저장소를 초기화합니다. dwEncodingType 매개 변수는 메시지와 인증서 모두에 사용할 인코딩 형식을 지정해야 합니다.

pvPara 값: pvPara 매개 변수는 인코딩된 메시지를 나타내는 CRYPT_DATA_BLOB 구조를 가리킵니다.

CERT_STORE_PROV_PKCS12
sz_CERT_STORE_PROV_PKCS12
PKCS #12 패킷의 콘텐츠를 사용하여 저장소를 초기화합니다.

PKCS #12 패킷이 NULL 또는 빈 암호로 보호되는 경우 이 함수는 저장소를 여는 데 성공합니다.

Windows 8 및 Windows Server 2012 시작하여 PFX 패킷에 포함된 암호가 AD(Active Directory) 보안 주체로 보호되고 현재 사용자가 해당 보안 주체의 구성원으로서 암호를 해독할 수 있는 권한이 있는 경우 이 함수는 저장소를 여는 데 성공합니다. 자세한 내용은 pvPara 매개 변수 및 PFXExportCertStoreEx 함수의 PKCS12_PROTECT_TO_DOMAIN_SIDS 플래그를 참조하세요.

Windows 8 및 Windows Server 2012 시작하여 AD 보안 주체에 대한 PFX 암호를 보호할 수 있습니다.

pvPara 값: pvPara 매개 변수는 PKCS #12 패킷을 나타내는 CRYPT_DATA_BLOB 구조를 가리킵니다.

CERT_STORE_PROV_REG
레지스트리 하위 키에서 인증서, CRL 및 CTL을 사용하여 저장소를 초기화합니다.

이 공급자는 pvPara에 전달된 키 아래에 인증서, CRLCTL 레지스트리 하위 키를 열거나 만듭니다. 공급자가 입력 키를 닫지 않습니다. 반환하기 전에 공급자는 pvPara에 전달된 키의 자체 복사본을 엽니다. CERT_STORE_READONLY_FLAG dwFlags의 하위 단어로 설정된 경우 레지스트리 하위 키는 KEY_READ_ACCESS RegOpenKey 를 사용하여 열립니다. 그렇지 않으면 레지스트리 하위 키는 KEY_ALL_ACCESS RegCreateKey 를 사용하여 생성됩니다. 열린 저장소의 내용에 대한 변경 내용은 레지스트리에 즉시 유지됩니다. 그러나 CERT_STORE_READONLY_FLAG dwFlags의 낮은 단어로 설정된 경우 저장소의 콘텐츠에 추가하거나 컨텍스트의 속성을 변경하려고 하면 GetLastError 가 E_ACCESSDENIED 코드를 반환하는 동안 오류가 발생합니다.

pvPara 값: pvPara 매개 변수에는 열린 레지스트리 키의 핸들이 포함됩니다.

CERT_STORE_PROV_SERIALIZED
sz_CERT_STORE_PROV_SERIALIZED
직렬화된 저장소가 포함된 메모리 위치에서 인증서, CRL 및 CTL을 사용하여 저장소를 초기화합니다.

pvPara 값: pvPara 매개 변수는 직렬화된 메모리 BLOB을 포함하는 CRYPT_DATA_BLOB 구조를 가리킵니다.

CERT_STORE_PROV_SMART_CARD(_W)
sz_CERT_STORE_PROV_SMART_CARD(_W)
현재 사용되지 않습니다.
CERT_STORE_PROV_SYSTEM_A
지정된 시스템 저장소에서 인증서, CRL 및 CTL을 사용하여 저장소를 초기화합니다.

시스템 저장소는 하나 이상의 물리적 저장소로 구성된 논리적 컬렉션 저장소입니다. 시스템 저장소와 연결된 물리적 저장소는 CertRegisterPhysicalStore 함수에 등록됩니다. 시스템 저장소가 열리면 연결된 모든 실제 저장소도 CertOpenStore 호출로 열리고 CertAddStoreToCollection 함수를 사용하여 시스템 저장소 컬렉션에 추가됩니다. dwFlags의 상위 단어는 일반적으로 CERT_SYSTEM_STORE_CURRENT_USER 설정된 시스템 저장소 위치를 나타냅니다. 레지스트리 위치에 대한 자세한 내용은 이 항목 의 뒷부분에 있는 dwFlags시스템 저장소 위치를 참조하세요. 일부 시스템 저장소 위치는 원격으로 열 수 있습니다. 자세한 내용은 시스템 저장소 위치를 참조하세요.

pvPara 값: pvPara 매개 변수는 시스템 저장소 이름(예: "My" 또는 "Root")이 포함된 null로 끝나는 ANSI 문자열을 가리킵니다.

CERT_STORE_PROV_SYSTEM(_W)
sz_CERT_STORE_PROV_SYSTEM(_W)
CERT_STORE_PROV_SYSTEM_A 동일합니다.

pvPara 값: pvPara 매개 변수는 시스템 저장소 이름(예: "My" 또는 "Root")이 포함된 null로 끝나는 유니코드 문자열을 가리킵니다.

CERT_STORE_PROV_SYSTEM_REGISTRY_A
물리적 레지스트리 저장소에서 인증서, CRL 및 CTL을 사용하여 저장소를 초기화합니다. 실제 저장소는 컬렉션 저장소로 열리지 않습니다. 열거형 및 검색은 하나의 실제 저장소에 있는 인증서, CRL 및 CTL만 통과합니다.

dwFlags의 상위 단어는 일반적으로 CERT_SYSTEM_STORE_CURRENT_USER 설정된 시스템 저장소 위치를 나타냅니다. 자세한 내용은 이 항목의 뒷 부분에 있는 dwFlags 를 참조하세요. 일부 시스템 저장소 위치는 원격으로 열 수 있습니다. 자세한 내용은 시스템 저장소 위치를 참조하세요.

pvPara 값: pvPara 매개 변수는 시스템 저장소 이름(예: "My" 또는 "Root")이 포함된 null로 끝나는 ANSI 문자열을 가리킵니다.

CERT_STORE_PROV_SYSTEM_REGISTRY(_W)
sz_CERT_STORE_PROV_SYSTEM_REGISTRY(_W)
CERT_STORE_PROV_SYSTEM_REGISTRY_A 동일합니다.

pvPara 값: pvPara 매개 변수는 시스템 저장소 이름(예: "My" 또는 "Root")이 포함된 null로 끝나는 유니코드 문자열을 가리킵니다.

[in] dwEncodingType

인증서 인코딩 유형메시지 인코딩 유형을 지정합니다. 인코딩은 CertSaveStore 함수의 dwSaveAs 매개 변수에 CERT_STORE_SAVE_AS_PKCS7 포함된 경우에만 사용됩니다. 그렇지 않으면 dwMsgAndCertEncodingType 매개 변수가 사용되지 않습니다.

이 매개 변수는 CERT_STORE_PROV_MSG, CERT_STORE_PROV_PKCS7 또는 CERT_STORE_PROV_FILENAME 공급자 형식이 lpszStoreProvider 매개 변수에 지정된 경우에만 적용됩니다. 다른 모든 공급자 형식의 경우 이 매개 변수는 사용되지 않으며 0으로 설정해야 합니다.

이 매개 변수는 다음 값 중 하나 이상의 조합일 수 있습니다.

의미
PKCS_7_ASN_ENCODING
65536 (0x10000)
PKCS #7 메시지 인코딩을 지정합니다.
X509_ASN_ENCODING
1(0x1)
X.509 인증서 인코딩을 지정합니다.

[in] hCryptProv

이 매개 변수는 사용되지 않으며 NULL로 설정해야 합니다.

Windows Server 2003 및 Windows XP: 암호화 공급자에 대한 핸들입니다. 이 매개 변수에 대해 NULL 을 전달하면 적절한 기본 공급자가 사용됩니다. 기본 공급자를 사용하는 것이 좋습니다. 기본 또는 지정된 암호화 공급자는 주체 인증서 또는 CRL의 서명을 확인하는 모든 저장소 함수에 사용됩니다. 이 매개 변수의 데이터 형식은 HCRYPTPROV입니다.

[in] dwFlags

이러한 값은 비트 OR 연산을 사용하여 결합된 상위 단어 및 낮은 단어 값으로 구성됩니다.

dwFlags의 하위 단어 부분은 열린 인증서 저장소의 다양한 일반적인 특성을 제어합니다. 이 부분은 모든 저장소 공급자 유형과 함께 사용할 수 있습니다. dwFlags의 하위 단어 부분은 다음 값 중 하나일 수 있습니다.

의미
CERT_STORE_BACKUP_RESTORE_FLAG
스레드의 SE_BACKUP_NAME 및 SE_RESTORE_NAME 권한을 사용하여 레지스트리 또는 파일 기반 시스템 저장소를 엽니다. 스레드에 이러한 권한이 없는 경우 액세스 거부 오류로 이 함수가 실패해야 합니다.
CERT_STORE_CREATE_NEW_FLAG
새 저장소가 없으면 만들어집니다. 저장소가 이미 있는 경우 함수가 실패합니다.

CERT_STORE_OPEN_EXISTING_FLAG 또는 CERT_STORE_CREATE_NEW_FLAG 설정되지 않은 경우 저장소가 열려 있거나 아직 없는 경우 저장소가 만들어지고 열립니다.

CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG
저장소에서 가져온 모든 인증서, CRL 또는 CTL이 더 이상 사용되지 않을 때까지 저장소 공급자의 닫기를 연기합니다. 저장소에서 가져온 마지막 인증서, CRL 또는 CTL이 해제되면 저장소가 실제로 닫힙니다. CertCloseStore를 호출한 후에도 이러한 인증서, CRL 및 CTL의 속성에 대한 변경 내용은 유지됩니다.

이 플래그가 설정되지 않고 저장소에서 가져온 인증서, CRL 또는 CTL이 계속 사용 중인 경우 해당 인증서, CRL 및 CTL의 속성에 대한 변경 내용은 유지되지 않습니다.

이 함수가 CERT_CLOSE_STORE_FORCE_FLAG 사용하여 호출되면 CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG 무시됩니다.

이 플래그가 설정되고 NULL이 아닌 hCryptProv 매개 변수 값이 전달되면 이 함수를 호출한 후에도 해당 공급자가 계속 사용됩니다.

CERT_STORE_DELETE_FLAG
저장소가 열리지 않고 삭제됩니다. 이 함수는 삭제 성공 및 실패 모두에 대해 NULL 을 반환합니다. 삭제의 성공을 확인하려면 GetLastError를 호출합니다. GetLastError는 저장소가 삭제된 경우 0을 반환하고 삭제되지 않은 경우 0이 아닌 값을 반환합니다.
CERT_STORE_ENUM_ARCHIVED_FLAG
일반적으로 저장소에 있는 모든 인증서의 열거형은 CERT_ARCHIVED_PROP_ID 속성이 설정된 인증서를 무시합니다. 이 플래그를 설정하면 저장소에 있는 인증서의 열거형에는 CERT_ARCHIVED_PROP_ID 속성이 있는 인증서를 포함하여 저장소의 모든 인증서가 포함됩니다.
CERT_STORE_MAXIMUM_ALLOWED_FLAG
허용되는 최대 권한 집합으로 저장소를 엽니다. 이 플래그를 지정하면 레지스트리 저장소가 먼저 쓰기 액세스 권한으로 열리고, 실패하면 읽기 전용 액세스 권한으로 다시 열립니다.
CERT_STORE_NO_CRYPT_RELEASE_FLAG
hCryptProv 매개 변수가 NULL인 경우 이 플래그는 사용되지 않습니다. 이 플래그는 NULL 이 아닌 CSP 핸들이 hCryptProv 매개 변수로 전달되는 경우에만 유효합니다. 이 플래그를 설정하면 인증서 저장소가 닫혀 있을 때 기본이 아닌 CSP가 자동으로 해제되지 않습니다.
CERT_STORE_OPEN_EXISTING_FLAG
기존 저장소만 엽니다. 저장소가 없으면 함수가 실패합니다.
CERT_STORE_READONLY_FLAG
읽기 전용 모드로 저장소를 엽니다. 저장소의 콘텐츠를 변경하려고 하면 오류가 발생합니다. 이 플래그가 설정되고 레지스트리 기반 저장소 공급자를 사용하는 경우 레지스트리 하위 키는 KEY_READ_ACCESS RegOpenKey를 사용하여 열립니다. 그렇지 않으면 레지스트리 하위 키는 KEY_ALL_ACCESSRegCreateKey를 사용하여 만들어집니다.
CERT_STORE_SET_LOCALIZED_NAME_FLAG
이 플래그가 지원되는 경우 공급자는 저장소의 CERT_STORE_LOCALIZED_NAME_PROP_ID 속성을 설정합니다. dwPropIDCERT_STORE_LOCALIZED_NAME_PROP_ID 설정된 CertGetStoreProperty 함수를 호출하여 지역화된 이름을 검색할 수 있습니다. 이 플래그는 형식 CERT_STORE_PROV_FILENAME, CERT_STORE_PROV_SYSTEM, CERT_STORE_PROV_SYSTEM_REGISTRYCERT_STORE_PROV_PHYSICAL_W 공급자에 대해 지원됩니다.
CERT_STORE_SHARE_CONTEXT_FLAG
저장소를 여러 번 열 때 저장소의 열린 인스턴스에서 인증서, CRL 또는 CTL 컨텍스트의 인코딩된 부분에 대한 메모리를 재사용하여 효율적인 메모리 사용을 보장하기 위해 이 플래그를 설정할 수 있습니다.
CERT_STORE_UPDATE_KEYID_FLAG
키 식별자의 Lists CurrentUser 및 LocalMachine 내에 있습니다. 이러한 키 식별자에는 인증서의 속성과 비슷한 속성이 있습니다. CERT_STORE_UPDATE_KEYID_FLAG 설정된 경우 CERT_KEY_PROV_INFO_PROP_ID 속성이 있는 저장소 위치의 모든 키 식별자에 대해 해당 속성은 키 식별자 속성 CERT_KEY_PROV_INFO_PROP_ID 또는 해당 키 식별자와 관련된 인증서의 CERT_KEY_IDENTIFIER_PROP_ID 자동으로 업데이트됩니다.
 

CERT_STORE_PROV_SYSTEM, CERT_STORE_PROV_SYSTEM_REGISTRYCERT_STORE_PROV_PHYSICAL 공급자 유형은 다음과 같은 높은 dwFlags 단어를 사용하여 시스템 저장소 레지스트리 위치를 지정합니다.

CERT_SYSTEM_STORE_CURRENT_SERVICE

CERT_SYSTEM_STORE_CURRENT_USER

CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY

CERT_SYSTEM_STORE_LOCAL_MACHINE

CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE

CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY

CERT_SYSTEM_STORE_SERVICES

CERT_SYSTEM_STORE_USERS

기본적으로 시스템 저장소 위치는 HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE또는 HKEY_USERS 미리 정의된 레지스트리 키를 기준으로 열립니다. 자세한 내용은 시스템 저장소 위치를 참조하세요.

다음 상위 단어 플래그는 이 기본 동작을 재정의합니다.

의미
CERT_SYSTEM_STORE_RELOCATE_FLAG
설정되면 pvPara 는 문자열이 아닌 CERT_SYSTEM_STORE_RELOCATE_PARA 구조체에 대한 포인터를 포함해야 합니다. 구조체는 저장소의 이름과 레지스트리의 위치를 모두 나타냅니다.
CERT_SYSTEM_STORE_UNPROTECTED_FLAG
기본적으로 CurrentUser "루트" 저장소가 열리면 이 함수가 반환되기 전에 보호된 루트 목록에 없는 SystemRegistry 루트가 캐시에서 삭제됩니다. 이 플래그를 설정하면 이 기본값이 재정의되고 SystemRegistry의 모든 루트가 반환되고 보호된 루트 목록의 검사 만들어지지 않습니다.
 

CERT_STORE_PROV_REGISTRY 공급자는 다음과 같은 상위 단어 플래그를 사용합니다.

의미
CERT_REGISTRY_STORE_REMOTE_FLAG
pvPara 에는 원격 컴퓨터의 레지스트리 키에 대한 핸들이 포함되어 있습니다. 원격 컴퓨터의 레지스트리 키에 액세스하려면 액세스를 허용하도록 원격 컴퓨터에 대한 보안 권한을 설정해야 합니다. 자세한 내용은 설명 부분을 참조하세요.
CERT_REGISTRY_STORE_SERIALIZED_FLAG
CERT_STORE_PROV_REG 공급자는 기본 저장 작업을 수행하는 대신 인증서, CRL 및 CTL을 직렬화된 단일 저장소 하위 키에 저장합니다. 기본값은 각 인증서, CRL 또는 CTL이 적절한 하위 키 아래에 별도의 레지스트리 하위 키로 저장된다는 것입니다.

이 플래그는 주로 CurrentUserGroupPolicy 및 LocalMachineGroupPolicy 저장소와 같은 GPT(그룹 정책 템플릿)에서 다운로드한 저장소에 사용됩니다.

CERT_REGISTRY_STORE_SERIALIZED_FLAG 설정되면 CERT_STORE_CTRL_COMMIT 사용하여CertCloseStore 또는 CertControlStore를 호출할 때까지 저장소 추가, 삭제 또는 속성 변경 내용이 유지되지 않습니다.

 

CERT_STORE_PROV_FILECERT_STORE_PROV_FILENAME 공급자 형식은 다음과 같은 상위 단어 플래그를 사용합니다.

의미
CERT_FILE_STORE_COMMIT_ENABLE
이 플래그를 설정하면 CertCloseStore 가 호출되거나 CERT_STORE_CONTROL_COMMIT 사용하여 CertControlStore 가 호출되는 경우 저장소에 추가되거나 저장소의 컨텍스트 속성에 대한 변경 내용이 파일 저장소에 커밋됩니다.

CERT_FILE_STORE_COMMIT_ENABLE 및 CERT_STORE_READONLY_FLAG 모두 dwFlags에 설정된 경우 CertOpenStoreE_INVALIDARG 함께 실패합니다.

 

CERT_STORE_PROV_LDAP 공급자 형식은 다음과 같은 상위 단어 플래그를 사용합니다.

의미
CERT_LDAP_STORE_AREC_EXCLUSIVE_FLAG
pvPara 매개 변수에 명명된 URL에서 A 레코드 전용 DNS 조회를 수행합니다. 이렇게 하면 URL 호스트 이름을 확인할 때 거짓 DNS 쿼리가 생성되지 않습니다. pvPara 매개 변수의 도메인 이름이 아닌 호스트 이름을 전달할 때 이 플래그를 사용합니다.
CERT_LDAP_STORE_OPENED_FLAG
이 플래그를 사용하여 기존 LDAP 세션을 사용합니다. 이 플래그를 지정하면 pvPara 매개 변수는 사용할 LDAP 세션에 대한 정보를 포함하는 CERT_LDAP_STORE_OPENED_PARA 구조체의 주소입니다.
CERT_LDAP_STORE_SIGN_FLAG
일부 애플리케이션에 필요한 무결성을 제공하려면 Kerberos 인증 프로토콜을 사용하여 LDAP 서버 간에 모든 LDAP 트래픽에 디지털 서명합니다.
CERT_LDAP_STORE_UNBIND_FLAG
이 플래그를 CERT_LDAP_STORE_OPENED_FLAG 플래그와 함께 사용하면 저장소가 닫힐 때 LDAP 세션이 바인딩되지 않습니다. 저장소를 닫을 때 시스템은 ldap_unbind 함수를 사용하여 LDAP 세션의 바인딩을 해제합니다.

[in] pvPara

이 함수에 대한 추가 정보를 포함할 수 있는 32비트 값입니다. 이 매개 변수의 내용은 lpszStoreProvider 및 기타 매개 변수의 값에 따라 달라집니다.

반환 값

함수가 성공하면 함수는 인증서 저장소에 대한 핸들을 반환합니다. 저장소 사용을 마쳤으면 CertCloseStore 함수를 호출하여 핸들을 해제합니다.

이 함수가 실패하면 NULL을 반환합니다. 확장 오류 정보는 GetLastError를 호출합니다.

참고CreateFile, ReadFile 또는 레지스트리 오류가 전파되고 오류 코드가 반환될 수 있습니다. CertOpenStore 에는 함수가 lpszStoreProvider 매개 변수로 지정된 공급자를 찾을 수 없음을 나타내는 고유한 ERROR_FILE_NOT_FOUND 코드의 단일 오류 코드가 있습니다.
 

설명

시스템 저장소는 하나 이상의 실제 형제 저장소로 구성된 컬렉션입니다. 각 시스템 저장소에는 미리 정의된 실제 형제 저장소가 있습니다. CERT_SYSTEM_STORE_CURRENT_USER "My"와 같은 시스템 저장소를 연 후 CertOpenStore 가 호출되어 시스템 저장소 컬렉션의 모든 실제 저장소를 엽니다. 이러한 각 물리적 저장소는 CertAddStoreToCollection 함수를 사용하여 시스템 저장소 컬렉션에 추가됩니다. 이러한 물리적 저장소의 모든 인증서, CRL 및 CTL은 논리 시스템 저장소 컬렉션을 통해 사용할 수 있습니다.

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

다음 시스템 저장소 위치를 원격으로 열 수 있습니다.

  • CERT_SYSTEM_STORE_LOCAL_MACHINE
  • CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY
  • CERT_SYSTEM_STORE_SERVICES
  • CERT_SYSTEM_STORE_USERS

시스템 저장소 위치는 컴퓨터 이름으로 pvPara 에 전달된 문자열의 저장소 이름을 접두사로 지정하여 원격으로 열립니다. 원격 시스템 저장소 이름의 예는 다음과 같습니다.

  • ComputerName\CA
  • \\ComputerName\CA
  • ComputerName\ServiceName\Trust
  • \\ComputerName\ServiceName\Trust

시스템 저장소에 대한 자세한 내용은 시스템 저장소 위치를 참조하세요.

자동으로 마이그레이션되는 저장소에 대한 자세한 내용은 인증서 저장소 마이그레이션을 참조하세요.

예제

다음 예제에서는 여러 저장소 공급자 유형의 여러 인증서 저장소를 여는 방법을 보여 있습니다. 이 예제에서는 DACL 만들기 항목에 정의된 CreateMyDACL 함수를 사용하여 열린 파일이 적절한 DACL로 생성되도록 합니다. 다른 저장소 공급자 유형을 여는 더 많은 예제는 인증서 저장소 열기를 위한 예제 C 코드를 참조하세요.

//-------------------------------------------------------------------
// Open a system store, in this case, the My store.

HCERTSTORE hSysStore = NULL;
if(hSysStore = CertOpenStore(
   CERT_STORE_PROV_SYSTEM,          // The store provider type
   0,                               // The encoding type is
                                    // not needed
   NULL,                            // Use the default HCRYPTPROV
   CERT_SYSTEM_STORE_CURRENT_USER,  // Set the store location in a
                                    // registry location
   L"MY"                            // The store name as a Unicode 
                                    // string
   ))
{
    printf("The system store was created successfully.\n");
}
else
{
    printf("An error occurred during creation "
        "of the system store!\n");
    exit(1);
}

// Other common system stores include "Root", "Trust", and "Ca".


//-------------------------------------------------------------------
// Open a memory store. 

HCERTSTORE hMemStore = NULL;
if(hMemStore = CertOpenStore(
   CERT_STORE_PROV_MEMORY,   // The memory provider type
   0,                        // The encoding type is not needed
   NULL,                     // Use the default HCRYPTPROV
   0,                        // Accept the default dwFlags
   NULL                      // pvPara is not used
   ))
{
    printf("The memory store was created successfully.\n");
}
else
{
    printf("An error occurred during creation "
        "of the memory store!\n");
    exit(1);
}

//-------------------------------------------------------------------
// Open a read-only store from disk.

HANDLE       hFile = NULL;
HCERTSTORE   hFileStore = NULL;
LPCSTR       pszFileName = "TestStor2.sto";
SECURITY_ATTRIBUTES  sa;        // For DACL

// Create a DACL to use when opening the file.
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = FALSE;  

// Call function to set the DACL. The DACL is set in the 
// SECURITY_ATTRIBUTES lpSecurityDescriptor member.
if (!CreateMyDACL(&sa))
{
     // Error encountered; generate message and exit.
     printf("Failed CreateMyDACL.\n");
        exit(1);
}

// Obtain the file handle of an existing file.
if (hFile = CreateFile(
     pszFileName,                  // The file name
     GENERIC_READ|GENERIC_WRITE,   // Access mode: Read from and
                                   // write to this file
     0,                            // Share mode
     &sa,                          // Uses the DACL created 
                                   // previously 
     OPEN_ALWAYS,                  // How to create
     FILE_ATTRIBUTE_NORMAL,        // File attributes
     NULL))                        // Template
{
    printf("The file was opened successfully.\n");
}
else
{
    printf("An error occurred during opening of the file!\n");
    exit(1);
}

//-------------------------------------------------------------------
//  This file can contain data before the store itself.
//  At this point, read and use data in the open file that precedes
//  the serialized certificate store data. 
//  To open the certificate store, the file pointer must
//  be placed at the beginning of the certificate store data.

//-------------------------------------------------------------------
//  Open the store.

if(hFileStore = CertOpenStore(
    CERT_STORE_PROV_FILE,     // Load certificates from a file
    0,                        // Encoding type not used
    NULL,                     // Use the default HCRYPTPROV
    CERT_STORE_READONLY_FLAG, // Read-only store
    hFile                     // The handle for the open file 
                              // that is the source of the 
                              // certificates
    ))
{
    printf("The file store was created successfully.\n");
}
else
{
    printf("An error occurred during creation of the file store!\n");
    exit(1);
}

//-------------------------------------------------------------------
// After processing, close the certificate stores and the file.

if(CertCloseStore(
        hSysStore, 
        CERT_CLOSE_STORE_CHECK_FLAG))
{
    printf("The system store was closed successfully.\n");
}
else
{
    printf("An error occurred during closing of the "
        "system store.\n");
}

if(CertCloseStore(
        hMemStore, 
        CERT_CLOSE_STORE_CHECK_FLAG))
{
    printf("The memory store was closed successfully.\n");
}
else
{
    printf("An error occurred during closing of the "
        "memory store.\n");
}

if(CertCloseStore(
        hFileStore, 
        CERT_CLOSE_STORE_CHECK_FLAG))
{
    printf("The file store was closed successfully.\n");
}
else
{
    printf("An error occurred during closing of the file store.\n");
}

if(CloseHandle(hFile))
{
    printf("The file was closed successfully.\n");
}
else
{
    printf("An error occurred during closing of the file.\n");
}

요구 사항

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

추가 정보

CERT_SYSTEM_STORE_RELOCATE_PARA

CertCloseStore

CertSaveStore

인증서 저장소 함수