CertAddCTLLinkToStore 函数 (wincrypt.h)
CertAddCTLLinkToStore 函数将存储区中的链接添加到证书信任列表 (CTL) 不同存储中的上下文。 此函数将添加指向原始 CTL 上下文的链接,而不是创建和添加 CTL 上下文的副本。
语法
BOOL CertAddCTLLinkToStore(
[in] HCERTSTORE hCertStore,
[in] PCCTL_CONTEXT pCtlContext,
[in] DWORD dwAddDisposition,
[out, optional] PCCTL_CONTEXT *ppStoreContext
);
参数
[in] hCertStore
要在其中添加链接的证书存储的句柄。
[in] pCtlContext
指向要链接 的CTL_CONTEXT 结构的指针。
[in] dwAddDisposition
指定在存储中已存在匹配 CTL 或指向匹配 CTL 的链接时要执行的操作。 当前定义的处置值及其用法如下所示。
值 | 含义 |
---|---|
|
不对现有的匹配 CTL 或指向匹配 CTL 的链接进行检查。 始终会向存储中添加新的 CTL。 这可能会导致存储中出现重复项。 |
|
如果存在匹配的 CTL 或指向匹配 CTL 的链接,则操作将失败。 GetLastError 返回CRYPT_E_EXISTS代码。 |
|
如果存在匹配的 CTL 或指向匹配 CTL 的链接,则会比较 CTL 上的 ThisUpdate 时间。 如果现有 CTL 的 ThisUpdate 时间小于新 CTL 上的 ThisUpdate 时间,则旧 CTL 或链接将替换为 CERT_STORE_ADD_REPLACE_EXISTING。 如果现有 CTL 的 ThisUpdate 时间大于或等于要添加的 CTL 上的 ThisUpdate 时间,则函数将失败,并返回CRYPT_E_EXISTS代码的 GetLastError 。
如果在存储中找不到匹配的 CTL 或指向匹配 CTL 的链接,则会将新的 CTL 添加到存储中。 |
|
该操作与CERT_STORE_ADD_NEWER相同,不同之处在于,如果替换了较旧的 CTL,旧 CTL 的属性将合并到替换 CTL 中。 |
|
如果存在匹配的 CTL 或指向匹配 CTL 的链接,则会删除现有的 CTL 或链接,并创建一个新的 CTL 并将其添加到存储中。 如果匹配的 CTL 或指向匹配 CTL 的链接不存在,则会添加一个。 |
|
如果存储中存在匹配的 CTL,则会在创建和添加新上下文之前删除该现有上下文。 添加的上下文从现有 CTL 继承属性。 |
|
如果存在匹配的 CTL 或指向匹配 CTL 的链接,则使用现有 CTL 并添加新 CTL 中的属性。 函数不会失败,但不会添加新的 CTL。 如果 ppCertContext 不为 NULL,则现有上下文将重复。
如果匹配的 CTL 或指向匹配 CTL 的链接不存在,则会添加新的 CTL。 |
[out, optional] ppStoreContext
指向指向所创建链接副本的指针的指针。 ppStoreContext 可以为 NULL ,表示不需要链接的副本。 如果创建了链接的副本,则必须使用 CertFreeCTLContext 释放该副本。
返回值
如果函数成功,则返回值为 TRUE。
如果函数失败,则返回值为 FALSE。 有关扩展的错误信息,请调用 GetLastError。 下面是一些可能的错误代码。
返回代码 | 说明 |
---|---|
|
对于 CERT_STORE_ADD_NEW的 dwAddDisposition,CTL 已存在于存储中。 |
|
dwAddDisposition 参数指定的 add disposition 无效。 |
注解
由于链接提供对原始 CTL 上下文的访问,因此在链接的 CTL 上下文中设置扩展属性会更改原始 CTL 的位置和指向该 CTL 的任何其他链接中的扩展属性。
不能将链接添加到作为集合打开的存储区。 作为集合打开的存储区包括使用 CertOpenSystemStore 或 CertOpenStore 使用 CERT_STORE_PROV_SYSTEM 或 CERT_STORE_PROV_COLLECTION 打开的所有存储。 另请参阅 CertAddStoreToCollection。
使用链接并使用 CERT_CLOSE_STORE_FORCE_FLAG 调用 CertCloseStore 时,必须先关闭使用链接的存储,然后才能关闭包含原始上下文的存储。 如果未使用CERT_CLOSE_STORE_FORCE_FLAG,则可以按任一顺序关闭这两个商店。
若要从证书存储中删除 CTL 上下文链接,请使用 CertDeleteCTLFromStore 函数。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP [桌面应用 | UWP 应用] |
最低受支持的服务器 | Windows Server 2003 [桌面应用 | UWP 应用] |
目标平台 | Windows |
标头 | wincrypt.h |
Library | Crypt32.lib |
DLL | Crypt32.dll |