다음을 통해 공유


CertAddStoreToCollection 함수(wincrypt.h)

CertAddStoreToCollection 함수는 형제 인증서 저장소를 컬렉션 인증서 저장소에 추가합니다. 인증서 저장소가 컬렉션 저장소에 추가되면 컬렉션 저장소에 추가된 저장소의 모든 인증서, CRL( 인증서 해지 목록 ) 및 CTL( 인증서 신뢰 목록 )은 컬렉션 저장소를 사용하는 함수 호출을 찾거나 열거하여 검색할 수 있습니다.

구문

BOOL CertAddStoreToCollection(
  [in]           HCERTSTORE hCollectionStore,
  [in, optional] HCERTSTORE hSiblingStore,
  [in]           DWORD      dwUpdateFlags,
  [in]           DWORD      dwPriority
);

매개 변수

[in] hCollectionStore

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

[in, optional] hSiblingStore

컬렉션 저장소에 추가할 형제 저장소의 핸들입니다. 자세한 내용은 설명 부분을 참조하세요.

[in] dwUpdateFlags

인증서, CRL 및 CTL 컬렉션 저장소의 새 형제 저장소 멤버에 추가할 수 있는지 여부를 나타냅니다. 추가를 사용하도록 설정하려면 dwUpdateFlag 를 CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG. 추가를 사용하지 않도록 설정하려면 dwUpdateFlag 를 0으로 설정합니다.

[in] dwPriority

컬렉션에서 새 저장소의 우선 순위 수준을 설정하며 0은 가장 낮은 우선 순위입니다. 이 매개 변수에 대해 0이 전달되면 지정된 저장소가 컬렉션의 마지막 저장소로 추가됩니다. 컬렉션에 있는 저장소의 우선 순위 수준에 따라 저장소가 열거되는 순서와 인증서, CRL 또는 CTL을 검색할 때 저장소의 검색 순서가 결정됩니다. 우선 순위 수준은 새 인증서, CRL 또는 CTL이 추가되는 컬렉션의 저장소를 결정합니다. 자세한 내용은 설명 부분을 참조하세요.

반환 값

함수가 성공하면 함수는 0이 아닌 값을 반환하고 새 저장소가 저장소 컬렉션에 추가됩니다.

함수가 실패하면 0을 반환하고 저장소가 추가되지 않았습니다.

설명

컬렉션 저장소에는 단일 저장소와 동일한 HCERTSTORE 핸들이 있습니다. 따라서 인증서 저장소 에 적용되는 거의 모든 함수도 컬렉션 저장소에 적용됩니다. 열거형 및 검색 프로세스는 컬렉션 저장소의 모든 저장소에 걸쳐 있습니다. 그러나 저장소에 대한 링크를 추가하는 CertAddCertificateLinkToStore 와 같은 함수는 컬렉션 저장소에서 사용할 수 없습니다.

인증서, CRL 또는 CTL이 컬렉션 저장소에 추가되면 컬렉션의 형제 저장소 목록이 우선 순위에 따라 검색되어 추가할 수 있는 첫 번째 저장소를 찾습니다. CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG CertAddStoreToCollection 호출에서 설정된 경우 추가가 활성화됩니다. 저장소에 요소를 추가하는 함수를 사용하면 추가를 허용하는 저장소가 성공을 반환하지 않는 경우 추가 함수는 알림을 제공하지 않고 다음 저장소로 계속됩니다.

컬렉션 저장소와 해당 형제 저장소가 CERT_CLOSE_STORE_FORCE_FLAG 사용하여 CertCloseStore 로 닫힌 경우 해당 형제 저장소 전에 컬렉션 저장소를 닫아야 합니다. CERT_CLOSE_STORE_FORCE_FLAG 사용하지 않으면 어떤 순서로든 저장소를 닫을 수 있습니다.

예제

다음 예제에서는 컬렉션 인증서 저장소에 형제 인증서 저장소를 추가하는 방법을 보여 있습니다. 이 예제의 전체 컨텍스트를 포함하는 전체 예제는 예제 C 프로그램: 컬렉션 및 형제 인증서 저장소 작업을 참조하세요.

//-------------------------------------------------------------------
// Declare and initialize variables.

HCERTSTORE  hCollectionStore = NULL;     // The collection store 
                                         // handle
HCERTSTORE  hMemoryStore = NULL;         // A memory store handle
LPCSTR pszFileName = "TestStor.sto";     // Output file name
LPWSTR pswzFirstCert = L"Full Test Cert";// Subject of the first
                                         // certificate
LPWSTR pswzSecondCert = L"Microsoft";    // Subject of the second 
                                         // certificate
//-------------------------------------------------------------------
// Open a collection certificate store.

if(hCollectionStore = CertOpenStore(
    CERT_STORE_PROV_COLLECTION, // A collection store
    0,                          // Encoding type; not used with a
                                // collection store
    NULL,                       // Use the default provider
    0,                          // No flags
    NULL))                      // Not needed

{
    printf("The collection store was opened. \n");
}
else
{
    printf( "There was an error while opening the "
        "collection store! \n");
    exit(1);
}
//-------------------------------------------------------------------
// Open a new certificate store in memory.

if(hMemoryStore = CertOpenStore(
    CERT_STORE_PROV_MEMORY,    // A memory store
    0,                         // Encoding type; not used with a
                               // memory store
    NULL,                      // Use the default provider
    0,                         // No flags
    NULL))                     // Not needed
{
    printf("The memory store was opened. \n");
}
else
{
    printf( "There was an error while opening the memory store! \n");
    exit(1);
}
//-------------------------------------------------------------------
// Add the memory store as a sibling to the collection store. 
// All certificates in the memory store and any new certificate
// added to the memory store will also be available in the 
// collection
// store.

if(CertAddStoreToCollection(
    hCollectionStore,
    hMemoryStore,
    CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG,  // New certificates can be
                                          // added to the sibling
                                          // store.
    1))                                   // The sibling store's 
                                          // priority.
                                          // Because this is the 
                                          // store with the highest
                                          // priority, certificates
                                          // added to the collection
                                          // store will actually be
                                          // stored in this store.
{
    printf("The memory store was added to the collection store.\n");
}
else
{
    printf("The memory store was not added to the "
        "collection store.\n");
    exit(1);
}


//-------------------------------------------------------------------
// The store handles must be closed.

if(CertCloseStore(hCollectionStore,
                  0))
{
    printf("The collection store was closed. \n");
}
else
{
    printf("There was an error while closing the "
        "collection store! \n");
}

if(CertCloseStore(hMemoryStore, 0))
{
    printf("The memory store was closed. \n");
}
else
{
    printf("There was an error while closing the memory store! \n");
}

요구 사항

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

추가 정보

CertRemoveStoreFromCollection

인증서 저장소 함수