Функция 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. Ниже приведены некоторые возможные коды ошибок.
Код возврата | Описание |
---|---|
|
Указан недопустимый тип кодирования сертификата. В настоящее время поддерживается только тип 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 |
См. также раздел
CertDuplicateCertificateContext
CertGetCertificateContextProperty