CertCreateCertificateContext 函数 (wincrypt.h)
CertCreateCertificateContext 函数从编码的证书创建证书上下文。 创建的上下文不会保存到证书存储中。 函数在创建的上下文中生成编码证书的副本。
语法
PCCERT_CONTEXT CertCreateCertificateContext(
[in] DWORD dwCertEncodingType,
[in] const BYTE *pbCertEncoded,
[in] DWORD cbCertEncoded
);
参数
[in] dwCertEncodingType
指定使用的编码类型。 始终可以通过将证书和 消息编码类型 与按位 OR 操作结合使用来指定它们,如以下示例所示:
X509_ASN_ENCODING |PKCS_7_ASN_ENCODING当前定义的编码类型为:
- X509_ASN_ENCODING
- PKCS_7_ASN_ENCODING
[in] pbCertEncoded
指向缓冲区的指针,该缓冲区包含要从中创建上下文的编码证书。
[in] cbCertEncoded
pbCertEncoded 缓冲区的大小(以字节为单位)。
返回值
如果函数成功,则函数返回指向只读 CERT_CONTEXT的指针。 使用完证书上下文后,通过调用 CertFreeCertificateContext 函数来释放它。
如果函数无法解码并创建 证书上下文,则返回 NULL。 有关扩展的错误信息,请调用 GetLastError。 一些可能的错误代码随之而来。
返回代码 | 说明 |
---|---|
|
指定了无效的证书编码类型。 目前,仅支持X509_ASN_ENCODING类型。 |
如果函数失败, GetLastError 可能会返回 抽象语法表示法 One (ASN.1) 编码/解码错误。 有关这些错误的信息,请参阅 ASN.1 编码/解码返回值。
注解
必须通过调用 CertFreeCertificateContext 来释放CERT_CONTEXT。 可以调用 CertDuplicateCertificateContext 来复制。 可以调用 CertSetCertificateContextProperty 和 CertGetCertificateContextProperty 来存储和读取证书的属性。
示例
以下示例演示如何从编码的证书创建证书上下文。 创建的上下文不会放入证书存储中。 有关使用此函数的另一个示例,请参阅 示例 C 程序:证书存储操作。
#include <windows.h>
#include <stdio.h>
#include <Wincrypt.h>
#define MY_ENCODING_TYPE (PKCS_7_ASN_ENCODING | X509_ASN_ENCODING)
void main()
{
PCCERT_CONTEXT pCertContext = NULL;
//------------------------------------------------------------------
// Create a new certificate from the encoded part of
// an available certificate. pDesiredCert is a previously
// assigned PCCERT_CONTEXT variable.
if(pCertContext = CertCreateCertificateContext(
MY_ENCODING_TYPE, // The encoding type
pDesiredCert->pbCertEncoded, // The encoded data from
// the certificate retrieved
pDesiredCert->cbCertEncoded)) // The length of the encoded data
{
printf("A new certificate has been created.\n");
// Use the certificate context as needed.
// ...
// When finished, free the certificate context.
CertFreeCertificateContext(pCertContext);
}
else
{
printf("A new certificate could not be created.\n");
exit(1);
}
}
要求
最低受支持的客户端 | Windows XP [桌面应用 | UWP 应用] |
最低受支持的服务器 | Windows Server 2003 [桌面应用 | UWP 应用] |
目标平台 | Windows |
标头 | wincrypt.h |
Library | Crypt32.lib |
DLL | Crypt32.dll |
另请参阅
CertDuplicateCertificateContext
CertGetCertificateContextProperty