Функция CryptEnumProvidersA (wincrypt.h)
Возможные поставщики служб шифрования: Microsoft Base Cryptographic Provider версии 1.0 и Microsoft Enhanced Cryptographic Provider версии 1.0.
Синтаксис
BOOL CryptEnumProvidersA(
[in] DWORD dwIndex,
[in] DWORD *pdwReserved,
[in] DWORD dwFlags,
[out] DWORD *pdwProvType,
[out] LPSTR szProvName,
[in, out] DWORD *pcbProvName
);
Параметры
[in] dwIndex
Индекс следующего поставщика для перечисления.
[in] pdwReserved
Зарезервировано для использования в будущем и должно иметь значение NULL.
[in] dwFlags
Зарезервировано для будущего использования и должно быть равно нулю.
[out] pdwProvType
Адрес значения DWORD , обозначающего тип перечисленного поставщика.
[out] szProvName
Указатель на буфер, получающий данные от перечислимого поставщика. Это строка, включающая завершающий символ NULL.
Этот параметр может иметь значение NULL , чтобы задать размер имени для целей выделения памяти. Дополнительные сведения см. в разделе Извлечение данных неизвестной длины.
[in, out] pcbProvName
Указатель на значение DWORD , указывающее размер (в байтах) буфера, на который указывает параметр pszProvName . Когда функция возвращает значение DWORD , содержит количество байтов, хранящихся в буфере.
Возвращаемое значение
Если функция выполнена успешно, возвращается ненулевое значение (TRUE).
Если функция завершается сбоем, возвращаемое значение равно нулю (FALSE). Чтобы получить дополнительные сведения об ошибке, вызовите Метод GetLastError.
Коды ошибок, предваряемые NTE, создаются конкретным поставщиком служб CSP. Ниже приведены некоторые возможные коды ошибок.
Код возврата | Описание |
---|---|
|
Буфер pszProvName не был достаточно велик для хранения имени поставщика. |
|
Больше нет элементов для перечисления. |
|
В операционной системе не хватает памяти. |
|
Параметр dwFlags имеет нераспознанное значение. |
|
Что-то не так с регистрацией типа. |
Комментарии
Эта функция перечисляет поставщики, доступные на компьютере. Типы поставщиков можно перечислить с помощью CryptEnumProviderTypes.
Примеры
В следующем примере показан цикл со списком всех доступных поставщиков служб шифрования. Другой пример, в котором используется функция CryptEnumProviders , см. в разделе Пример программы C: перечисление поставщиков и типов поставщиков CSP.
#include <stdio.h>
#include <windows.h>
#include <Wincrypt.h>
#pragma comment(lib, "advapi32.lib")
void main()
{
//---------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Declare and initialize variables.
DWORD cbName;
DWORD dwType;
DWORD dwIndex;
CHAR *pszName = NULL;
// Print header lines for providers.
printf("Listing Available Providers:\n");
printf("Provider type\tProvider Name\n");
printf("_____________\t__________________"
"___________________\n");
//---------------------------------------------------------------
// Loop through enumerating providers.
dwIndex = 0;
while(CryptEnumProviders(
dwIndex,
NULL,
0,
&dwType,
NULL,
&cbName
))
{
//-----------------------------------------------------------
// cbName returns the length of the name of the next
// provider. Allocate memory in a buffer to retrieve
// that name.
if (!(pszName = (LPTSTR)LocalAlloc(LMEM_ZEROINIT, cbName)))
{
printf("ERROR - LocalAlloc failed\n");
exit(1);
}
//-----------------------------------------------------------
// Get the provider name.
if (CryptEnumProviders(
dwIndex++,
NULL,
0,
&dwType,
pszName,
&cbName
))
{
printf (" %4.0d\t%s\n",dwType, pszName);
}
else
{
printf("ERROR - CryptEnumProviders failed.\n");
exit(1);
}
LocalFree(pszName);
} // End of while loop
printf("\nProvider types and provider names "
"have been listed.\n");
}
Примечание
Заголовок wincrypt.h определяет CryptEnumProviders в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Сочетание использования псевдонима, не зависящий от кодировки, с кодом, не зависящим от кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | wincrypt.h |
Библиотека | Advapi32.lib |
DLL | Advapi32.dll |