Fungsi CertAddStoreToCollection (wincrypt.h)

Fungsi CertAddStoreToCollection menambahkan penyimpanan sertifikat saudara ke penyimpanan sertifikat koleksi. Ketika penyimpanan sertifikat telah ditambahkan ke penyimpanan koleksi, semua sertifikat, daftar pencabutan sertifikat (CRL), dan daftar kepercayaan sertifikat (CTL) di penyimpanan yang telah ditambahkan ke penyimpanan koleksi dapat diambil dengan menggunakan panggilan fungsi temukan atau hitung yang menggunakan penyimpanan koleksi.

Sintaks

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

Parameter

[in] hCollectionStore

Menangani penyimpanan sertifikat.

[in, optional] hSiblingStore

Menangani penyimpanan saudara untuk ditambahkan ke penyimpanan koleksi. Untuk informasi selengkapnya, lihat Keterangan.

[in] dwUpdateFlags

Menunjukkan apakah sertifikat, CRL, dan CCL dapat ditambahkan ke anggota toko saudara baru dari penyimpanan koleksi. Untuk mengaktifkan penambahan, atur dwUpdateFlag ke CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG. Untuk menonaktifkan penambahan, atur dwUpdateFlag ke nol.

[in] dwPriority

Menetapkan tingkat prioritas penyimpanan baru dalam koleksi, dengan nol menjadi prioritas terendah. Jika nol diteruskan untuk parameter ini, penyimpanan yang ditentukan ditambahkan sebagai penyimpanan terakhir dalam koleksi. Tingkat prioritas penyimpanan dalam koleksi menentukan urutan di mana penyimpanan dijumlahkan, dan urutan pencarian toko saat mencoba mengambil sertifikat, CRL, atau CTL. Tingkat prioritas juga menentukan penyimpanan koleksi, CRL, atau CTL baru mana yang ditambahkan. Untuk informasi selengkapnya, lihat Keterangan.

Nilai kembali

Jika fungsi berhasil, fungsi mengembalikan bukan nol dan penyimpanan baru ditambahkan ke koleksi toko.

Jika fungsi gagal, fungsi mengembalikan nol dan penyimpanan tidak ditambahkan.

Keterangan

Toko koleksi memiliki handel HCERTSTORE yang sama dengan penyimpanan tunggal; dengan demikian, hampir semua fungsi yang berlaku untuk penyimpanan sertifikat apa pun juga berlaku untuk penyimpanan koleksi apa pun. Proses enumerasi dan pencarian mencakup semua toko di penyimpanan koleksi; namun, fungsi seperti CertAddCertificateLinkToStore yang menambahkan tautan ke penyimpanan tidak dapat digunakan dengan penyimpanan koleksi.

Saat sertifikat, CRL, atau CTL ditambahkan ke penyimpanan koleksi, daftar penyimpanan saudara dalam koleksi dicari dalam urutan prioritas untuk menemukan penyimpanan pertama yang memungkinkan penambahan. Penambahan diaktifkan jika CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG diatur dalam panggilan CertAddStoreToCollection . Dengan fungsi apa pun yang menambahkan elemen ke penyimpanan, jika penyimpanan yang memungkinkan penambahan tidak mengembalikan keberhasilan, fungsi penambahan berlanjut ke penyimpanan berikutnya tanpa memberikan pemberitahuan.

Ketika toko koleksi dan toko saudaranya ditutup dengan CertCloseStore menggunakan CERT_CLOSE_STORE_FORCE_FLAG, toko koleksi harus ditutup sebelum toko saudaranya. Jika CERT_CLOSE_STORE_FORCE_FLAG tidak digunakan, toko dapat ditutup dalam urutan apa pun.

Contoh

Contoh berikut menunjukkan penambahan penyimpanan sertifikat saudara ke penyimpanan sertifikat koleksi. Untuk contoh lengkap termasuk konteks lengkap untuk contoh ini, lihat Contoh Program C: Koleksi dan Operasi Penyimpanan Sertifikat Saudara.

//-------------------------------------------------------------------
// 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");
}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows XP [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows Server 2003 [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header wincrypt.h
Pustaka Crypt32.lib
DLL Crypt32.dll

Lihat juga

CertRemoveStoreFromCollection

Fungsi Penyimpanan Sertifikat