Compartilhar via


Função CertCreateCertificateContext (wincrypt.h)

A função CertCreateCertificateContext cria um contexto de certificado de um certificado codificado. O contexto criado não é persistido em um repositório de certificados. A função faz uma cópia do certificado codificado dentro do contexto criado.

Sintaxe

PCCERT_CONTEXT CertCreateCertificateContext(
  [in] DWORD      dwCertEncodingType,
  [in] const BYTE *pbCertEncoded,
  [in] DWORD      cbCertEncoded
);

Parâmetros

[in] dwCertEncodingType

Especifica o tipo de codificação usado. É sempre aceitável especificar os tipos de codificação de certificado e mensagem combinando-os com uma operação OR bit a bit, conforme mostrado no exemplo a seguir:

X509_ASN_ENCODING | PKCS_7_ASN_ENCODING Tipos de codificação definidos atualmente são:

  • X509_ASN_ENCODING
  • PKCS_7_ASN_ENCODING

[in] pbCertEncoded

Um ponteiro para um buffer que contém o certificado codificado do qual o contexto deve ser criado.

[in] cbCertEncoded

O tamanho, em bytes, do buffer pbCertEncoded .

Valor retornado

Se a função for bem-sucedida, a função retornará um ponteiro para um CERT_CONTEXT somente leitura. Quando terminar de usar o contexto de certificado, libere-o chamando a função CertFreeCertificateContext .

Se a função não puder decodificar e criar o contexto do certificado, ela retornará NULL. Para obter informações de erro estendidas, chame GetLastError. Alguns códigos de erro possíveis seguem.

Código de retorno Descrição
E_INVALIDARG
Um tipo de codificação de certificado que não é válido foi especificado. Atualmente, há suporte apenas para o tipo X509_ASN_ENCODING.
 

Se a função falhar, GetLastError poderá retornar um erro de codificação/decodificação ASN.1 ( Abstract Syntax Notation One ). Para obter informações sobre esses erros, consulte Valores retornados de codificação/decodificação asn.1.

Comentários

O CERT_CONTEXT deve ser liberado chamando CertFreeCertificateContext. CertDuplicateCertificateContext pode ser chamado para tornar uma duplicata. CertSetCertificateContextProperty e CertGetCertificateContextProperty podem ser chamados para armazenar e ler propriedades para o certificado.

Exemplos

O exemplo a seguir mostra a criação de um contexto de certificado com base em um certificado codificado. O contexto criado não é colocado em um repositório de certificados. Para obter outro exemplo que usa essa função, consulte Exemplo de programa C: operações de repositório de certificados.

#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);
	}
}

Requisitos

   
Cliente mínimo com suporte Windows XP [aplicativos da área de trabalho | aplicativos UWP]
Servidor mínimo com suporte Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho wincrypt.h
Biblioteca Crypt32.lib
DLL Crypt32.dll

Confira também

CERT_CONTEXT

CertCreateCRLContext

CertCreateCTLContext

Certduplicatecertificatecontext

CertFreeCertificateContext

CertGetCertificateContextProperty

CertSetCertificateContextProperty

Funções de certificado