Функция 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
Указывает действие, которое необходимо выполнить, если сертификат, список отзыва сертификатов или список отзыва сертификатов уже существует в хранилище. В следующей таблице приведены определенные в настоящее время значения ликвидации.
Значение | Значение |
---|---|
|
Если сертификат, список отзыва сертификатов или CTL является новым, он создается и сохраняется в хранилище. Операция завершается сбоем, если в хранилище уже существует идентичный сертификат, список отзыва сертификатов или CTL. Для последнего кода ошибки задано значение CRYPT_E_EXISTS. |
|
Если сертификат, список отзыва сертификатов или CTL является новым, он добавляется в хранилище. Если идентичный сертификат, список отзыва сертификатов или CTL уже существует, используется существующий элемент . Если ppvContext не имеет значение NULL, существующий контекст дублируется. Функция добавляет только те свойства, которые еще не существуют. Хэш-свойства SHA-1 и MD5 не копируются. |
|
Если идентичный сертификат, список отзыва сертификатов или CTL уже существует в хранилище, существующий сертификат, список отзыва сертификатов или контекст CTL удаляется перед созданием и добавлением нового контекста. |
|
Не выполняется проверка, чтобы определить, существует ли идентичный сертификат, список отзыва сертификатов или CTL. Новый элемент всегда создается. Это может привести к дублированию в хранилище. Чтобы определить, существует ли элемент в хранилище, вызовите CertGetCRLFromStore или CertGetSubjectCertificateFromStore. |
|
Если существует соответствующий 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. Однако при замене старого списка отзыва сертификатов или CTL свойства старого элемента включаются в замену. |
|
Если соответствующий сертификат существует в хранилище, существующий контекст удаляется перед созданием и добавлением нового контекста. Новый добавленный контекст наследует свойства от существующего сертификата. |
[in] dwFlags
Зарезервировано для будущего использования и должно быть равно нулю.
[in] dwContextTypeFlags
Определяет контексты, которые можно добавить. Например, чтобы добавить сертификат, список отзыва сертификатов или список CTL, задайте параметру dwContextTypeFlagsзначение CERT_STORE_CERTIFICATE_CONTEXT_FLAG или CERT_STORE_CRL_CONTEXT_FLAG.
В следующей таблице приведены флаги определенных типов контекста.
[out] pdwContextType
Указатель на тип контекста добавленного сериализованного элемента. Это необязательный параметр, который может иметь значение NULL, что означает, что вызывающей приложению не требуется тип контекста .
В следующей таблице приведены определенные в настоящее время типы контекста.
Значение | Значение |
---|---|
|
Сертификаты |
|
CRL |
|
CTL |
[out] ppvContext
Указатель на указатель на декодированные сертификаты, CRL или контекст CTL. Это необязательный параметр, который может иметь значение NULL, что означает, что вызывающей приложению не требуется контекст добавленного или существующего сертификата, списка отзыва сертификатов или CTL.
Если ppvContext не имеет значение NULL, это должен быть адрес указателя на CERT_CONTEXT, CRL_CONTEXT или CTL_CONTEXT. После завершения работы приложения с контекстом контекст должен быть освобожден с помощью CertFreeCertificateContext для сертификата, CertFreeCRLContext для списка CRL или CertFreeCTLContext для CTL.
Возвращаемое значение
Если функция выполнена успешно, функция возвращает ненулевое значение.
Если функция завершается сбоем, она возвращает ноль. Чтобы получить дополнительные сведения об ошибке, вызовите Метод GetLastError. Ниже приведены некоторые возможные коды ошибок.
Код возврата | Описание |
---|---|
|
Если параметру dwAddDisposition присвоено значение CERT_STORE_ADD_NEW, сертификат, список отзыва сертификатов или список отзыва сертификатов уже существует в хранилище. |
|
Недопустимое значение ликвидации было указано в параметре dwAddDisposition . |
В случае сбоя функции GetLastError может вернуть ошибку кодирования и декодирования абстрактного синтаксиса (ASN.1). Сведения об этих ошибках см. в разделе Кодирование и декодирование возвращаемых значений ASN.1.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2003 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | wincrypt.h |
Библиотека | Crypt32.lib |
DLL | Crypt32.dll |