Поделиться через


Функция BCryptEnumContextFunctions (bcrypt.h)

Функция BCryptEnumContextFunctions получает криптографические функции для контекста в указанной таблице конфигурации.

Синтаксис

NTSTATUS BCryptEnumContextFunctions(
  [in]      ULONG                    dwTable,
  [in]      LPCWSTR                  pszContext,
  [in]      ULONG                    dwInterface,
  [in, out] ULONG                    *pcbBuffer,
  [in, out] PCRYPT_CONTEXT_FUNCTIONS *ppBuffer
);

Параметры

[in] dwTable

Определяет таблицу конфигурации, из которой извлекаются функции контекста. Это может быть одно из следующих значений.

Значение Значение
CRYPT_LOCAL
Получите функции контекста из таблицы конфигурации локального компьютера.
CRYPT_DOMAIN
Это значение недоступно для использования.

[in] pszContext

Указатель на строку Юникода, завершающуюся null, которая содержит идентификатор контекста для перечисления функций.

[in] dwInterface

Определяет криптографический интерфейс для получения функций. Это может быть одно из следующих значений.

Значение Значение
BCRYPT_ASYMMETRIC_ENCRYPTION_INTERFACE
Получение асимметричных функций шифрования.
BCRYPT_CIPHER_INTERFACE
Получение функций шифра.
BCRYPT_HASH_INTERFACE
Получение хэш-функций.
BCRYPT_RNG_INTERFACE
Получение функций генератора случайных чисел.
BCRYPT_SECRET_AGREEMENT_INTERFACE
Получение функций секретного соглашения.
BCRYPT_SIGNATURE_INTERFACE
Получение функций подписи.
NCRYPT_KEY_STORAGE_INTERFACE
Получение функций хранилища ключей.
NCRYPT_SCHANNEL_INTERFACE
Получите функции Schannel.

[in, out] pcbBuffer

Адрес переменной ULONG , которая в записи содержит размер (в байтах) буфера, на который указывает ppBuffer. Если этот размер недостаточно велик для хранения набора идентификаторов контекста, эта функция завершится сбоем с STATUS_BUFFER_TOO_SMALL.

После возврата этой функции это значение содержит количество байтов, скопированных в буфер ppBuffer .

[in, out] ppBuffer

Адрес указателя на структуру CRYPT_CONTEXT_FUNCTIONS , которая получает набор контекстных функций, полученных этой функцией. Значение, на которое указывает параметр pcbBuffer , содержит размер этого буфера.

Если значение, указываемое этим параметром, равно NULL, эта функция выделяет необходимую память. Эта память должна быть освобождена, если она больше не нужна, передав этот указатель на функцию BCryptFreeBuffer .

Если этот параметр имеет значение NULL, эта функция поместит необходимый размер в байтах в переменную, на которую указывает параметр pcbBuffer , и вернет STATUS_BUFFER_TOO_SMALL.

Возвращаемое значение

Возвращает код состояния, указывающий на успешное или неудачное выполнение функции.

Возможные коды возврата включают, помимо прочего, следующие.

Код возврата Описание
STATUS_SUCCESS
Функция выполнена успешно.
STATUS_BUFFER_TOO_SMALL
Параметр ppBuffer не имеет значения NULL, а значение, указываемое параметром pcbBuffer , недостаточно велико для хранения набора контекстов.
STATUS_INVALID_PARAMETER
Один или несколько параметров недопустимы.
STATUS_NO_MEMORY
Произошел сбой выделения памяти.
STATUS_NOT_FOUND
Контекстные функции, соответствующие указанным критериям, не найдены.

Комментарии

BCryptEnumContextFunctions можно вызывать только в пользовательском режиме.

Примеры

В следующем примере показано, как использовать функцию BCryptEnumContextFunctions для перечисления функций хранилища ключей для всех контекстов в таблице конфигурации локального компьютера.

#include <windows.h>
#include <stdio.h>
#include <Bcrypt.h>
#pragma comment(lib, "Bcrypt.lib")

#ifndef NT_SUCCESS
#define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0)
#endif

NTSTATUS EnumContextFunctions()
{
    NTSTATUS status;
    ULONG uSize = 0;
    PCRYPT_CONTEXTS pContexts = NULL;
    
    // Get the contexts for the local machine. 
    // CNG will allocate the memory for us.
    status = BCryptEnumContexts(CRYPT_LOCAL, &uSize, &pContexts);
    if(NT_SUCCESS(status))
    {
        // Enumerate the context identifiers.
        for(ULONG uContextIndex = 0; 
            uContextIndex < pContexts->cContexts; 
            uContextIndex++)
        {
            wprintf(L"Context functions for %s:\n", 
                pContexts->rgpszContexts[uContextIndex]);

            // Get the functions for this context.
            // CNG will allocate the memory for us.
            PCRYPT_CONTEXT_FUNCTIONS pContextFunctions = NULL;
            status = BCryptEnumContextFunctions(
                CRYPT_LOCAL, 
                pContexts->rgpszContexts[uContextIndex], 
                NCRYPT_SCHANNEL_INTERFACE, 
                &uSize, 
                &pContextFunctions);
            if(NT_SUCCESS(status))
            {
                // Enumerate the functions.
                for(ULONG i = 0; 
                    i < pContextFunctions->cFunctions; 
                    i++)
                {
                    wprintf(L"\t%s\n", 
                        pContextFunctions->rgpszFunctions[i]);
                }

                // 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

См. также раздел

CRYPT_CONTEXT_FUNCTIONS