Поделиться через


Функция CertAddStoreToCollection (wincrypt.h)

Функция CertAddStoreToCollection добавляет одноуровневое хранилище сертификатов в хранилище сертификатов коллекции. При добавлении хранилища сертификатов в хранилище коллекции все сертификаты, списки отзыва сертификатов (CRL) и списки доверия сертификатов (CCL) в хранилище, добавленном в хранилище коллекции, можно получить с помощью вызовов функций поиска или перечисления, использующих хранилище коллекции.

Синтаксис

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

Параметры

[in] hCollectionStore

Дескриптор хранилища сертификатов.

[in, optional] hSiblingStore

Дескриптор одноуровневого хранилища, добавляемого в хранилище коллекций. Дополнительные сведения см. в подразделе "Примечания".

[in] dwUpdateFlags

Указывает, можно ли добавлять сертификаты, списки отзыва сертификатов и списки сертификатов в новый одноуровневый элемент хранилища коллекции. Чтобы включить добавление, задайте параметру dwUpdateFlag значение CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG. Чтобы отключить добавление, задайте для параметра dwUpdateFlag значение 0.

[in] dwPriority

Задает уровень приоритета нового хранилища в коллекции, при этом нуль является самым низким приоритетом. Если для этого параметра передается ноль, указанное хранилище добавляется как последнее хранилище в коллекции. Уровни приоритета хранилищ в коллекции определяют порядок перечисления хранилищ и порядок поиска хранилищ при попытке получить сертификат, список отзыва сертификатов или список отзыва сертификатов. Уровни приоритета также определяют, в какое хранилище коллекции добавляется новый сертификат, список отзыва сертификатов или список CTL. Дополнительные сведения см. в подразделе "Примечания".

Возвращаемое значение

Если функция выполняется успешно, функция возвращает ненулевое значение, и новое хранилище добавляется в коллекцию хранилищ.

Если функция завершается сбоем, она возвращает ноль, а хранилище не было добавлено.

Комментарии

Хранилище коллекций имеет тот же дескриптор HCERTSTORE , что и одно хранилище; Таким образом, почти все функции, которые применяются к любому хранилищу сертификатов , также применяются к любому хранилищу коллекций. Процессы перечисления и поиска охватывают все хранилища в хранилище коллекции; Однако такие функции, как CertAddCertificateLinkToStore , которые добавляют ссылки на магазины, нельзя использовать с хранилищами коллекций.

Когда сертификат, список отзыва сертификатов или CTL добавляется в хранилище коллекции, в списке одноуровневых хранилищ в коллекции выполняется поиск по приоритету, чтобы найти первое хранилище, позволяющее добавить. Добавление включено, если CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG задано в вызове CertAddStoreToCollection . При использовании любой функции, которая добавляет элементы в хранилище, если хранилище, позволяющее добавить, не возвращает успех, функция сложения продолжает переходить в следующее хранилище без уведомления.

Когда хранилище коллекций и его одноуровневые хранилища закрываются с помощью CertCloseStore с помощью CERT_CLOSE_STORE_FORCE_FLAG, хранилище коллекций должно быть закрыто до того, как его одноуровневые хранилища. Если 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
Header wincrypt.h
Библиотека Crypt32.lib
DLL Crypt32.dll

См. также раздел

CertRemoveStoreFromCollection

Функции хранилища сертификатов