CertAddStoreToCollection 函数 (wincrypt.h)
CertAddStoreToCollection 函数将同级证书存储添加到集合证书存储。 将证书存储添加到集合存储后,可以使用使用集合存储的 find 或 enumerate 函数调用检索所有证书、 证书吊销 (列表 (CRL) ,以及添加到集合存储的存储区中) 的 证书信任列表 。
语法
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 设置为零。
[in] dwPriority
设置集合中新存储的优先级,零为最低优先级。 如果为此参数传递零,则将指定的存储追加为集合中的最后一个存储。 集合中存储的优先级决定了枚举存储的顺序,以及尝试检索证书、CRL 或 CTL 时存储的搜索顺序。 优先级还确定将新证书、CRL 或 CTL 添加到集合的哪个存储区。 有关详细信息,请参阅“备注”。
返回值
如果函数成功,该函数将返回非零值,并将新存储添加到存储集合中。
如果函数失败,它将返回零,并且未添加存储。
注解
集合存储具有与单个 存储相同的 HCERTSTORE 句柄;因此,几乎所有应用于任何 证书存储 的函数也适用于任何集合存储。 枚举和搜索过程跨集合存储区中的所有存储;但是,将链接添加到存储的 CertAddCertificateLinkToStore 等函数不能与集合存储一起使用。
将证书、CRL 或 CTL 添加到集合存储时,将按优先级顺序搜索集合中的同级存储的列表,以查找允许添加的第一个存储。 如果在 CertAddStoreToCollection 调用中设置了CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG,则启用添加。 对于向存储添加元素的任何函数,如果允许添加的存储不返回成功,则加法函数将继续转到下一个存储,而不提供通知。
当集合存储及其同级存储使用 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 |
标头 | wincrypt.h |
Library | Crypt32.lib |
DLL | Crypt32.dll |