Функция CryptEnumProvidersA (wincrypt.h)
Возможные поставщики УСЛУГ: поставщик шифрования Microsoft Base Cryptographic Provider версии 1.0 и Расширенный поставщик шифрования Майкрософт версии 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 не был достаточно большим для хранения имени поставщика. |
|
Перечисление элементов больше не существует. |
|
Операционная система не хватает памяти. |
|
Параметр |
|
Что-то не так с регистрацией типов. |
Замечания
Эта функция перечисляет поставщиков, доступных на компьютере. Типы поставщиков можно перечислить с помощью CryptEnumProviderTypes.
Примеры
В следующем примере показан цикл, в котором перечислены все доступные поставщики криптографических служб. Другой пример использования функции
#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 [только классические приложения] |
целевая платформа | Виндоус |
заголовка | wincrypt.h |
библиотеки |
Advapi32.lib |
DLL | Advapi32.dll |
См. также
функции поставщика услуг