CertAddEncodedCTLToStore 函数 (wincrypt.h)

CertAddEncodedCTLToStore 函数从编码的 CTL) 上下文 (CTL 创建证书信任列表,并将其添加到证书存储。 函数在将 CTL 上下文添加到存储区之前,会对其进行复制。

语法

BOOL CertAddEncodedCTLToStore(
  [in]            HCERTSTORE    hCertStore,
  [in]            DWORD         dwMsgAndCertEncodingType,
  [in]            const BYTE    *pbCtlEncoded,
  [in]            DWORD         cbCtlEncoded,
  [in]            DWORD         dwAddDisposition,
  [out, optional] PCCTL_CONTEXT *ppCtlContext
);

参数

[in] hCertStore

证书存储的句柄。

[in] dwMsgAndCertEncodingType

指定使用的编码类型。 必须通过将证书和 消息编码类型 与按位 OR 操作组合来指定,如以下示例所示:

X509_ASN_ENCODING |PKCS_7_ASN_ENCODING

当前定义的编码类型为:

  • X509_ASN_ENCODING
  • PKCS_7_ASN_ENCODING

[in] pbCtlEncoded

指向包含要添加到证书存储的编码 CTL 的缓冲区的指针。

[in] cbCtlEncoded

pbCtlEncoded 缓冲区的大小(以字节为单位)。

[in] dwAddDisposition

指定在存储中已存在匹配 CTL 或指向匹配 CTL 的链接时要执行的操作。 当前定义的处置值及其用途如下

含义
CERT_STORE_ADD_ALWAYS
不检查现有匹配 CTL 或指向匹配 CTL 的链接。 始终将新的 CTL 添加到存储区。 这可能会导致存储中出现重复项。
CERT_STORE_ADD_NEW
如果存在匹配的 CTL 或指向匹配 CTL 的链接,则操作将失败。 GetLastError 返回CRYPT_E_EXISTS代码。
CERT_STORE_ADD_NEWER
如果存在匹配的 CTL 或指向匹配 CTL 的链接,则会比较 CTL 上的 ThisUpdate 时间。 如果现有 CTL 的 ThisUpdate 时间小于新 CTL 上的 ThisUpdate 时间,则会替换旧的 CTL 或链接,就像CERT_STORE_ADD_REPLACE_EXISTING一样。 如果现有 CTL 的 ThisUpdate 时间大于或等于要添加的 CTL 上的 ThisUpdate 时间,则函数将 失败并返回 CRYPT_E_EXISTS代码。

如果在存储中找不到匹配的 CTL 或指向匹配 CTL 的链接,则会将新的 CTL 添加到存储中。

CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES
该操作与 CERT_STORE_ADD_NEWER 相同,不同之处在于,如果替换了较旧的 CTL,则旧 CTL 的属性将合并到替换 CTL 中。
CERT_STORE_ADD_REPLACE_EXISTING
如果存在匹配的 CTL 或指向匹配 CTL 的链接,则会删除现有的 CTL 或链接,并创建一个新的 CTL 并将其添加到存储中。 如果匹配的 CTL 或指向匹配 CTL 的链接不存在,则会添加一个。
CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES
如果存储中存在匹配的 CTL,则会在创建新上下文并添加新上下文之前删除该现有上下文。 添加的上下文从现有 CTL 继承属性。
CERT_STORE_ADD_USE_EXISTING
如果存在匹配的 CTL 或指向匹配 CTL 的链接,则使用现有 CTL 并添加新 CTL 中的属性。 函数不会失败,但不会添加新的 CTL。 如果 ppCertContext 不为 NULL,则现有上下文将重复。

如果匹配的 CTL 或指向匹配 CTL 的链接不存在,则会添加新的 CTL。

[out, optional] ppCtlContext

指向已解码CTL_CONTEXT结构的指针 指针。 可以为 NULL ,表示调用应用程序不需要添加或现有 CTL 的副本。 如果复制完成,则必须使用 CertFreeCTLContext 释放该副本。

返回值

如果函数成功,则返回值为 TRUE

如果函数失败,则返回值为 FALSE。 有关扩展的错误信息,请调用 GetLastError

一些可能的错误代码随之而来。

返回代码 说明
CRYPT_E_EXISTS
CERT_STORE_ADD_NEW已设置,并且存储中已存在 CTL;或 CERT_STORE_ADD_NEWER 已设置,并且存储区中有一个 CTL, 其 ThisUpdate 时间大于或等于要添加的 CTL 上的 ThisUpdate 时间。
E_INVALIDARG
在 dwAddDisposition 参数中指定了无效的处置值,或者指定了无效的编码类型。 目前,仅支持X509_ASN_ENCODING和PKCS_7_ASN_ENCODING编码类型。
 

如果函数失败, GetLastError 可能会返回 抽象语法表示法 One (ASN.1) 编码/解码错误。 有关这些错误的信息,请参阅 ASN.1 编码/解码返回值

要求

要求
最低受支持的客户端 Windows XP [桌面应用 | UWP 应用]
最低受支持的服务器 Windows Server 2003 [桌面应用 | UWP 应用]
目标平台 Windows
标头 wincrypt.h
Library Crypt32.lib
DLL Crypt32.dll

另请参阅

CertAddCTLContextToStore

CertFreeCTLContext

证书信任列表函数