Freigeben über


BCryptEnumContextFunctionProviders-Funktion (bcrypt.h)

Die Funktion BCryptEnumContextFunctionProviders ruft die Anbieter für die kryptografischen Funktionen für einen Kontext in der angegebenen Konfigurationstabelle ab.

Syntax

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

Parameter

[in] dwTable

Gibt die Konfigurationstabelle an, aus der die Kontextfunktionsanbieter abgerufen werden sollen. Dies kann einer der folgenden Werte sein.

Wert Bedeutung
CRYPT_LOCAL
Rufen Sie die Kontextfunktionen aus der Konfigurationstabelle des lokalen Computers ab.
CRYPT_DOMAIN
Dieser Wert steht nicht zur Verwendung zur Verfügung.

[in] pszContext

Ein Zeiger auf eine Unicode-Zeichenfolge mit NULL-Beendigung, die den Bezeichner des Kontexts enthält, für den die Funktionsanbieter aufgelistet werden sollen.

[in] dwInterface

Gibt die kryptografische Schnittstelle an, für die die Funktionsanbieter abgerufen werden sollen. Dies kann einer der folgenden Werte sein.

Wert Bedeutung
BCRYPT_ASYMMETRIC_ENCRYPTION_INTERFACE
Rufen Sie die Anbieter von asymmetrischen Verschlüsselungsfunktionen ab.
BCRYPT_CIPHER_INTERFACE
Rufen Sie die Verschlüsselungsfunktionsanbieter ab.
BCRYPT_HASH_INTERFACE
Rufen Sie die Hashfunktionsanbieter ab.
BCRYPT_RNG_INTERFACE
Rufen Sie die Funktionsanbieter des Zufallsgenerators ab.
BCRYPT_SECRET_AGREEMENT_INTERFACE
Rufen Sie die Funktionsanbieter für geheime Vereinbarungen ab.
BCRYPT_SIGNATURE_INTERFACE
Rufen Sie die Signaturfunktionsanbieter ab.
NCRYPT_KEY_STORAGE_INTERFACE
Rufen Sie die Schlüsselspeicherfunktionsanbieter ab.
NCRYPT_SCHANNEL_INTERFACE
Rufen Sie die Schannel-Funktionsanbieter ab.

[in] pszFunction

Ein Zeiger auf eine Unicode-Zeichenfolge mit NULL-Beendigung, die den Bezeichner der Funktion enthält, für die die Anbieter aufgelistet werden sollen.

[in, out] pcbBuffer

Die Adresse einer ULONG-Variablen , die bei einem Eintrag die Größe des Puffers in Bytes enthält, auf den ppBuffer verweist. Wenn diese Größe nicht groß genug ist, um den Satz von Kontextbezeichnern aufzunehmen, schlägt diese Funktion mit STATUS_BUFFER_TOO_SMALL fehl.

Nachdem diese Funktion zurückgegeben wurde, enthält dieser Wert die Anzahl der Bytes, die in den ppBuffer-Puffer kopiert wurden.

[in, out] ppBuffer

Die Adresse eines Zeigers auf eine CRYPT_CONTEXT_FUNCTION_PROVIDERS Struktur, die den Satz von Kontextfunktionsanbietern empfängt, die von dieser Funktion abgerufen werden. Der Wert, auf den der pcbBuffer-Parameter verweist, enthält die Größe dieses Puffers.

Wenn der Wert, auf den dieser Parameter verweist, NULL ist, weist diese Funktion den erforderlichen Arbeitsspeicher zu. Dieser Speicher muss freigegeben werden, wenn er nicht mehr benötigt wird, indem dieser Zeiger an die BCryptFreeBuffer-Funktion übergeben wird.

Wenn dieser Parameter NULL ist, platziert diese Funktion die erforderliche Größe in Bytes in der Variablen, auf die der pcbBuffer-Parameter verweist, und gibt STATUS_BUFFER_TOO_SMALL zurück.

Rückgabewert

Gibt einen status Code zurück, der den Erfolg oder Fehler der Funktion angibt.

Mögliche Rückgabecodes umfassen folgendes, sind aber nicht darauf beschränkt.

Rückgabecode Beschreibung
STATUS_SUCCESS
Die Funktion war erfolgreich.
STATUS_BUFFER_TOO_SMALL
Der ppBuffer-Parameter ist nicht NULL, und der Wert, auf den der pcbBuffer-Parameter verweist, ist nicht groß genug, um den Satz von Kontexten zu enthalten.
STATUS_INVALID_PARAMETER
Mindestens ein Parameter ist ungültig.
STATUS_NO_MEMORY
Ein Fehler bei der Speicherzuordnung ist aufgetreten.
STATUS_NOT_FOUND
Es wurden keine Kontextfunktionsanbieter gefunden, die den angegebenen Kriterien entsprechen.

Hinweise

BCryptEnumContextFunctionProviders kann nur im Benutzermodus aufgerufen werden.

Beispiele

Das folgende Beispiel zeigt, wie Sie die BCryptEnumContextFunctionProviders-Funktion verwenden, um die Anbieter für alle Schlüsselspeicherfunktionen für alle Kontexte in der Konfigurationstabelle für den lokalen Computer aufzulisten.

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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Vista [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile bcrypt.h
Bibliothek Bcrypt.lib
DLL Bcrypt.dll

Weitere Informationen

BCryptFreeBuffer

CRYPT_CONTEXT_FUNCTION_PROVIDERS