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


Функция 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. , неNULLpPrevCertContext, передаваемых в 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]
целевая платформа Виндоус
заголовка wincrypt.h
библиотеки Crypt32.lib
DLL Crypt32.dll

См. также

CERT_CONTEXT

CertDeleteCertificateFromStore

CertDuplicateCertificateContext

CertFindCRLInStore

CertFindCTLInStore

CertFindCertificateInStore

CertFreeCertificateContext

функции сертификатов