CertAddStoreToCollection 関数 (wincrypt.h)

CertAddStoreToCollection 関数は、兄弟証明書ストアをコレクション証明書ストアに追加します。 証明書ストアがコレクション ストアに追加されると、コレクション ストアに追加されたストア内のすべての証明書、 証明書失効リスト (CRL)、 証明書信頼リスト (CCTL) を、コレクション ストアを使用する find 関数呼び出しまたは列挙関数呼び出しを使用して取得できます。

構文

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

パラメーター

[in] hCollectionStore

証明書ストアのハンドル。

[in, optional] hSiblingStore

コレクション ストアに追加する兄弟ストアのハンドル。 詳細については、「解説」を参照してください。

[in] dwUpdateFlags

証明書、CRL、および CCTL をコレクション ストアの新しい兄弟ストア メンバーに追加できるかどうかを示します。 追加を有効にするには、 dwUpdateFlag を CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG に設定します。 追加を無効にするには、 dwUpdateFlag を 0 に設定します。

[in] dwPriority

コレクション内の新しいストアの優先度レベルを設定します。優先度は 0 です。 このパラメーターに 0 を渡すと、指定したストアがコレクションの最後のストアとして追加されます。 コレクション内のストアの優先度レベルによって、ストアが列挙される順序と、証明書、CRL、または CTL を取得しようとしたときのストアの検索順序が決まります。 また、優先度レベルは、新しい証明書、CRL、または CTL を追加するコレクションのストアを決定します。 詳細については、「解説」を参照してください。

戻り値

関数が成功すると、関数は 0 以外の値を返し、ストアのコレクションに新しいストアが追加されます。

関数が失敗すると、0 が返され、ストアは追加されませんでした。

注釈

コレクション ストアには、1 つのストアと同じ HCERTSTORE ハンドルがあります。したがって、 証明書ストア に適用されるほとんどすべての関数は、任意のコレクション ストアにも適用されます。 列挙プロセスと検索プロセスは、コレクション ストア内のすべてのストアにまたがっています。ただし、ストアへのリンクを追加する CertAddCertificateLinkToStore などの関数は、コレクション ストアでは使用できません。

証明書、CRL、または CTL がコレクション ストアに追加されると、コレクション内の兄弟ストアの一覧が優先順位で検索され、追加を許可する最初のストアが検索されます。 CertAddStoreToCollection 呼び出しでCERT_PHYSICAL_STORE_ADD_ENABLE_FLAGが設定されている場合、追加は有効になります。 ストアに要素を追加する関数を使用すると、追加を許可するストアが成功を返さない場合、追加関数は通知を提供せずに次のストアに進みます。

CERT_CLOSE_STORE_FORCE_FLAGを使用してコレクション ストアとその兄弟ストアを CertCloseStore で閉じる場合は、その兄弟ストアの前にコレクション ストアを閉じる必要があります。 CERT_CLOSE_STORE_FORCE_FLAGを使用しない場合は、ストアを任意の順序で閉じることができます。

次の例は、コレクション証明書ストアに兄弟証明書ストアを追加する方法を示しています。 この例の完全なコンテキストを含む完全な例については、「 Example C Program: Collection and Sibling Certificate Store Operations」を参照してください。

//-------------------------------------------------------------------
// 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
Library Crypt32.lib
[DLL] Crypt32.dll

こちらもご覧ください

CertRemoveStoreFromCollection

証明書ストア関数