Share via


Funzione BCryptEnumContextFunctionProviders (bcrypt.h)

La funzione BCryptEnumContextFunctionProviders ottiene i provider per le funzioni di crittografia per un contesto nella tabella di configurazione specificata.

Sintassi

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

Parametri

[in] dwTable

Identifica la tabella di configurazione da cui recuperare i provider di funzioni di contesto. Può trattarsi di uno dei valori seguenti.

Valore Significato
CRYPT_LOCAL
Recuperare le funzioni di contesto dalla tabella di configurazione del computer locale.
CRYPT_DOMAIN
Questo valore non è disponibile per l'uso.

[in] pszContext

Puntatore a una stringa Unicode con terminazione Null contenente l'identificatore del contesto per cui enumerare i provider di funzioni.

[in] dwInterface

Identifica l'interfaccia di crittografia per cui recuperare i provider di funzioni. Può trattarsi di uno dei valori seguenti.

Valore Significato
BCRYPT_ASYMMETRIC_ENCRYPTION_INTERFACE
Recuperare i provider di funzioni di crittografia asimmetrica.
BCRYPT_CIPHER_INTERFACE
Recuperare i provider di funzioni di crittografia.
BCRYPT_HASH_INTERFACE
Recuperare i provider di funzioni hash .
BCRYPT_RNG_INTERFACE
Recuperare i provider di funzioni generatore di numeri casuali.
BCRYPT_SECRET_AGREEMENT_INTERFACE
Recuperare i provider di funzioni del contratto segreto.
BCRYPT_SIGNATURE_INTERFACE
Recuperare i provider di funzioni di firma.
NCRYPT_KEY_STORAGE_INTERFACE
Recuperare i provider di funzioni di archiviazione delle chiavi.
NCRYPT_SCHANNEL_INTERFACE
Recuperare i provider di funzioni Schannel.

[in] pszFunction

Puntatore a una stringa Unicode con terminazione Null contenente l'identificatore della funzione per cui enumerare i provider.

[in, out] pcbBuffer

L'indirizzo di una variabile ULONG che, nella voce, contiene le dimensioni, in byte, del buffer a cui punta ppBuffer. Se questa dimensione non è sufficientemente grande da contenere il set di identificatori di contesto, questa funzione avrà esito negativo con STATUS_BUFFER_TOO_SMALL.

Al termine della restituzione di questa funzione, questo valore contiene il numero di byte copiati nel buffer ppBuffer .

[in, out] ppBuffer

Indirizzo di un puntatore a una struttura CRYPT_CONTEXT_FUNCTION_PROVIDERS che riceve il set di provider di funzioni di contesto recuperati da questa funzione. Il valore a cui punta il parametro pcbBuffer contiene le dimensioni di questo buffer.

Se il valore a cui punta questo parametro è NULL, questa funzione allocherà la memoria richiesta. Questa memoria deve essere liberata quando non è più necessaria passando questo puntatore alla funzione BCryptFreeBuffer .

Se questo parametro è NULL, questa funzione inserisce le dimensioni richieste, in byte, nella variabile a cui punta il parametro pcbBuffer e restituisce STATUS_BUFFER_TOO_SMALL.

Valore restituito

Restituisce un codice di stato che indica l'esito positivo o negativo della funzione.

I codici restituiti possibili includono, a titolo esemplificativo, quanto segue.

Codice restituito Descrizione
STATUS_SUCCESS
La funzione ha avuto esito positivo.
STATUS_BUFFER_TOO_SMALL
Il parametro ppBuffer non è NULL e il valore a cui punta il parametro pcbBuffer non è sufficiente per contenere il set di contesti.
STATUS_INVALID_PARAMETER
Uno o più parametri non sono validi.
STATUS_NO_MEMORY
Si è verificato un errore di allocazione della memoria.
STATUS_NOT_FOUND
Non sono stati trovati provider di funzioni di contesto che corrispondono ai criteri specificati.

Commenti

BCryptEnumContextFunctionProviders può essere chiamato solo in modalità utente.

Esempio

L'esempio seguente illustra come usare la funzione BCryptEnumContextFunctionProviders per enumerare i provider per tutte le funzioni di archiviazione chiave per tutti i contesti nella tabella di configurazione del computer locale.

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

Requisiti

Requisito Valore
Client minimo supportato Windows Vista [solo app desktop]
Server minimo supportato Windows Server 2008 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione bcrypt.h
Libreria Bcrypt.lib
DLL Bcrypt.dll

Vedi anche

BCryptFreeBuffer

CRYPT_CONTEXT_FUNCTION_PROVIDERS