Freigeben über


BCryptEnumContextFunctions-Funktion (bcrypt.h)

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

Syntax

NTSTATUS BCryptEnumContextFunctions(
  [in]      ULONG                    dwTable,
  [in]      LPCWSTR                  pszContext,
  [in]      ULONG                    dwInterface,
  [in, out] ULONG                    *pcbBuffer,
  [in, out] PCRYPT_CONTEXT_FUNCTIONS *ppBuffer
);

Parameter

[in] dwTable

Gibt die Konfigurationstabelle an, aus der die Kontextfunktionen 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 Funktionen aufgelistet werden sollen.

[in] dwInterface

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

Wert Bedeutung
BCRYPT_ASYMMETRIC_ENCRYPTION_INTERFACE
Rufen Sie die asymmetrischen Verschlüsselungsfunktionen ab.
BCRYPT_CIPHER_INTERFACE
Rufen Sie die Verschlüsselungsfunktionen ab.
BCRYPT_HASH_INTERFACE
Rufen Sie die Hashfunktionen ab.
BCRYPT_RNG_INTERFACE
Rufen Sie die Funktionen des Zufallsgenerators ab.
BCRYPT_SECRET_AGREEMENT_INTERFACE
Rufen Sie die Funktionen für geheime Vereinbarungen ab.
BCRYPT_SIGNATURE_INTERFACE
Rufen Sie die Signaturfunktionen ab.
NCRYPT_KEY_STORAGE_INTERFACE
Rufen Sie die Schlüsselspeicherfunktionen ab.
NCRYPT_SCHANNEL_INTERFACE
Rufen Sie die Schannel-Funktionen ab.

[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_FUNCTIONS Struktur, die den Satz von Kontextfunktionen 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 Kontextfunktionen gefunden, die den angegebenen Kriterien entsprechen.

Hinweise

BCryptEnumContextFunctions kann nur im Benutzermodus aufgerufen werden.

Beispiele

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

#include <windows.h>
#include <stdio.h>
#include <Bcrypt.h>
#pragma comment(lib, "Bcrypt.lib")

#ifndef NT_SUCCESS
#define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0)
#endif

NTSTATUS EnumContextFunctions()
{
    NTSTATUS status;
    ULONG uSize = 0;
    PCRYPT_CONTEXTS pContexts = NULL;
    
    // Get the contexts for the local machine. 
    // CNG will allocate the memory for us.
    status = BCryptEnumContexts(CRYPT_LOCAL, &uSize, &pContexts);
    if(NT_SUCCESS(status))
    {
        // Enumerate the context identifiers.
        for(ULONG uContextIndex = 0; 
            uContextIndex < pContexts->cContexts; 
            uContextIndex++)
        {
            wprintf(L"Context functions for %s:\n", 
                pContexts->rgpszContexts[uContextIndex]);

            // Get the functions for this context.
            // CNG will allocate the memory for us.
            PCRYPT_CONTEXT_FUNCTIONS pContextFunctions = NULL;
            status = BCryptEnumContextFunctions(
                CRYPT_LOCAL, 
                pContexts->rgpszContexts[uContextIndex], 
                NCRYPT_SCHANNEL_INTERFACE, 
                &uSize, 
                &pContextFunctions);
            if(NT_SUCCESS(status))
            {
                // Enumerate the functions.
                for(ULONG i = 0; 
                    i < pContextFunctions->cFunctions; 
                    i++)
                {
                    wprintf(L"\t%s\n", 
                        pContextFunctions->rgpszFunctions[i]);
                }

                // 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

CRYPT_CONTEXT_FUNCTIONS