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。 一些可能的错误代码随之而来。

返回代码 说明
E_INVALIDARG
指定了无效的证书编码类型。 目前,仅支持X509_ASN_ENCODING类型。
 

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

注解

必须通过调用 CertFreeCertificateContext 来释放CERT_CONTEXT。 可以调用 CertDuplicateCertificateContext 来复制。 可以调用 CertSetCertificateContextPropertyCertGetCertificateContextProperty 来存储和读取证书的属性。

示例

以下示例演示如何从编码的证书创建证书上下文。 创建的上下文不会放入证书存储中。 有关使用此函数的另一个示例,请参阅 示例 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

另请参阅

CERT_CONTEXT

CertCreateCRLContext

CertCreateCTLContext

CertDuplicateCertificateContext

CertFreeCertificateContext

CertGetCertificateContextProperty

CertSetCertificateContextProperty

证书函数