BCryptEnumContextFunctionProviders 関数 (bcrypt.h)
BCryptEnumContextFunctionProviders 関数は、指定された構成テーブル内のコンテキストの暗号化関数のプロバイダーを取得します。
構文
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
);
パラメーター
[in] dwTable
コンテキスト関数プロバイダーの取得元となる構成テーブルを識別します。 次のいずれかの値を指定できます。
値 | 意味 |
---|---|
|
local-machine 構成テーブルからコンテキスト関数を取得します。 |
|
この値は使用できません。 |
[in] pszContext
関数プロバイダーを列挙するコンテキストの識別子を含む null で終わる Unicode 文字列へのポインター。
[in] dwInterface
関数プロバイダーを取得する暗号化インターフェイスを識別します。 次のいずれかの値を指定できます。
値 | 意味 |
---|---|
|
非対称暗号化関数プロバイダーを取得します。 |
|
暗号関数プロバイダーを取得します。 |
|
ハッシュ関数プロバイダーを取得します。 |
|
乱数ジェネレーター関数プロバイダーを取得します。 |
|
シークレット アグリーメント関数プロバイダーを取得します。 |
|
署名関数プロバイダーを取得します。 |
|
キー ストレージ関数プロバイダーを取得します。 |
|
Schannel 関数プロバイダーを取得します。 |
[in] pszFunction
プロバイダーを列挙する関数の識別子を含む null で終わる Unicode 文字列へのポインター。
[in, out] pcbBuffer
入力時に ppBuffer が指すバッファーのサイズ (バイト単位) を含む ULONG 変数のアドレス。 このサイズがコンテキスト識別子のセットを保持するのに十分な大きさでない場合、この関数は STATUS_BUFFER_TOO_SMALLで失敗します。
この関数が戻った後、この値には ppBuffer バッファーにコピーされたバイト数が含まれます。
[in, out] ppBuffer
この関数によって取得されたコンテキスト関数プロバイダーのセットを受け取る CRYPT_CONTEXT_FUNCTION_PROVIDERS 構造体へのポインターのアドレス。 pcbBuffer パラメーターが指す値には、このバッファーのサイズが含まれています。
このパラメーターが指す値が NULL の場合、この関数は必要なメモリを割り当てます。 このメモリは、このポインターを BCryptFreeBuffer 関数に渡すことによって不要になったときに解放する必要があります。
このパラメーターが NULL の場合、この関数は pcbBuffer パラメーターが指す変数に必要なサイズをバイト単位で配置し、 STATUS_BUFFER_TOO_SMALLを返します。
戻り値
関数の成功または失敗を示す状態コードを返します。
可能なリターン コードには、次のものが含まれますが、これらに限定されません。
リターン コード | 説明 |
---|---|
|
関数は成功しました。 |
|
ppBuffer パラメーターは NULL ではなく、pcbBuffer パラメーターが指す値は、コンテキストのセットを保持するのに十分な大きさではありません。 |
|
1 つ以上のパラメーターが無効です。 |
|
メモリ割り当てエラーが発生しました。 |
|
指定した条件に一致するコンテキスト関数プロバイダーが見つかりませんでした。 |
注釈
BCryptEnumContextFunctionProviders は、ユーザー モードでのみ呼び出すことができます。
例
次の例では、 BCryptEnumContextFunctionProviders 関数を使用して、ローカル コンピューター構成テーブル内のすべてのコンテキストのすべてのキー ストレージ関数のプロバイダーを列挙する方法を示します。
#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;
}
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2008 [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | bcrypt.h |
Library | Bcrypt.lib |
[DLL] | Bcrypt.dll |