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