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

Функция CertCloseStore закрывает дескриптор хранилища сертификатов и уменьшает количество ссылок в хранилище. Для каждого успешного вызова функций CertOpenStore или CertDuplicateStore должен быть соответствующий вызов CertCloseStore.

Синтаксис

BOOL CertCloseStore(
  [in] HCERTSTORE hCertStore,
  [in] DWORD      dwFlags
);

Параметры

[in] hCertStore

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

[in] dwFlags

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

Установка флагов может принудительно освободить память для всех контекстов сертификата хранилища, списка отзыва сертификатов (CRL) и списка доверия сертификатов (CTL) при закрытии хранилища. Также можно задать флаги, которые проверка, были ли освобождены все контексты сертификата, списка отзыва сертификатов и CTL хранилища. Определены следующие значения.

Значение Значение
CERT_CLOSE_STORE_CHECK_FLAG
Проверяет наличие нефретированных контекстов сертификата, списка отзыва сертификатов и CTL. Возвращенный код ошибки указывает, что один или несколько элементов хранилища по-прежнему используются. Этот флаг следует использовать только в качестве средства диагностики при разработке приложений.
CERT_CLOSE_STORE_FORCE_FLAG
Принудительно освобождает память для всех контекстов, связанных с хранилищем. Этот флаг можно безопасно использовать только в том случае, если хранилище открыто в функции и ни дескриптор хранилища, ни его контексты не передаются в вызываемые функции. Дополнительные сведения см. в разделе "Заметки".

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

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

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

Если CERT_CLOSE_STORE_CHECK_FLAG не задан или если он задан и все контексты, связанные с хранилищем, освобождены, возвращается значение TRUE.

Если CERT_CLOSE_STORE_CHECK_FLAG задано, а память для одного или нескольких контекстов, связанных с хранилищем, остается выделенной, возвращается значение FALSE. Хранилище всегда закрывается, даже если функция возвращает значение FALSE. Дополнительные сведения см. в разделе "Заметки".

GetLastError имеет значение CRYPT_E_PENDING_CLOSE, если память для контекстов, связанных с хранилищем, остается выделенной. Любое существующее значение, возвращаемое GetLastError , сохраняется, если не задано CERT_CLOSE_STORE_CHECK_FLAG.

Комментарии

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

По умолчанию память, используемая для хранения контекстов с количеством ссылок, превышающим ноль, не освобождается при закрытии хранилища сертификатов. Ссылки на эти контексты остаются действительными; однако это может привести к утечке памяти. Кроме того, все изменения, внесенные в свойства контекста после закрытия хранилища, не сохраняются.

Чтобы принудительно освободить память для всех контекстов, связанных с хранилищем, задайте CERT_CLOSE_STORE_FORCE_FLAG. Если этот флаг установлен, память для всех контекстов, связанных с хранилищем, освобождается, и все указатели на сертификаты, CRL или контексты CTL, связанные с хранилищем, становятся недействительными. Этот флаг следует устанавливать только в том случае, если хранилище открыто в функции, и ни дескриптор хранилища, ни любой из его контекстов никогда не передавались в какие-либо вызываемые функции.

Состояние ссылок в контекстах, связанных с хранилищем, можно проверить при закрытии хранилища с помощью CERT_CLOSE_STORE_CHECK_FLAG. Если этот флаг установлен, а все контексты сертификата, списка отзыва сертификатов или CTL не были освобождены, функция возвращает значение FALSE , а GetLastError возвращает CRYPT_E_PENDING_CLOSE. Обратите внимание, что хранилище по-прежнему закрывается, когда возвращается значение FALSE , а память для всех активных контекстов не освобождается.

Если CERT_STORE_NO_CRYPT_RELEASE_FLAG не задано при открытии хранилища, при закрытии хранилища освобождается дескриптор CSP.

Требования

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

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

CertDuplicateStore

CertFreeCRLContext

CertFreeCTLContext

CertFreeCertificateContext

CertOpenStore

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

CryptReleaseContext