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 |
---|---|
|
Rufen Sie die Kontextfunktionen aus der Konfigurationstabelle des lokalen Computers ab. |
|
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.
[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 |
---|---|
|
Die Funktion war erfolgreich. |
|
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. |
|
Mindestens ein Parameter ist ungültig. |
|
Ein Fehler bei der Speicherzuordnung ist aufgetreten. |
|
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 |