Функция 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. Ниже приведены некоторые возможные коды ошибок.

Значение Описание
E_INVALIDARG
Дескриптор в параметре hCertStore отличается от дескриптора в контексте сертификата, на который указывает pPrevCertContext.
CRYPT_E_NOT_FOUND
Сертификаты не найдены. Это происходит, если хранилище пусто или функция достигла конца списка хранилища.
ERROR_NO_MORE_FILES
Применяется к внешним хранилищам. Сертификаты не найдены. Это происходит, если хранилище пусто или функция достигла конца списка хранилища.

Комментарии

Возвращаемый указатель освобождается при передаче в качестве параметра 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

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

CERT_CONTEXT

CertDeleteCertificateFromStore

CertDuplicateCertificateContext

CertFindCRLInStore

CertFindCTLInStore

CertFindCertificateInStore

CertFreeCertificateContext

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