Функция 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. Ниже приведены некоторые возможные коды ошибок.
Возвращаемый код | Описание |
---|---|
|
Перечисление элементов больше не существует. |
|
Операционная система не хватает памяти. |
|
Параметр |
|
Что-то не так с регистрацией типов. |
Замечания
Эта функция перечисляет типы поставщиков, доступные на компьютере. Поставщики для любого конкретного типа поставщика можно перечислить с помощью 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 [только классические приложения] |
целевая платформа | Виндоус |
заголовка | wincrypt.h |
библиотеки |
Advapi32.lib |
DLL | Advapi32.dll |
См. также
функции поставщика услуг