Compartilhar via


Função BCryptEnumContexts (bcrypt.h)

[BCryptEnumContexts está disponível para uso nos sistemas operacionais especificados na seção Requisitos. Ele pode estar alterado ou indisponível em versões subsequentes.]

A função BCryptEnumContexts obtém os identificadores dos contextos na tabela de configuração especificada.

Sintaxe

NTSTATUS BCryptEnumContexts(
  [in]      ULONG           dwTable,
  [in, out] ULONG           *pcbBuffer,
  [in, out] PCRYPT_CONTEXTS *ppBuffer
);

Parâmetros

[in] dwTable

Identifica a tabela de configuração da qual recuperar os contextos. Esse pode ser um dos valores a seguir.

Valor Significado
CRYPT_LOCAL
Recupere os contextos da tabela de configuração do computador local.
CRYPT_DOMAIN
Esse valor não está disponível para uso.

[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_CONTEXTS que recebe o conjunto de contextos 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_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_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.

Comentários

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

Exemplos

O exemplo a seguir mostra como usar a função BCryptEnumContexts para alocar a memória para o buffer ppBuffer .

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

NTSTATUS EnumContexts_SystemAlloc()
{
    NTSTATUS status;
    ULONG uSize = 0;
    PCRYPT_CONTEXTS pContexts = NULL;
    
    // Get the contexts for the local computer. 
    // CNG allocates the memory.
    status = BCryptEnumContexts(CRYPT_LOCAL, &uSize, &pContexts);
    if(NT_SUCCESS(status))
    {
        // Enumerate the context identifiers.
        for(ULONG i = 0; i < pContexts->cContexts; i++)
        {
            wprintf(pContexts->rgpszContexts[i]);
            wprintf(L"\n");
        }

        // Free the buffer.
        BCryptFreeBuffer(pContexts);
    }

    return status;
}

O exemplo a seguir mostra como usar a função BCryptEnumContexts para alocar sua própria memória para o buffer ppBuffer .

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

NTSTATUS EnumContexts_SelfAlloc()
{
    NTSTATUS status;
    ULONG uSize = 0;
    
    // Get the required size of the buffer.
    status = BCryptEnumContexts(CRYPT_LOCAL, &uSize, NULL);
    if(STATUS_BUFFER_TOO_SMALL == status)
    {
        // Allocate the buffer.
        PCRYPT_CONTEXTS pContexts = (PCRYPT_CONTEXTS)HeapAlloc(
            GetProcessHeap(), 
            HEAP_ZERO_MEMORY, 
            uSize);
        if(pContexts)
        {
            // Get the contexts for the local machine.
            status = BCryptEnumContexts(
                CRYPT_LOCAL, 
                &uSize, 
                &pContexts);
            if(NT_SUCCESS((status))
            {
                // Enumerate the context identifiers.
                for(ULONG i = 0; i < pContexts->cContexts; i++)
                {
                    wprintf(pContexts->rgpszContexts[i]);
                    wprintf(L"\n");
                }
            }

            // Free the buffer.
            HeapFree(GetProcessHeap(), 0, pContexts);
            pContexts = NULL;
        }
        else
        {
            status = STATUS_NO_MEMORY;
        }
    }

    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_CONTEXTS