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 |
---|---|
|
Recuperare le funzioni di contesto dalla tabella di configurazione del computer locale. |
|
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 |
---|---|
|
Recuperare i provider di funzioni di crittografia asimmetrica. |
|
Recuperare i provider di funzioni di crittografia. |
|
Recuperare i provider di funzioni hash . |
|
Recuperare i provider di funzioni generatore di numeri casuali. |
|
Recuperare i provider di funzioni del contratto segreto. |
|
Recuperare i provider di funzioni di firma. |
|
Recuperare i provider di funzioni di archiviazione delle chiavi. |
|
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 |
---|---|
|
La funzione ha avuto esito positivo. |
|
Il parametro ppBuffer non è NULL e il valore a cui punta il parametro pcbBuffer non è sufficiente per contenere il set di contesti. |
|
Uno o più parametri non sono validi. |
|
Si è verificato un errore di allocazione della memoria. |
|
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 |