Функция CertAddCTLLinkToStore (wincrypt.h)
Функция CertAddCTLLinkToStore добавляет ссылку в хранилище в контекстсписка доверия сертификатов (CTL) в другом хранилище. Вместо создания и добавления дубликата контекста CTL эта функция добавляет ссылку на исходный контекст CTL.
Синтаксис
BOOL CertAddCTLLinkToStore(
[in] HCERTSTORE hCertStore,
[in] PCCTL_CONTEXT pCtlContext,
[in] DWORD dwAddDisposition,
[out, optional] PCCTL_CONTEXT *ppStoreContext
);
Параметры
[in] hCertStore
Дескриптор хранилища сертификатов, в котором должна быть добавлена ссылка.
[in] pCtlContext
Указатель на структуру CTL_CONTEXT , которая должна быть связана.
[in] dwAddDisposition
Указывает действие, которое необходимо выполнить, если соответствующий CTL или ссылка на соответствующий CTL уже существует в хранилище. В настоящее время определены значения ликвидации и их использование следующим образом.
Значение | Значение |
---|---|
|
Не проверка для существующего соответствующего CTL или ссылки на соответствующий CTL. Новый CTL всегда добавляется в хранилище. Это может привести к дублированию в магазине. |
|
Если соответствующий CTL или ссылка на соответствующий CTL существует, операция завершается сбоем. GetLastError возвращает код CRYPT_E_EXISTS. |
|
Если соответствующий CTL или ссылка на соответствующий CTL существует, время ThisUpdate в списках CTL сравнивается. Если существующий CTL имеет время ThisUpdate меньше времени ThisUpdate в новом CTL, старый CTL или ссылка заменяется так же, как и CERT_STORE_ADD_REPLACE_EXISTING. Если у существующего CTL время ThisUpdate больше или равно времени ThisUpdate для добавляемого CTL, функция завершается ошибкой, при этом GetLastError возвращает код CRYPT_E_EXISTS.
Если соответствующий CTL или ссылка на соответствующий CTL не найден в магазине, в хранилище добавляется новый CTL. |
|
Действие такое же, как и для CERT_STORE_ADD_NEWER, за исключением того, что при замене старого CTL свойства старого CTL включаются в замещающий CTL. |
|
Если соответствующий CTL или ссылка на соответствующий CTL существует, существующий CTL или ссылка удаляются, а новый CTL создается и добавляется в хранилище. Если соответствующий CTL или ссылка на соответствующий CTL не существует, он добавляется. |
|
Если соответствующий CTL существует в хранилище, этот существующий контекст удаляется перед созданием и добавлением нового контекста. Добавленный контекст наследует свойства от существующего CTL. |
|
Если соответствующий CTL или ссылка на соответствующий CTL существует, используется существующий CTL и добавляются свойства из нового CTL. Функция не завершается сбоем, но новый CTL не добавляется. Если ppCertContext не имеет значение NULL, существующий контекст дублируется.
Если соответствующий CTL или ссылка на соответствующий CTL не существует, добавляется новый CTL. |
[out, optional] ppStoreContext
Указатель на указатель на копию созданной ссылки. PpStoreContext может иметь значение NULL , чтобы указать, что копия ссылки не требуется. Если создается копия ссылки, ее необходимо освободить с помощью CertFreeCTLContext.
Возвращаемое значение
Если функция выполняется успешно, возвращается значение TRUE.
Если функция завершается сбоем, возвращается значение FALSE. Чтобы получить дополнительные сведения об ошибке, вызовите Метод GetLastError. Ниже приведены некоторые возможные коды ошибок.
Код возврата | Описание |
---|---|
|
Для dwAddDisposition CERT_STORE_ADD_NEW список CTL уже существует в хранилище. |
|
Недопустимое расположение добавления, указанное параметром dwAddDisposition . |
Комментарии
Так как ссылка предоставляет доступ к исходному контексту CTL , установка расширенного свойства в связанном контексте CTL изменяет расширенное свойство в исходном расположении CTL и во всех других ссылках на этот CTL.
Ссылки нельзя добавить в хранилище, открытое как коллекция. Магазины, открытые как коллекции, включают все магазины, открытые с помощью CertOpenSystemStore или CertOpenStore с помощью CERT_STORE_PROV_SYSTEM или CERT_STORE_PROV_COLLECTION. См. также CertAddStoreToCollection.
Если используются ссылки и вызывается CertCloseStore с CERT_CLOSE_STORE_FORCE_FLAG, хранилище, использующий ссылки, должно быть закрыто до закрытия хранилища, содержащего исходные контексты. Если CERT_CLOSE_STORE_FORCE_FLAG не используется, два хранилища можно закрыть в любом порядке.
Чтобы удалить контекстную ссылку CTL из хранилища сертификатов, используйте функцию CertDeleteCTLFromStore .
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2003 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | wincrypt.h |
Библиотека | Crypt32.lib |
DLL | Crypt32.dll |