Share via


BCryptEnumContextFunctionProviders, fonction (bcrypt.h)

La fonction BCryptEnumContextFunctionProviders obtient les fournisseurs pour les fonctions de chiffrement d’un contexte dans la table de configuration spécifiée.

Syntaxe

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

Paramètres

[in] dwTable

Identifie la table de configuration à partir de laquelle récupérer les fournisseurs de fonctions de contexte. Il peut s’agir de l’une des valeurs suivantes.

Valeur Signification
CRYPT_LOCAL
Récupérez les fonctions de contexte à partir de la table de configuration de l’ordinateur local.
CRYPT_DOMAIN
Cette valeur n’est pas disponible pour une utilisation.

[in] pszContext

Pointeur vers une chaîne Unicode terminée par un caractère Null qui contient l’identificateur du contexte pour lequel énumérer les fournisseurs de fonctions.

[in] dwInterface

Identifie l’interface de chiffrement pour laquelle récupérer les fournisseurs de fonctions. Il peut s’agir de l’une des valeurs suivantes.

Valeur Signification
BCRYPT_ASYMMETRIC_ENCRYPTION_INTERFACE
Récupérez les fournisseurs de fonctions de chiffrement asymétrique.
BCRYPT_CIPHER_INTERFACE
Récupérez les fournisseurs de fonctions de chiffrement.
BCRYPT_HASH_INTERFACE
Récupérez les fournisseurs de fonction de hachage .
BCRYPT_RNG_INTERFACE
Récupérez les fournisseurs de fonction générateur de nombres aléatoires.
BCRYPT_SECRET_AGREEMENT_INTERFACE
Récupérez les fournisseurs de fonctions de contrat secret.
BCRYPT_SIGNATURE_INTERFACE
Récupérez les fournisseurs de fonctions de signature.
NCRYPT_KEY_STORAGE_INTERFACE
Récupérez les fournisseurs de fonctions de stockage de clés.
NCRYPT_SCHANNEL_INTERFACE
Récupérez les fournisseurs de fonctions Schannel.

[in] pszFunction

Pointeur vers une chaîne Unicode terminée par null qui contient l’identificateur de la fonction pour laquelle énumérer les fournisseurs.

[in, out] pcbBuffer

Adresse d’une variable ULONG qui, à l’entrée, contient la taille, en octets, de la mémoire tampon pointée par ppBuffer. Si cette taille n’est pas suffisamment grande pour contenir l’ensemble d’identificateurs de contexte, cette fonction échoue avec STATUS_BUFFER_TOO_SMALL.

Une fois cette fonction retournée, cette valeur contient le nombre d’octets qui ont été copiés dans la mémoire tampon ppBuffer .

[in, out] ppBuffer

Adresse d’un pointeur vers une structure de CRYPT_CONTEXT_FUNCTION_PROVIDERS qui reçoit l’ensemble des fournisseurs de fonctions de contexte récupérés par cette fonction. La valeur pointée par le paramètre pcbBuffer contient la taille de cette mémoire tampon.

Si la valeur pointée par ce paramètre est NULL, cette fonction alloue la mémoire requise. Cette mémoire doit être libérée quand elle n’est plus nécessaire en passant ce pointeur à la fonction BCryptFreeBuffer .

Si ce paramètre a la valeur NULL, cette fonction place la taille requise, en octets, dans la variable pointée par le paramètre pcbBuffer et retourne STATUS_BUFFER_TOO_SMALL.

Valeur retournée

Retourne un code status qui indique la réussite ou l’échec de la fonction.

Les codes de retour possibles incluent, sans s’y limiter, les éléments suivants.

Code de retour Description
STATUS_SUCCESS
La fonction a réussi.
STATUS_BUFFER_TOO_SMALL
Le paramètre ppBuffer n’est pas NULL et la valeur pointée par le paramètre pcbBuffer n’est pas suffisamment grande pour contenir l’ensemble de contextes.
STATUS_INVALID_PARAMETER
Un ou plusieurs paramètres ne sont pas valides.
STATUS_NO_MEMORY
Un échec d’allocation de mémoire s’est produit.
STATUS_NOT_FOUND
Aucun fournisseur de fonction de contexte qui correspond aux critères spécifiés n’a été trouvé.

Remarques

BCryptEnumContextFunctionProviders peut être appelé uniquement en mode utilisateur.

Exemples

L’exemple suivant montre comment utiliser la fonction BCryptEnumContextFunctionProviders pour énumérer les fournisseurs de toutes les fonctions de stockage clés pour tous les contextes de la table de configuration de l’ordinateur 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;
}

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Vista [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2008 [applications de bureau uniquement]
Plateforme cible Windows
En-tête bcrypt.h
Bibliothèque Bcrypt.lib
DLL Bcrypt.dll

Voir aussi

BCryptFreeBuffer

CRYPT_CONTEXT_FUNCTION_PROVIDERS