Функция CertEnumCertificatesInStore (wincrypt.h)
Функция CertEnumCertificatesInStore извлекает первый или следующий сертификат в хранилище сертификатов. Эта функция, используемая в цикле, может последовательно извлекать все сертификаты в хранилище сертификатов.
Синтаксис
PCCERT_CONTEXT CertEnumCertificatesInStore(
[in] HCERTSTORE hCertStore,
[in] PCCERT_CONTEXT pPrevCertContext
);
Параметры
[in] hCertStore
Дескриптор хранилища сертификатов.
[in] pPrevCertContext
Указатель на CERT_CONTEXT предыдущего контекста сертификата .
Этот параметр должен иметь значение NULL , чтобы начать перечисление и получить первый сертификат в хранилище. Последовательные сертификаты перечисляются путем задания pPrevCertContext указателя, возвращенного предыдущим вызовом функции. Эта функция освобождает CERT_CONTEXT , на которые ссылаются значения этого параметра, отличные от NULL .
Для логических хранилищ, включая хранилища коллекций, дубликат pCertContext , возвращаемый этой функцией, не может использоваться для запуска новой вложенной последовательности перечислений, так как дублированный сертификат теряет начальное состояние перечисления. Перечисление пропускает любой сертификат, ранее удаленный CertDeleteCertificateFromStore.
Возвращаемое значение
Если функция выполняется успешно, функция возвращает указатель на следующий CERT_CONTEXT в хранилище. Если в хранилище больше нет сертификатов, функция возвращает значение NULL.
Для получения дополнительных сведений об ошибке вызовите Метод GetLastError. Ниже приведены некоторые возможные коды ошибок.
Значение | Описание |
---|---|
|
Дескриптор в параметре hCertStore отличается от дескриптора в контексте сертификата, на который указывает pPrevCertContext. |
|
Сертификаты не найдены. Это происходит, если хранилище пусто или функция достигла конца списка хранилища. |
|
Применяется к внешним хранилищам. Сертификаты не найдены. Это происходит, если хранилище пусто или функция достигла конца списка хранилища. |
Комментарии
Возвращаемый указатель освобождается при передаче в качестве параметра pPrevCertContext при последующем вызове. В противном случае указатель должен быть освобожден путем вызова CertFreeCertificateContext. PPrevCertContext, отличный от NULL, передаваемый в CertEnumCertificatesInStore, всегда освобождается даже в случае ошибки.
Дубликат текущего перечисленного сертификата можно создать, вызвав CertDuplicateCertificateContext.
Примеры
В следующем примере перечислены контексты сертификатов в хранилище сертификатов. Другой пример, в котором используется эта функция, см. в разделе Пример программы C: удаление сертификатов из хранилища сертификатов.
#include <windows.h>
#include <stdio.h>
#include <Wincrypt.h>
#pragma comment(lib, "crypt32.lib")
//--------------------------------------------------------------------
// Declare and initialize variables.
HANDLE hStoreHandle = NULL;
PCCERT_CONTEXT pCertContext = NULL;
char * pszStoreName = "CA";
//--------------------------------------------------------------------
// Open a system certificate store.
if (hStoreHandle = CertOpenSystemStore(
NULL,
pszStoreName))
{
printf("The %s store has been opened. \n", pszStoreName);
}
else
{
printf("The store was not opened.\n");
exit(1);
}
//-------------------------------------------------------------------
// Find the certificates in the system store.
while(pCertContext= CertEnumCertificatesInStore(
hStoreHandle,
pCertContext)) // on the first call to the function,
// this parameter is NULL
// on all subsequent calls,
// this parameter is the last pointer
// returned by the function
{
//----------------------------------------------------------------
// Do whatever is needed for a current certificate.
// ...
} // End of while.
//--------------------------------------------------------------------
// Clean up.
if (!CertCloseStore(
hStoreHandle,
0))
{
printf("Failed CertCloseStore\n");
exit(1);
}
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2003 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | wincrypt.h |
Библиотека | Crypt32.lib |
DLL | Crypt32.dll |
См. также раздел
CertDeleteCertificateFromStore
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по