Compartir a través de


Función BCryptEnumContextFunctionProviders (bcrypt.h)

La función BCryptEnumContextFunctionProviders obtiene los proveedores de las funciones criptográficas para un contexto de la tabla de configuración especificada.

Sintaxis

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 la tabla de configuración de la que se van a recuperar los proveedores de funciones de contexto. Puede ser uno de los siguientes valores.

Valor Significado
CRYPT_LOCAL
Recupere las funciones de contexto de la tabla de configuración de la máquina local.
CRYPT_DOMAIN
Este valor no está disponible para su uso.

[in] pszContext

Puntero a una cadena Unicode terminada en null que contiene el identificador del contexto para el que se enumeran los proveedores de funciones.

[in] dwInterface

Identifica la interfaz criptográfica para la que se recuperan los proveedores de funciones. Puede ser uno de los siguientes valores.

Valor Significado
BCRYPT_ASYMMETRIC_ENCRYPTION_INTERFACE
Recupere los proveedores de funciones de cifrado asimétrico.
BCRYPT_CIPHER_INTERFACE
Recupere los proveedores de funciones de cifrado.
BCRYPT_HASH_INTERFACE
Recupere los proveedores de funciones hash .
BCRYPT_RNG_INTERFACE
Recupere los proveedores de funciones del generador de números aleatorios.
BCRYPT_SECRET_AGREEMENT_INTERFACE
Recupere los proveedores de funciones del contrato secreto.
BCRYPT_SIGNATURE_INTERFACE
Recupere los proveedores de funciones de firma.
NCRYPT_KEY_STORAGE_INTERFACE
Recupere los proveedores de funciones de almacenamiento de claves.
NCRYPT_SCHANNEL_INTERFACE
Recupere los proveedores de funciones de Schannel.

[in] pszFunction

Puntero a una cadena Unicode terminada en null que contiene el identificador de la función para la que se van a enumerar los proveedores.

[in, out] pcbBuffer

La dirección de una variable ULONG que, en la entrada, contiene el tamaño, en bytes, del búfer al que apunta ppBuffer. Si este tamaño no es lo suficientemente grande como para contener el conjunto de identificadores de contexto, se producirá un error en esta función con STATUS_BUFFER_TOO_SMALL.

Una vez que esta función devuelve, este valor contiene el número de bytes que se copiaron en el búfer ppBuffer .

[in, out] ppBuffer

Dirección de un puntero a una estructura de CRYPT_CONTEXT_FUNCTION_PROVIDERS que recibe el conjunto de proveedores de funciones de contexto recuperados por esta función. El valor al que apunta el parámetro pcbBuffer contiene el tamaño de este búfer.

Si el valor al que apunta este parámetro es NULL, esta función asignará la memoria necesaria. Esta memoria debe liberarse cuando ya no sea necesaria pasando este puntero a la función BCryptFreeBuffer .

Si este parámetro es NULL, esta función colocará el tamaño necesario, en bytes, en la variable a la que apunta el parámetro pcbBuffer y devolverá STATUS_BUFFER_TOO_SMALL.

Valor devuelto

Devuelve un código de estado que indica el éxito o error de la función.

Entre los códigos de retorno posibles se incluyen, entre otros, los siguientes.

Código devuelto Descripción
STATUS_SUCCESS
La función se realizó correctamente.
STATUS_BUFFER_TOO_SMALL
El parámetro ppBuffer no es NULL y el valor al que apunta el parámetro pcbBuffer no es lo suficientemente grande como para contener el conjunto de contextos.
STATUS_INVALID_PARAMETER
Uno o más parámetros no son válidos.
STATUS_NO_MEMORY
Error de asignación de memoria.
STATUS_NOT_FOUND
No se encontraron proveedores de funciones de contexto que coincidan con los criterios especificados.

Comentarios

Solo se puede llamar a BCryptEnumContextFunctionProviders en modo de usuario.

Ejemplos

En el ejemplo siguiente se muestra cómo usar la función BCryptEnumContextFunctionProviders para enumerar los proveedores de todas las funciones de almacenamiento de claves para todos los contextos de la tabla de configuración del equipo 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 Value
Cliente mínimo compatible Windows Vista [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2008 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado bcrypt.h
Library Bcrypt.lib
Archivo DLL Bcrypt.dll

Consulte también

BCryptFreeBuffer

CRYPT_CONTEXT_FUNCTION_PROVIDERS