Função BCryptEnumContextFunctions (bcrypt.h)

A função BCryptEnumContextFunctions obtém as funções criptográficas para um contexto na tabela de configuração especificada.

Sintaxe

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

Parâmetros

[in] dwTable

Identifica a tabela de configuração da qual recuperar as funções de contexto. Esse pode ser um dos valores a seguir.

Valor Significado
CRYPT_LOCAL
Recupere as funções de contexto da tabela de configuração do computador local.
CRYPT_DOMAIN
Esse valor não está disponível para uso.

[in] pszContext

Um ponteiro para uma cadeia de caracteres Unicode terminada em nulo que contém o identificador do contexto para o qual enumerar as funções.

[in] dwInterface

Identifica a interface criptográfica para a qual recuperar as funções. Esse pode ser um dos valores a seguir.

Valor Significado
BCRYPT_ASYMMETRIC_ENCRYPTION_INTERFACE
Recupere as funções de criptografia assimétricas.
BCRYPT_CIPHER_INTERFACE
Recupere as funções de criptografia.
BCRYPT_HASH_INTERFACE
Recupere as funções de hash.
BCRYPT_RNG_INTERFACE
Recupere as funções de gerador de número aleatório.
BCRYPT_SECRET_AGREEMENT_INTERFACE
Recupere as funções de contrato secreto.
BCRYPT_SIGNATURE_INTERFACE
Recupere as funções de assinatura.
NCRYPT_KEY_STORAGE_INTERFACE
Recupere as funções de armazenamento de chaves.
NCRYPT_SCHANNEL_INTERFACE
Recupere as funções Schannel.

[in, out] pcbBuffer

O endereço de uma variável ULONG que, na entrada, contém o tamanho, em bytes, do buffer apontado por ppBuffer. Se esse tamanho não for grande o suficiente para manter o conjunto de identificadores de contexto, essa função falhará com STATUS_BUFFER_TOO_SMALL.

Depois que essa função retorna, esse valor contém o número de bytes que foram copiados para o buffer ppBuffer .

[in, out] ppBuffer

O endereço de um ponteiro para uma estrutura CRYPT_CONTEXT_FUNCTIONS que recebe o conjunto de funções de contexto recuperadas por essa função. O valor apontado pelo parâmetro pcbBuffer contém o tamanho desse buffer.

Se o valor apontado por esse parâmetro for NULL, essa função alocará a memória necessária. Essa memória deve ser liberada quando não for mais necessária passando esse ponteiro para a função BCryptFreeBuffer .

Se esse parâmetro for NULL, essa função colocará o tamanho necessário, em bytes, na variável apontada pelo parâmetro pcbBuffer e retornará STATUS_BUFFER_TOO_SMALL.

Retornar valor

Retorna um código status que indica o êxito ou a falha da função.

Os códigos de retorno possíveis incluem, mas não se limitam a, o seguinte.

Código de retorno Descrição
STATUS_SUCCESS
A função foi bem-sucedida.
STATUS_BUFFER_TOO_SMALL
O parâmetro ppBuffer não é NULL e o valor apontado pelo parâmetro pcbBuffer não é grande o suficiente para manter o conjunto de contextos.
STATUS_INVALID_PARAMETER
Um ou mais dos parâmetros não são válidos.
STATUS_NO_MEMORY
Ocorreu uma falha de alocação de memória.
STATUS_NOT_FOUND
Nenhuma função de contexto que corresponda aos critérios especificados foi encontrada.

Comentários

BCryptEnumContextFunctions só pode ser chamado no modo de usuário.

Exemplos

O exemplo a seguir mostra como usar a função BCryptEnumContextFunctions para enumerar as funções de armazenamento de chaves para todos os contextos na tabela de configuração do computador local.

#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;
}

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Vista [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2008 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho bcrypt.h
Biblioteca Bcrypt.lib
DLL Bcrypt.dll

Confira também

CRYPT_CONTEXT_FUNCTIONS