Функция CryptEnumProviderTypesA (wincrypt.h)
К типам поставщиков относятся PROV_RSA_FULL, PROV_RSA_SCHANNEL и PROV_DSS.
Синтаксис
BOOL CryptEnumProviderTypesA(
[in] DWORD dwIndex,
[in] DWORD *pdwReserved,
[in] DWORD dwFlags,
[out] DWORD *pdwProvType,
[out] LPSTR szTypeName,
[in, out] DWORD *pcbTypeName
);
Параметры
[in] dwIndex
Индекс следующего типа поставщика для перечисления.
[in] pdwReserved
Зарезервировано для использования в будущем и должно иметь значение NULL.
[in] dwFlags
Зарезервировано для будущего использования и должно быть равно нулю.
[out] pdwProvType
Адрес значения DWORD , обозначающего перечислимый тип поставщика.
[out] szTypeName
Указатель на буфер, который получает данные из перечисленного типа поставщика. Это строка, включающая завершающий символ NULL . Некоторые типы поставщиков не имеют отображаемых имен, и в этом случае имя не возвращается, а возвращаемое значение, на которое указывает pcbTypeName , равно нулю.
Этот параметр может иметь значение NULL , чтобы получить размер имени для целей выделения памяти. Дополнительные сведения см. в разделе Извлечение данных неизвестной длины.
[in, out] pcbTypeName
Указатель на значение DWORD , указывающее размер (в байтах) буфера, на который указывает параметр pszTypeName . При возврате функции значение DWORD содержит количество байтов, хранящихся в буфере. Некоторые типы поставщиков не имеют отображаемых имен, и в этом случае имя не возвращается, а возвращаемое значение, на которое указывает pcbTypeName , равно нулю.
Возвращаемое значение
Если функция выполнена успешно, возвращается ненулевое значение (TRUE).
Если функция завершается сбоем, возвращаемое значение равно нулю (FALSE). Чтобы получить дополнительные сведения об ошибке, вызовите Метод GetLastError.
Коды ошибок, предваряемые NTE, создаются конкретным поставщиком служб CSP. Ниже приведены некоторые возможные коды ошибок.
Код возврата | Описание |
---|---|
|
Больше нет элементов для перечисления. |
|
В операционной системе не хватает памяти. |
|
Параметр dwFlags имеет нераспознанное значение. |
|
Что-то не так с регистрацией типа. |
Комментарии
Эта функция перечисляет типы поставщиков, доступные на компьютере. Поставщики для любого конкретного типа поставщика можно перечислить с помощью CryptEnumProviders.
Примеры
В следующем примере показан цикл со списком всех доступных типов поставщиков служб шифрования.
#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 dwIndex;
DWORD dwType;
DWORD cbName;
LPTSTR pszName;
//--------------------------------------------------------------
// Print header lines for provider types.
printf("Listing Available Provider Types:\n");
printf("Provider type\tProvider Type Name\n");
printf("_____________\t_____________________________________\n");
// Loop through enumerating provider types.
dwIndex = 0;
while(CryptEnumProviderTypes(
dwIndex,
NULL,
0,
&dwType,
NULL,
&cbName
))
{
//-----------------------------------------------------------
// cbName returns the length of the name of the next
// provider type. 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 type name.
if (CryptEnumProviderTypes(
dwIndex++,
NULL,
NULL,
&dwType,
pszName,
&cbName))
{
printf (" %4.0d\t%s\n",dwType, pszName);
}
else
{
printf("ERROR - CryptEnumProviderTypes\n");
exit(1);
}
LocalFree(pszName);
} // End of while loop.
}
Еще один пример, в котором используется функция CryptEnumProviderTypes , см. в разделе Пример программы C: перечисление поставщиков и типов поставщиков CSP.
Примечание
Заголовок wincrypt.h определяет CryptEnumProviderTypes в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Сочетание использования псевдонима, не зависящий от кодировки, с кодом, не зависящим от кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | wincrypt.h |
Библиотека | Advapi32.lib |
DLL | Advapi32.dll |