Функция BCryptEnumContextFunctionProviders (bcrypt.h)
Функция BCryptEnumContextFunctionProviders получает поставщики для криптографических функций для контекста в указанной таблице конфигурации.
Синтаксис
NTSTATUS BCryptEnumContextFunctionProviders(
[in] ULONG dwTable,
[in] LPCWSTR pszContext,
[in] ULONG dwInterface,
[in] LPCWSTR pszFunction,
[in, out] ULONG *pcbBuffer,
[in, out] PCRYPT_CONTEXT_FUNCTION_PROVIDERS *ppBuffer
);
Параметры
[in] dwTable
Определяет таблицу конфигурации, из которой извлекаются поставщики контекстных функций. Это может быть одно из следующих значений.
Значение | Значение |
---|---|
|
Получите функции контекста из таблицы конфигурации локального компьютера. |
|
Это значение недоступно для использования. |
[in] pszContext
Указатель на строку Юникода, завершающуюся null, которая содержит идентификатор контекста для перечисления поставщиков функций.
[in] dwInterface
Определяет криптографический интерфейс для получения поставщиков функций. Это может быть одно из следующих значений.
Значение | Значение |
---|---|
|
Получение поставщиков функций асимметричного шифрования. |
|
Получение поставщиков функций шифра. |
|
Получение поставщиков хэш-функций . |
|
Получение поставщиков функций генератора случайных чисел. |
|
Получение поставщиков функций секретного соглашения. |
|
Получение поставщиков функций подписи. |
|
Получение поставщиков функций хранилища ключей. |
|
Получение поставщиков функций Schannel. |
[in] pszFunction
Указатель на строку Юникода, завершающуюся значением NULL, которая содержит идентификатор функции для перечисления поставщиков.
[in, out] pcbBuffer
Адрес переменной ULONG , которая в записи содержит размер (в байтах) буфера, на который указывает ppBuffer. Если этот размер недостаточно велик для хранения набора идентификаторов контекста, эта функция завершится сбоем с STATUS_BUFFER_TOO_SMALL.
После возврата этой функции это значение содержит количество байтов, скопированных в буфер ppBuffer .
[in, out] ppBuffer
Адрес указателя на структуру CRYPT_CONTEXT_FUNCTION_PROVIDERS , которая получает набор поставщиков контекстных функций, полученных этой функцией. Значение, на которое указывает параметр pcbBuffer , содержит размер этого буфера.
Если значение, указываемое этим параметром, равно NULL, эта функция выделяет необходимую память. Эта память должна быть освобождена, если она больше не нужна, передав этот указатель на функцию BCryptFreeBuffer .
Если этот параметр имеет значение NULL, эта функция поместит необходимый размер в байтах в переменную, на которую указывает параметр pcbBuffer , и вернет STATUS_BUFFER_TOO_SMALL.
Возвращаемое значение
Возвращает код состояния, указывающий на успешное или неудачное выполнение функции.
Возможные коды возврата включают, помимо прочего, следующие.
Код возврата | Описание |
---|---|
|
Функция выполнена успешно. |
|
Параметр ppBuffer не имеет значения NULL, а значение, указываемое параметром pcbBuffer , недостаточно велико для хранения набора контекстов. |
|
Один или несколько параметров недопустимы. |
|
Произошел сбой выделения памяти. |
|
Поставщики контекстных функций, соответствующие указанным критериям, не найдены. |
Комментарии
BCryptEnumContextFunctionProviders можно вызывать только в пользовательском режиме.
Примеры
В следующем примере показано, как использовать функцию BCryptEnumContextFunctionProviders для перечисления поставщиков для всех функций хранения ключей для всех контекстов в таблице конфигурации локального компьютера.
#include <windows.h>
#include <stdio.h>
#include <ntstatus.h>
#include <Bcrypt.h>
#pragma comment(lib, "Bcrypt.lib")
#ifndef NT_SUCCESS
#define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0)
#endif
NTSTATUS EnumContextFunctionProviders()
{
NTSTATUS status;
ULONG uSize = 0;
ULONG uTable = CRYPT_LOCAL;
PCRYPT_CONTEXTS pContexts = NULL;
// Get the contexts for the local machine.
// CNG will allocate the memory for us.
status = BCryptEnumContexts(uTable, &uSize, &pContexts);
if(NT_SUCCESS(status))
{
// Enumerate the context identifiers.
for(ULONG a = 0;
a < pContexts->cContexts;
a++)
{
ULONG uInterface = NCRYPT_SCHANNEL_INTERFACE;
wprintf(L"Context functions for %s:\n",
pContexts->rgpszContexts[a]);
// Get the functions for this context.
// CNG will allocate the memory for us.
PCRYPT_CONTEXT_FUNCTIONS pContextFunctions = NULL;
status = BCryptEnumContextFunctions(
uTable,
pContexts->rgpszContexts[a],
uInterface,
&uSize,
&pContextFunctions);
if(NT_SUCCESS(status))
{
// Enumerate the functions.
for(ULONG b = 0;
b < pContextFunctions->cFunctions;
b++)
{
wprintf(L"\tFunction providers for %s:\n",
pContextFunctions->rgpszFunctions[b]);
// Get the providers for this function.
PCRYPT_CONTEXT_FUNCTION_PROVIDERS pProviders;
pProviders = NULL;
status = BCryptEnumContextFunctionProviders(
uTable,
pContexts->rgpszContexts[a],
uInterface,
pContextFunctions->rgpszFunctions[b],
&uSize,
&pProviders);
if(NT_SUCCESS(status))
{
for(ULONG c = 0;
c < pProviders->cProviders;
c++)
{
wprintf(L"\t\t%s\n",
pProviders->rgpszProviders[c]);
}
}
else if(STATUS_NOT_FOUND == status)
{
wprintf(L"\t\tNone found.\n");
}
}
// Free the context functions buffer.
BCryptFreeBuffer(pContextFunctions);
}
}
// Free the contexts buffer.
BCryptFreeBuffer(pContexts);
}
return status;
}
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows Vista [только классические приложения] |
Минимальная версия сервера | Windows Server 2008 [только классические приложения] |
Целевая платформа | Windows |
Header | bcrypt.h |
Библиотека | Bcrypt.lib |
DLL | Bcrypt.dll |