CertAddSerializedElementToStore 函数 (wincrypt.h)
CertAddSerializedElementToStore 函数将序列化证书、证书吊销列表 (CRL) 或证书信任列表 (CTL) 元素添加到存储中。 序列化元素包含编码的证书、CRL 或 CTL 及其扩展属性。 扩展属性与证书相关联,不是 证书颁发机构颁发的证书的一部分。 在非 Microsoft 平台上使用证书时,扩展属性在证书上不可用。
语法
BOOL CertAddSerializedElementToStore(
[in] HCERTSTORE hCertStore,
[in] const BYTE *pbElement,
[in] DWORD cbElement,
[in] DWORD dwAddDisposition,
[in] DWORD dwFlags,
[in] DWORD dwContextTypeFlags,
[out] DWORD *pdwContextType,
[out] const void **ppvContext
);
参数
[in] hCertStore
将存储所创建 证书 的证书存储的句柄。 如果 hCertStore 为 NULL,则该函数会使用其扩展属性创建证书、CRL 或 CTL 上下文的副本,但证书、CRL 或 CTL 不会保留在任何存储中。
[in] pbElement
指向缓冲区的指针,该缓冲区包含要序列化并添加到证书存储的证书、CRL 或 CTL 信息。
[in] cbElement
pbElement 缓冲区的大小(以字节为单位)。
[in] dwAddDisposition
指定在存储中已存在证书、CRL 或 CTL 时要执行的操作。 下表显示了当前定义的处置值。
值 | 含义 |
---|---|
|
如果证书、CRL 或 CTL 是新的,则会创建该证书并将其保存到存储中。 如果存储中已存在相同的证书、CRL 或 CTL,则操作失败。 最后一个错误代码设置为CRYPT_E_EXISTS。 |
|
如果证书、CRL 或 CTL 是新的,则会将其添加到存储中。 如果已存在相同的证书、CRL 或 CTL,则使用现有元素。 如果 ppvContext 不为 NULL,则现有上下文将重复。 函数仅添加尚不存在的属性。 不会复制 SHA-1 和 MD5 哈希属性。 |
|
如果存储中已存在相同的证书、CRL 或 CTL,则会在创建新上下文之前删除现有证书、CRL 或 CTL 上下文。 |
|
不进行检查来确定是否已存在相同的证书、CRL 或 CTL。 始终创建一个新元素。 这可能会导致存储中出现重复项。 若要确定该元素是否已存在于存储中,请调用 CertGetCRLFromStore 或 CertGetSubjectCertificateFromStore。 |
|
如果存在匹配的 CRL 或 CTL,或者存在指向匹配 CRL 或 CTL 的链接,则函数将比较 CRL 或 CTL 上的 NotBefore 时间。 如果现有 CRL 或 CTL 的 NotBefore 时间小于新元素上的 NotBefore 时间,则旧元素或链接将替换为CERT_STORE_ADD_REPLACE_EXISTING。 如果现有元素的 NotBefore 时间大于或等于要添加的元素上的 NotBefore 时间,则函数将失败,并返回CRYPT_E_EXISTS代码的 GetLastError 。
如果在存储中找不到匹配的 CRL 或 CTL,或者指向匹配的 CRL 或 CTL 的链接,则会向存储区添加新元素。 |
|
操作与CERT_STORE_ADD_NEWER操作相同。 但是,如果替换了较旧的 CRL 或 CTL,则旧元素的属性将合并到替换中。 |
|
如果存储中存在匹配的证书,则会在创建和添加新上下文之前删除现有上下文。 新添加的上下文从现有证书继承属性。 |
[in] dwFlags
保留以供将来使用,必须为零。
[in] dwContextTypeFlags
具体说明可添加的上下文。 例如,若要添加证书、CRL 或 CTL,请将 dwContextTypeFlags 设置为 CERT_STORE_CERTIFICATE_CONTEXT_FLAG 或 CERT_STORE_CRL_CONTEXT_FLAG。
下表显示了当前定义的上下文类型标志。
值 | 含义 |
---|---|
|
添加任何上下文。 |
|
仅添加证书上下文。 |
|
仅添加 CRL 上下文。 |
|
仅添加 CTL 上下文。 |
[out] pdwContextType
指向已添加的序列化元素的上下文类型的指针。 这是一个可选参数,可以为 NULL,表示调用应用程序不需要 上下文 类型。
下表显示了当前定义的上下文类型。
值 | 含义 |
---|---|
|
证书 |
|
CRL |
|
CTL |
[out] ppvContext
指向指向已解码证书、CRL 或 CTL 上下文的指针的指针。 这是一个可选参数,可以为 NULL,表示调用应用程序不需要已添加或现有证书、CRL 或 CTL 的上下文。
如果 ppvContext 不为 NULL,则它必须是指向 CERT_CONTEXT、 CRL_CONTEXT或 CTL_CONTEXT指针的地址。 当应用程序使用完上下文后,必须使用 CertFreeCertificateContext (用于证书)、使用 CertFreeCRLContext (用于 CRL)或 使用 CertFreeCTLContext (用于 CTL)来释放上下文。
返回值
如果函数成功,则函数返回非零值。
如果函数失败,则返回零。 有关扩展的错误信息,请调用 GetLastError。 下面是一些可能的错误代码。
返回代码 | 说明 |
---|---|
|
如果将 dwAddDisposition 参数设置为 CERT_STORE_ADD_NEW,则存储中已存在证书、CRL 或 CTL。 |
|
dwAddDisposition 参数中指定了无效的处置值。 |
如果函数失败, GetLastError 可能会返回 抽象语法表示法 One (ASN.1) 编码/解码错误。 有关这些错误的信息,请参阅 ASN.1 编码/解码返回值。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP [桌面应用 | UWP 应用] |
最低受支持的服务器 | Windows Server 2003 [桌面应用 | UWP 应用] |
目标平台 | Windows |
标头 | wincrypt.h |
Library | Crypt32.lib |
DLL | Crypt32.dll |