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

Функция CertAddSerializedElementToStore добавляет в хранилище элемент сериализованного сертификата, списка отзыва сертификатов (CRL) или списка доверия сертификатов (CTL). Сериализованный элемент содержит закодированный сертификат, список отзыва сертификатов или список CTL и его расширенные свойства. Расширенные свойства связаны с сертификатом и не являются частью сертификата, выданного центром сертификации. Расширенные свойства недоступны в сертификате, если он используется на платформе, отличной от Майкрософт.

Синтаксис

BOOL CertAddSerializedElementToStore(
  [in]  HCERTSTORE hCertStore,
  [in]  const BYTE *pbElement,
  [in]  DWORD      cbElement,
  [in]  DWORD      dwAddDisposition,
  [in]  DWORD      dwFlags,
  [in]  DWORD      dwContextTypeFlags,
  [out] DWORD      *pdwContextType,
  [out] const void **ppvContext
);

Параметры

[in] hCertStore

Дескриптор хранилища сертификатов , в котором будет храниться созданный сертификат. Если hCertStore имеет значение NULL, функция создает копию сертификата, списка отзыва сертификатов или контекста CTL с расширенными свойствами, но сертификат, список отзыва сертификатов или CTL не сохраняется ни в одном хранилище.

[in] pbElement

Указатель на буфер, содержащий сведения о сертификате, списке отзыва сертификатов или списке сертификатов, которые необходимо сериализовать и добавить в хранилище сертификатов.

[in] cbElement

Размер буфера pbElement (в байтах).

[in] dwAddDisposition

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

Значение Значение
CERT_STORE_ADD_NEW
Если сертификат, список отзыва сертификатов или CTL является новым, он создается и сохраняется в хранилище. Операция завершается сбоем, если в хранилище уже существует идентичный сертификат, список отзыва сертификатов или CTL. Для последнего кода ошибки задано значение CRYPT_E_EXISTS.
CERT_STORE_ADD_USE_EXISTING
Если сертификат, список отзыва сертификатов или CTL является новым, он добавляется в хранилище. Если идентичный сертификат, список отзыва сертификатов или CTL уже существует, используется существующий элемент . Если ppvContext не имеет значение NULL, существующий контекст дублируется. Функция добавляет только те свойства, которые еще не существуют. Хэш-свойства SHA-1 и MD5 не копируются.
CERT_STORE_ADD_REPLACE_EXISTING
Если идентичный сертификат, список отзыва сертификатов или CTL уже существует в хранилище, существующий сертификат, список отзыва сертификатов или контекст CTL удаляется перед созданием и добавлением нового контекста.
CERT_STORE_ADD_ALWAYS
Не выполняется проверка, чтобы определить, существует ли идентичный сертификат, список отзыва сертификатов или CTL. Новый элемент всегда создается. Это может привести к дублированию в хранилище. Чтобы определить, существует ли элемент в хранилище, вызовите CertGetCRLFromStore или CertGetSubjectCertificateFromStore.
CERT_STORE_ADD_NEWER
Если существует соответствующий CRL или CTL или ссылка на соответствующий список отзыва сертификатов или CTL, функция сравнивает время NotBefore в списке отзыва сертификатов или CTL. Если существующее CRL или CTL имеет время NotBefore меньше времени NotBefore для нового элемента, старый элемент или ссылка заменяются так же, как и CERT_STORE_ADD_REPLACE_EXISTING. Если у существующего элемента время NotBefore больше или равно NotBefore для добавляемого элемента, функция завершается сбоем с getLastError , возвращающим код CRYPT_E_EXISTS.

Если соответствующий CRL или CTL либо ссылка на соответствующий CRL или CTL не найден в хранилище, в хранилище добавляется новый элемент.

CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES
Действие такое же, как и для CERT_STORE_ADD_NEWER. Однако при замене старого списка отзыва сертификатов или CTL свойства старого элемента включаются в замену.
CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES
Если соответствующий сертификат существует в хранилище, существующий контекст удаляется перед созданием и добавлением нового контекста. Новый добавленный контекст наследует свойства от существующего сертификата.

[in] dwFlags

Зарезервировано для будущего использования и должно быть равно нулю.

[in] dwContextTypeFlags

Определяет контексты, которые можно добавить. Например, чтобы добавить сертификат, список отзыва сертификатов или список CTL, задайте параметру dwContextTypeFlagsзначение CERT_STORE_CERTIFICATE_CONTEXT_FLAG или CERT_STORE_CRL_CONTEXT_FLAG.

В следующей таблице приведены флаги определенных типов контекста.

Значение Значение
CERT_STORE_ALL_CONTEXT_FLAG
Добавляет любой контекст.
CERT_STORE_CERTIFICATE_CONTEXT_FLAG
Добавляет только контекст сертификата.
CERT_STORE_CRL_CONTEXT_FLAG
Добавляет только контекст списка отзыва сертификатов.
CERT_STORE_CTL_CONTEXT_FLAG
Добавляет только контекст CTL.

[out] pdwContextType

Указатель на тип контекста добавленного сериализованного элемента. Это необязательный параметр, который может иметь значение NULL, что означает, что вызывающей приложению не требуется тип контекста .

В следующей таблице приведены определенные в настоящее время типы контекста.

Значение Значение
CERT_STORE_CERTIFICATE_CONTEXT
Сертификаты
CERT_STORE_CRL_CONTEXT
CRL
CERT_STORE_CTL_CONTEXT
CTL

[out] ppvContext

Указатель на указатель на декодированные сертификаты, CRL или контекст CTL. Это необязательный параметр, который может иметь значение NULL, что означает, что вызывающей приложению не требуется контекст добавленного или существующего сертификата, списка отзыва сертификатов или CTL.

Если ppvContext не имеет значение NULL, это должен быть адрес указателя на CERT_CONTEXT, CRL_CONTEXT или CTL_CONTEXT. После завершения работы приложения с контекстом контекст должен быть освобожден с помощью CertFreeCertificateContext для сертификата, CertFreeCRLContext для списка CRL или CertFreeCTLContext для CTL.

Возвращаемое значение

Если функция выполнена успешно, функция возвращает ненулевое значение.

Если функция завершается сбоем, она возвращает ноль. Чтобы получить дополнительные сведения об ошибке, вызовите Метод GetLastError. Ниже приведены некоторые возможные коды ошибок.

Код возврата Описание
CRYPT_E_EXISTS
Если параметру dwAddDisposition присвоено значение CERT_STORE_ADD_NEW, сертификат, список отзыва сертификатов или список отзыва сертификатов уже существует в хранилище.
E_INVALIDARG
Недопустимое значение ликвидации было указано в параметре dwAddDisposition .
 

В случае сбоя функции GetLastError может вернуть ошибку кодирования и декодирования абстрактного синтаксиса (ASN.1). Сведения об этих ошибках см. в разделе Кодирование и декодирование возвращаемых значений ASN.1.

Требования

Требование Значение
Минимальная версия клиента Windows XP [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2003 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header wincrypt.h
Библиотека Crypt32.lib
DLL Crypt32.dll

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

CertSerializeCRLStoreElement

CertSerializeCertificateStoreElement

Функции обслуживания хранилища сертификатов и сертификатов