Поделиться через


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

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

Синтаксис

BOOL CertAddCertificateContextToStore(
  [in]            HCERTSTORE     hCertStore,
  [in]            PCCERT_CONTEXT pCertContext,
  [in]            DWORD          dwAddDisposition,
  [out, optional] PCCERT_CONTEXT *ppStoreContext
);

Параметры

[in] hCertStore

Дескриптор хранилища сертификатов.

[in] pCertContext

Указатель на структуру CERT_CONTEXT , добавляемую в хранилище.

[in] dwAddDisposition

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

Значение Значение
CERT_STORE_ADD_ALWAYS
Функция не проверка для существующего соответствующего сертификата или ссылки на соответствующий сертификат. В хранилище всегда добавляется новый сертификат. Это может привести к дублированию в магазине.
CERT_STORE_ADD_NEW
Если соответствующий сертификат или ссылка на соответствующий сертификат существует, операция завершается сбоем. GetLastError возвращает код CRYPT_E_EXISTS.
CERT_STORE_ADD_NEWER
Если соответствующий сертификат или ссылка на соответствующий сертификат существует, а время NotBefore существующего контекста равно или больше времени NotBefore для добавления нового контекста, операция завершается сбоем и GetLastError возвращает код CRYPT_E_EXISTS.

Если время NotBefore существующего контекста меньше времени NotBefore для добавления нового контекста, существующий сертификат или ссылка удаляется, а новый сертификат создается и добавляется в хранилище. Если соответствующий сертификат или ссылка на соответствующий сертификат не существует, добавляется новая ссылка.

При сравнении списков отзыва сертификатов (CRL) или списка доверия сертификатов используется время ThisUpdate.

CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES
Если соответствующий сертификат или ссылка на соответствующий сертификат существует, а время NotBefore существующего контекста равно или больше времени NotBefore для добавления нового контекста, операция завершается сбоем и GetLastError возвращает код CRYPT_E_EXISTS.

Если время NotBefore существующего контекста меньше времени NotBefore для добавления нового контекста, существующий контекст удаляется перед созданием и добавлением нового контекста. Новый добавленный контекст наследует свойства от существующего сертификата.

При сравнении CCL или CCL используется время ThisUpdate.

CERT_STORE_ADD_REPLACE_EXISTING
Если ссылка на соответствующий сертификат существует, существующий сертификат или ссылка удаляется, а новый сертификат создается и добавляется в хранилище. Если соответствующий сертификат или ссылка на соответствующий сертификат не существует, добавляется новая ссылка.
CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES
Если соответствующий сертификат существует в хранилище, существующий контекст не заменяется. Существующий контекст наследует свойства от нового сертификата.
CERT_STORE_ADD_USE_EXISTING
Если соответствующий сертификат или ссылка на соответствующий сертификат существует, используется существующий сертификат или ссылка и добавляются свойства из нового сертификата. Функция не завершается сбоем, но не добавляет новый контекст. Если значение pCertContext не равно NULL, существующий контекст дублируется.

Если соответствующий сертификат или ссылка на соответствующий сертификат не существует, добавляется новый сертификат.

[out, optional] ppStoreContext

Указатель на указатель на копию сертификата, добавленного в хранилище.

Параметр ppStoreContext может иметь значение NULL, указывая, что вызывающей приложению не требуется копия добавленного сертификата. Если копия сделана, ее необходимо освободить с помощью CertFreeCertificateContext.

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

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

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

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

В эту функцию можно распространить ошибки из вызываемых функций CertAddEncodedCertificateToStore и CertSetCertificateContextProperty.

Комментарии

Контекст сертификата не дублируется с помощью CertDuplicateCertificateContext. Вместо этого функция создает новую копию контекста и добавляет ее в хранилище.

Помимо закодированного сертификата , CertDuplicateCertificateContext также копирует свойства контекста, за исключением свойств CERT_KEY_PROV_HANDLE_PROP_ID и CERT_KEY_CONTEXT_PROP_ID.

Чтобы удалить контекст сертификата из хранилища сертификатов, используйте функцию CertDeleteCertificateFromStore .

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

Требования

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

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

CertAddEncodedCertificateToStore

CertSetCertificateContextProperty

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