Compartilhar via


Função BCryptEnumContextFunctionProviders (bcrypt.h)

A função BCryptEnumContextFunctionProviders obtém os provedores das funções criptográficas para um contexto na tabela de configuração especificada.

Sintaxe

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
);

Parâmetros

[in] dwTable

Identifica a tabela de configuração da qual recuperar os provedores de 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 os provedores de funções.

[in] dwInterface

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

Valor Significado
BCRYPT_ASYMMETRIC_ENCRYPTION_INTERFACE
Recupere os provedores de funções de criptografia assimétrica.
BCRYPT_CIPHER_INTERFACE
Recupere os provedores de funções de criptografia.
BCRYPT_HASH_INTERFACE
Recupere os provedores de funções de hash .
BCRYPT_RNG_INTERFACE
Recupere os provedores de função gerador de número aleatório.
BCRYPT_SECRET_AGREEMENT_INTERFACE
Recupere os provedores de funções do contrato secreto.
BCRYPT_SIGNATURE_INTERFACE
Recupere os provedores de funções de assinatura.
NCRYPT_KEY_STORAGE_INTERFACE
Recupere os principais provedores de funções de armazenamento.
NCRYPT_SCHANNEL_INTERFACE
Recupere os provedores de funções Schannel.

[in] pszFunction

Um ponteiro para uma cadeia de caracteres Unicode terminada em nulo que contém o identificador da função para a qual enumerar os provedores.

[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_FUNCTION_PROVIDERS que recebe o conjunto de provedores de funções de contexto recuperados 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
Nenhum provedor de funções de contexto que corresponda aos critérios especificados foi encontrado.

Comentários

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

Exemplos

O exemplo a seguir mostra como usar a função BCryptEnumContextFunctionProviders para enumerar os provedores para todas 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 <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;
}

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

BCryptFreeBuffer

CRYPT_CONTEXT_FUNCTION_PROVIDERS