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 |
---|---|
|
Recupere as funções de contexto da tabela de configuração do computador local. |
|
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 |
---|---|
|
Recupere os provedores de funções de criptografia assimétrica. |
|
Recupere os provedores de funções de criptografia. |
|
Recupere os provedores de funções de hash . |
|
Recupere os provedores de função gerador de número aleatório. |
|
Recupere os provedores de funções do contrato secreto. |
|
Recupere os provedores de funções de assinatura. |
|
Recupere os principais provedores de funções de armazenamento. |
|
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 |
---|---|
|
A função foi bem-sucedida. |
|
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. |
|
Um ou mais dos parâmetros não são válidos. |
|
Ocorreu uma falha de alocação de memória. |
|
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 |