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 기능 확장참조하세요.
값 | 의미 |
---|---|
|
다른 저장소의 컬렉션이 될 저장소를 엽니다. 저장소는 CertAddStoreToCollection 및 CertRemoveStoreFromCollection사용하여 컬렉션에 추가되거나 제거됩니다. 컬렉션에 저장소를 추가하면 해당 저장소의 모든 인증서, CRL 및 CTL을 컬렉션 저장소의 검색 또는 열거에 사용할 수 있게 됩니다.
dwFlags 상위 단어는 0으로 설정됩니다. |
|
지정된 열린 파일에서 읽은 인증서, CRL 및 CTL을 사용하여 저장소를 초기화합니다. 이 공급자는 파일에 PKCS #7 서명된 메시지 또는 단일 인코딩된 인증서가 아닌 직렬화된 저장소만 포함해야 합니다.
파일 포인터는 serialize된 저장소 정보의 시작 부분에 위치해야 합니다. 직렬화된 저장소의 데이터가 인증서 저장소에 로드된 후 파일 포인터는 파일의 직렬화된 저장소 데이터를 따를 수 있는 데이터의 시작 부분에 배치됩니다. CERT_FILE_STORE_COMMIT_ENABLE dwFlags설정되면 파일 핸들이 복제되고 저장소는 항상 직렬화된 저장소로 커밋됩니다. 저장소를 닫을 때 파일이 닫혀 있지 않습니다. pvPara 값: pvPara 매개 변수는 CreateFile사용하여 연 파일의 핸들에 대한 포인터를 포함해야 합니다. |
|
파일의 인증서, CRL 및 CTL을 사용하여 저장소를 초기화합니다. 공급자는 파일을 열고 먼저 파일을 직렬화된 저장소로 읽은 다음 PKCS #7 서명된 메시지로, 마지막으로 인코딩된 단일 인증서로 읽으려고 시도합니다.
dwEncodingType 매개 변수에는 메시지와 인증서 모두에 사용할 인코딩 형식이 포함되어야 합니다. 파일에 X.509 인코딩된 인증서가 포함되어 있으면 열기 작업이 실패하고 GetLastError 함수를 호출하면 ERROR_ACCESS_DENIED반환됩니다. CERT_FILE_STORE_COMMIT_ENABLE 플래그가 dwFlags설정된 경우 CreateFile 전달된 dwCreationDisposition 값은 다음과 같습니다.
dwFlagsCERT_FILE_STORE_COMMIT_ENABLE포함하는 경우 파일은 열린 파일 형식에 따라 PKCS #7 또는 직렬화된 저장소로 커밋됩니다. 파일이 비어 있거나 파일 이름에 .p7c 또는 .spc 확장명을 가진 경우 파일은 PKCS #7로 커밋됩니다. 그렇지 않으면 파일이 직렬화된 저장소로 커밋됩니다. pvPara 값: pvPara 매개 변수에는 열리지 않은 기존 파일의 이름이 포함된 null로 종료된 ANSI 문자열에 대한 포인터가 포함되어야 합니다. |
|
CERT_STORE_PROV_FILENAME_A.
pvPara 값: pvPara 매개 변수는 열리지 않은 기존 파일의 이름을 포함하는 null로 종료된 유니코드 문자열에 대한 포인터를 포함해야 합니다. |
|
LDAP 쿼리의 결과에서 인증서, CRL 및 CTL을 사용하여 저장소를 초기화합니다.
저장소에서 쓰기 작업을 수행하려면 쿼리 문자열이 필터 및 단일 특성 없이 BASE 쿼리를 지정해야 합니다. pvPara 값: dwFlags 매개 변수에 CERT_LDAP_STORE_OPENED_FLAG포함된 경우 pvPara 사용할 설정된 LDAP 세션을 지정하는 CERT_LDAP_STORE_OPENED_PARA 구조체의 주소로 설정합니다. 그렇지 않으면 pvPara 설정하여 LDAP 쿼리 문자열이 포함된 null로 끝나는 유니코드 문자열을 가리킵니다. LDAP 쿼리 문자열에 대한 자세한 내용은 LDAP 언어참조하세요. |
|
캐시된 메모리에 인증서 저장소를 만듭니다. 인증서, 인증서 해지 목록(CRL) 또는 인증서 신뢰 목록(CTL)은 처음에 저장소에 로드되지 않습니다. 일반적으로 임시 저장소를 만드는 데 사용됩니다.
인증서, CRL 또는 CTL을 추가하거나 메모리 저장소의 인증서, CRL 또는 CTL 속성의 변경 내용은 자동으로 저장되지 않습니다. CertSaveStore사용하여 파일 또는 메모리 BLOB 저장할 수 있습니다. pvPara 값: pvPara 매개 변수는 사용되지 않습니다. |
|
지정된 암호화 메시지에서 인증서, CRL 및 CTL을 사용하여 저장소를 초기화합니다.
dwEncodingType 매개 변수에는 메시지와 인증서 모두에 사용되는 인코딩 형식이 포함되어야 합니다.
pvPara 값: pvPara 매개 변수에는 CryptMsgOpenToDecode호출로 반환되는 인코딩된 메시지의 HCRYPTMSG 핸들이 포함되어 있습니다. |
|
논리 시스템 저장소의 멤버인 지정된 물리적 저장소에서 인증서, CRL 및 CTL을 사용하여 저장소를 초기화합니다.
두 이름은 중간 백슬래시(\)로 구분됩니다(예: "Root.Default"). 여기서 "Root"는 시스템 저장소의 이름과 "입니다. 기본값"은 실제 저장소의 이름입니다. 시스템 및 실제 저장소 이름에는 백슬라이시를 포함할 수 없습니다. dwFlags 높은 단어는 시스템 저장소 위치(일반적으로 CERT_SYSTEM_STORE_CURRENT_USER)를 나타냅니다. 자세한 내용은 이 항목의 뒷부분에 있는 dwFlags 참조하고 System Store 위치참조하세요. 일부 물리적 저장소 위치는 원격으로 열 수 있습니다. pvPara 값: pvPara 매개 변수는 시스템 저장소 이름과 실제 이름을 모두 포함하는 null로 끝나는 유니코드 문자열을 가리킵니다. |
|
인코딩된 PKCS #7 서명된 메시지에서 인증서, CRL 및 CTL을 사용하여 저장소를 초기화합니다.
dwEncodingType 매개 변수는 메시지와 인증서 모두에 사용할 인코딩 형식을 지정해야 합니다.
pvPara 값: pvPara 매개 변수는 인코딩된 메시지를 나타내는 CRYPT_DATA_BLOB 구조를 가리킵니다. |
|
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 구조를 가리킵니다. |
|
레지스트리 하위 키에서 인증서, CRL 및 CTL을 사용하여 저장소를 초기화합니다.
이 공급자는 인증서, pvPara 값: pvPara 매개 변수에 열려 있는 레지스트리 키의 핸들이 포함되어 있습니다. |
|
직렬화된 저장소가 포함된 메모리 위치에서 인증서, CRL 및 CTL을 사용하여 저장소를 초기화합니다.
pvPara 값: pvPara 매개 변수는 직렬화된 메모리 BLOB을 포함하는 CRYPT_DATA_BLOB 구조를 가리킵니다. |
|
현재 사용되지 않습니다. |
|
지정된 시스템 저장소에서 인증서, CRL 및 CTL을 사용하여 저장소를 초기화합니다.
시스템 저장소는 하나 이상의 실제 저장소로 구성된 논리적 컬렉션 저장소입니다. 시스템 저장소와 연결된 물리적 저장소는 CertRegisterPhysicalStore 함수에 등록됩니다. 시스템 저장소가 열리면 연결된 모든 물리적 저장소도 CertOpenStore 호출하여 열리고 CertAddStoreToCollection 함수를 사용하여 시스템 저장소 컬렉션에 추가됩니다. dwFlags 높은 단어는 시스템 저장소 위치를 나타내며, 일반적으로 CERT_SYSTEM_STORE_CURRENT_USER 설정됩니다. 레지스트리 위치에 대한 자세한 내용은 이 항목의 뒷부분에 있는 dwFlags시스템 저장소 위치참조하세요. 일부 시스템 저장소 위치는 원격으로 열 수 있습니다. 자세한 내용은 시스템 저장소 위치를 참조하세요. pvPara 값 |
|
CERT_STORE_PROV_SYSTEM_A.
pvPara 값: pvPara 매개 변수는 시스템 저장소 이름(예: "My" 또는 "Root")이 포함된 null로 끝나는 유니코드 문자열을 가리킵니다. |
|
물리적 레지스트리 저장소에서 인증서, CRL 및 CTL을 사용하여 저장소를 초기화합니다. 실제 저장소는 컬렉션 저장소로 열리지 않습니다. 열거형 및 검색은 하나의 실제 저장소에 있는 인증서, CRL 및 CTL만 통과합니다.
dwFlags 높은 단어는 시스템 저장소 위치를 나타내며, 일반적으로 CERT_SYSTEM_STORE_CURRENT_USER 설정됩니다. 자세한 내용은 이 항목의 뒷부분에 있는 dwFlags 참조하세요. 일부 시스템 저장소 위치는 원격으로 열 수 있습니다. 자세한 내용은 System Store 위치참조하세요. pvPara 값 |
|
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 메시지 인코딩을 지정합니다. |
|
X.509 인증서 인코딩을 지정합니다. |
[in] hCryptProv
이 매개 변수는 사용되지 않으며 NULL
Windows Server 2003 및 Windows XP: 암호화 공급자에 대한 핸들 . 이 매개 변수에 대한 NULL 전달하면 적절한 기본 공급자가 사용됩니다. 기본 공급자를 사용하는 것이 좋습니다. 기본 또는 지정된 암호화 공급자는 주체 인증서 또는 CRL의 서명을 확인하는 모든 저장소 함수에 사용됩니다. 이 매개 변수의 데이터 형식은 HCRYPTPROV
[in] dwFlags
이러한 값은 비트OR 연산을 사용하여 결합된 상위 단어 및 낮은 단어 값으로 구성됩니다.
dwFlags 하위 단어 부분은 열린 인증서 저장소의 다양한 일반적인 특성을 제어. 이 부분은 모든 저장소 공급자 유형과 함께 사용할 수 있습니다. dwFlags 하위 단어 부분은 다음 값 중 하나일 수 있습니다.
값 | 의미 |
---|---|
|
스레드의 SE_BACKUP_NAME 및 SE_RESTORE_NAME 권한 사용하여 레지스트리 또는 파일 기반 시스템 저장소를 엽니다. 스레드에 이러한 권한이 없는 경우 이 함수는 액세스 거부 오류와 함께 실패해야 합니다. |
|
새 저장소가 없는 경우 만들어집니다. 저장소가 이미 있는 경우 함수가 실패합니다.
CERT_STORE_OPEN_EXISTING_FLAG 또는 CERT_STORE_CREATE_NEW_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 무시됩니다. 이 플래그가 설정되고NULLhCryptProv 매개 변수 값이 전달되면 해당 공급자는 이 함수를 호출한 후에도 계속 사용됩니다. |
|
저장소가 열리지 않고 삭제됩니다. 이 함수는 삭제의 성공과 실패 모두에 대해 NULL 반환합니다. 삭제의 성공을 확인하려면 GetLastError호출합니다. 이 값은 저장소가 삭제된 경우 0을 반환하고 삭제되지 않은 경우 0이 아닌 값을 반환합니다. |
|
일반적으로 저장소에 있는 모든 인증서의 열거형은 CERT_ARCHIVED_PROP_ID 속성이 설정된 인증서를 무시합니다. 이 플래그를 설정하면 저장소의 인증서 열거에는 CERT_ARCHIVED_PROP_ID 속성이 있는 인증서를 포함하여 저장소의 모든 인증서가 포함됩니다. |
|
허용되는 최대 사용 권한 집합으로 저장소를 엽니다. 이 플래그를 지정하면 레지스트리 저장소가 먼저 쓰기 액세스 권한으로 열리고 실패하면 읽기 전용 액세스 권한으로 다시 열립니다. |
|
이 플래그는 |
|
기존 저장소만 엽니다. 저장소가 없으면 함수가 실패합니다. |
|
읽기 전용 모드로 저장소를 엽니다. 저장소의 콘텐츠를 변경하려고 하면 오류가 발생합니다. 이 플래그를 설정하고 레지스트리 기반 저장소 공급자를 사용하는 경우 레지스트리 하위 키는 KEY_READ_ACCESSRegOpenKey 사용하여 열립니다. 그렇지 않으면 레지스트리 하위 키는 KEY_ALL_ACCESSRegCreateKey 사용하여 만들어집니다. |
|
이 플래그가 지원되는 경우 공급자는 저장소의 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_REGISTRY및 CERT_STORE_PROV_PHYSICAL_W형식 공급자에 대해 지원됩니다. |
|
저장소를 여러 번 열 때 저장소의 열린 인스턴스에서 인증서, CRL 또는 CTL 컨텍스트의 인코딩된 부분에 대한 메모리를 다시 사용하여 효율적인 메모리 사용을 보장하기 위해 이 플래그를 설정할 수 있습니다. |
|
키 식별자 목록은 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_REGISTRY및 CERT_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 미리 정의된 레지스트리 키를 기준으로 열립니다. 자세한 내용은 System Store 위치참조하세요.
다음 상위 단어 플래그는 이 기본 동작을 재정의합니다.
값 | 의미 |
---|---|
|
설정할 때 pvPara 문자열이 아닌 CERT_SYSTEM_STORE_RELOCATE_PARA 구조체에 대한 포인터를 포함해야 합니다. 구조체는 저장소의 이름과 레지스트리의 위치를 모두 나타냅니다. |
|
기본적으로 CurrentUser "루트" 저장소가 열리면 이 함수가 반환되기 전에 보호된 루트 목록에 없는 SystemRegistry 루트가 캐시에서 삭제됩니다. 이 플래그를 설정하면 이 기본값이 재정의되고 SystemRegistry의 모든 루트가 반환되며 보호된 루트 목록을 확인하지 않습니다. |
CERT_STORE_PROV_REGISTRY 공급자는 다음과 같은 상위 단어 플래그를 사용합니다.
값 | 의미 |
---|---|
|
pvPara 원격 컴퓨터의 레지스트리 키에 대한 핸들을 포함합니다. 원격 컴퓨터의 레지스트리 키에 액세스하려면 액세스를 허용하도록 원격 컴퓨터에 대한 보안 권한을 설정해야 합니다. 자세한 내용은 비고를 참조하세요. |
|
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_FILE 및 CERT_STORE_PROV_FILENAME 공급자 형식은 다음과 같은 상위 단어 플래그를 사용합니다.
값 | 의미 |
---|---|
|
이 플래그를 설정하면 CertCloseStore 호출되거나 CERT_STORE_CONTROL_COMMIT사용하여 CertControlStore 호출될 때 저장소에 추가되거나 저장소의 컨텍스트 속성에 대한 변경 내용이 파일 저장소에 커밋됩니다.
CERT_FILE_STORE_COMMIT_ENABLE 및 CERT_STORE_READONLY_FLAG 모두 dwFlags설정되면 E_INVALIDARGCertOpenStore 실패합니다. |
CERT_STORE_PROV_LDAP 공급자 유형은 다음과 같은 상위 단어 플래그를 사용합니다.
값 | 의미 |
---|---|
|
pvPara 매개 변수에 명명된 URL에서 A 레코드 전용 DNS 조회를 수행합니다. 이렇게 하면 URL 호스트 이름을 확인할 때 거짓 DNS 쿼리가 생성되지 않습니다. pvPara 매개 변수의 도메인 이름이 아닌 호스트 이름을 전달할 때 이 플래그를 사용합니다. |
|
이 플래그를 사용하여 기존 LDAP 세션을 사용합니다. 이 플래그를 지정하면 pvPara 매개 변수는 사용할 LDAP 세션에 대한 정보를 포함하는 CERT_LDAP_STORE_OPENED_PARA 구조체의 주소입니다. |
|
일부 애플리케이션에 필요한 무결성을 제공하려면 Kerberos 인증 프로토콜을 사용하여 LDAP 서버 간에 모든 LDAP 트래픽에 디지털 서명합니다. |
|
CERT_LDAP_STORE_OPENED_FLAG 플래그와 함께 이 플래그를 사용하면 저장소가 닫힐 때 LDAP 세션의 바인딩이 해제됩니다. 저장소를 닫을 때 시스템은 ldap_unbind 함수를 사용하여 LDAP 세션을 바인딩 해제합니다. |
[in] pvPara
이 함수에 대한 추가 정보를 포함할 수 있는 32비트 값입니다. 이 매개 변수의 내용은 lpszStoreProvider 및 기타 매개 변수의 값에 따라 달라집니다.
반환 값
함수가 성공하면 함수는
함수가 실패하면 NULL반환합니다. 확장 오류 정보는 GetLastError호출합니다.
발언
시스템 저장소는 하나 이상의 물리적 형제 저장소로 구성된 컬렉션입니다. 각 시스템 저장소에 대해 미리 정의된 실제 형제 저장소가 있습니다. 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 |