CertCreateContext 函数 (wincrypt.h)

CertCreateContext 函数从编码的字节创建指定的上下文。 创建的上下文不包括任何扩展属性。

语法

const void * CertCreateContext(
  [in]           DWORD                     dwContextType,
  [in]           DWORD                     dwEncodingType,
  [in]           const BYTE                *pbEncoded,
  [in]           DWORD                     cbEncoded,
  [in]           DWORD                     dwFlags,
  [in, optional] PCERT_CREATE_CONTEXT_PARA pCreatePara
);

参数

[in] dwContextType

指定可以创建的上下文。 例如,若要创建 证书上下文,请将 dwContextType 设置为 CERT_STORE_CERTIFICATE_CONTEXT。

下表显示了当前定义的上下文类型标志。

含义
CERT_STORE_CERTIFICATE_CONTEXT
证书上下文。
CERT_STORE_CRL_CONTEXT
CRL 上下文。
CERT_STORE_CTL_CONTEXT
CTL 上下文。

[in] dwEncodingType

指定使用的编码类型。 目前,仅使用X509_ASN_ENCODING和PKCS_7_ASN_ENCODING:但是,将来可能会添加其他编码类型。 对于当前任一编码类型,请使用:

X509_ASN_ENCODING |PKCS_7_ASN_ENCODING。

[in] pbEncoded

指向缓冲区的指针,该缓冲区包含要复制的现有编码上下文内容。

[in] cbEncoded

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

[in] dwFlags

以下标志值已定义,可以使用按位 OR 运算进行组合。

含义
CERT_CREATE_CONTEXT_NOCOPY_FLAG
创建的上下文直接指向 pbEncoded 指向的内容,而不是分配的副本。
CERT_CREATE_CONTEXT_SORTED_FLAG
函数创建包含已排序条目的上下文。 目前,此标志仅适用于 CTL 上下文。

对于 CTL,返回的 CTL_INFO 结构的 cCTLEntry 成员始终为零。 必须调用 CertFindSubjectInSortedCTLCertEnumSubjectInSortedCTL 来查找或枚举 CTL 条目。

CERT_CREATE_CONTEXT_NO_HCRYPTMSG_FLAG
默认情况下,创建 CTL 上下文时,会创建其 SignedData 消息的 HCRYTPMSG 句柄。 可以通过不创建此句柄来设置此标志以提高性能。 仅当 CERT_STORE_CTL_CONTEXT dwContextType 时,才能使用此标志。
CERT_CREATE_CONTEXT_NO_ENTRY_FLAG
默认情况下,创建 CTL 上下文时,其条目将解码。 设置此标志后,不会解码条目,并且性能会提高。 仅当 CERT_STORE_CTL_CONTEXT dwContextType 时,才能使用此标志。

[in, optional] pCreatePara

指向 CERT_CREATE_CONTEXT_PARA 结构的指针。

如果 pCreatePara 及其 pfnFree 成员都是非 NULL 成员,则 pfnFree 成员用于释放 pvFree 成员指定的内存。 如果 pvFree 成员为 NULL,则 pfnFree 成员用于释放 pbEncoded 指针。

如果 pCreatePara 或其 pfnFree 成员为 NULL,则不会尝试释放 pbEncoded

返回值

如果函数成功,则返回值是指向新创建的上下文的指针。 必须调用 pCreateParapvFree 成员来释放创建的上下文。

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

如果 GetLastError 返回 ERROR_CANCELLED,则表示 PFN_CERT_CREATE_CONTEXT_SORT_FUNC 回调函数返回 FALSE 以停止排序。

要求

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

另请参阅

CTL_INFO

CertEnumSubjectInSortedCTL

CertFindSubjectInSortedCTL

证书和证书存储维护函数