Функция CertCreateCertificateContext (wincrypt.h)

Функция CertCreateCertificateContext создает контекст сертификата из закодированного сертификата. Созданный контекст не сохраняется в хранилище сертификатов. Функция создает копию закодированного сертификата в созданном контексте.

Синтаксис

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

Параметры

[in] dwCertEncodingType

Указывает тип используемой кодировки. Всегда допустимо указывать типы кодирования сертификатов и сообщений, объединяя их с побитовой операцией ИЛИ , как показано в следующем примере:

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 может вернуть ошибку кодирования и декодирования абстрактного синтаксиса (ASN.1). Сведения об этих ошибках см. в разделе Кодирование и декодирование возвращаемых значений ASN.1.

Комментарии

CERT_CONTEXT необходимо освободить, вызвав CertFreeCertificateContext. Для создания дубликата можно вызвать 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
Header wincrypt.h
Библиотека Crypt32.lib
DLL Crypt32.dll

См. также раздел

CERT_CONTEXT

CertCreateCRLContext

CertCreateCTLContext

CertDuplicateCertificateContext

CertFreeCertificateContext

CertGetCertificateContextProperty

CertSetCertificateContextProperty

Функции сертификата