Функция CertEnumCertificatesInStore (wincrypt.h)
Функция CertEnumCertificatesInStore извлекает первый или следующий сертификат в хранилище сертификатов . Используется в цикле, эта функция может извлекать последовательность всех сертификатов в хранилище сертификатов.
Синтаксис
PCCERT_CONTEXT CertEnumCertificatesInStore(
[in] HCERTSTORE hCertStore,
[in] PCCERT_CONTEXT pPrevCertContext
);
Параметры
[in] hCertStore
Дескриптор хранилища сертификатов .
[in] pPrevCertContext
Указатель на
Этот параметр должен быть null, чтобы начать перечисление и получить первый сертификат в хранилище. Последовательные сертификаты перечисляются путем задания pPrevCertContext указателя, возвращаемого предыдущим вызовом функции. Эта функция освобождает CERT_CONTEXT, на которые ссылается неNULL значений этого параметра.
Для логических хранилищ, включая хранилища коллекций, дубликат pCertContext, возвращаемого этой функцией, нельзя использовать для начала нового дочернего значения перечислений, так как дублированный сертификат теряет начальное перечисление состояния. Перечисление пропускает любой сертификат, ранее удаленный CertDeleteCertificateFromStore.
Возвращаемое значение
Если функция выполнена успешно, функция возвращает указатель на следующую CERT_CONTEXT в хранилище. Если в хранилище больше нет сертификатов, функция возвращает NULL.
Для получения расширенных сведений об ошибке вызовите GetLastError. Ниже приведены некоторые возможные коды ошибок.
Ценность | Описание |
---|---|
|
Дескриптор в параметре hCertStore |
|
Сертификаты не найдены. Это происходит, если хранилище пусто или если функция достигла конца списка магазина. |
|
Применяется к внешним хранилищам. Сертификаты не найдены. Это происходит, если хранилище пусто или если функция достигла конца списка магазина. |
Замечания
Возвращаемый указатель освобождается при передаче в качестве параметра pPrevCertContext при последующем вызове. В противном случае указатель должен быть освобожден путем вызова CertFreeCertificateContext. , не
Повторяющийся сертификат в настоящее время можно сделать путем вызова 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 |
См. также
CertDeleteCertificateFromStore