BCryptEnumContexts 関数 (bcrypt.h)
[BCryptEnumContexts は、[要件] セクションで指定されたオペレーティング システムで使用できます。 以降のバージョンでは変更または使用できない場合があります。]
BCryptEnumContexts 関数は、指定された構成テーブル内のコンテキストの識別子を取得します。
構文
NTSTATUS BCryptEnumContexts(
[in] ULONG dwTable,
[in, out] ULONG *pcbBuffer,
[in, out] PCRYPT_CONTEXTS *ppBuffer
);
パラメーター
[in] dwTable
コンテキストの取得元となる構成テーブルを識別します。 これには、次のいずれかの値を指定できます。
値 | 意味 |
---|---|
|
local-machine 構成テーブルからコンテキストを取得します。 |
|
この値は使用できません。 |
[in, out] pcbBuffer
入力時に ppBuffer が指すバッファーのサイズ (バイト単位) を含む ULONG 変数のアドレス。 このサイズがコンテキスト識別子のセットを保持するのに十分な大きさでない場合、この関数は STATUS_BUFFER_TOO_SMALLで失敗します。
この関数が戻った後、この値には ppBuffer バッファーにコピーされたバイト数が含まれます。
[in, out] ppBuffer
この関数によって取得されたコンテキストのセットを受け取る CRYPT_CONTEXTS 構造体へのポインターのアドレス。 pcbBuffer パラメーターが指す値には、このバッファーのサイズが含まれています。
このパラメーターが指す値が NULL の場合、この関数は必要なメモリを割り当てます。 このメモリは、このポインターを BCryptFreeBuffer 関数に渡すことによって不要になった場合に解放する必要があります。
このパラメーターが NULL の場合、この関数は必要なサイズ (バイト単位) を pcbBuffer パラメーターが指す変数に配置し、 STATUS_BUFFER_TOO_SMALLを返します。
戻り値
関数の成功または失敗を示す状態コードを返します。
可能なリターン コードには、次のものが含まれますが、これらに限定されません。
リターン コード | 説明 |
---|---|
|
関数は成功しました。 |
|
1 つ以上のパラメーターが無効です。 |
|
メモリ割り当てエラーが発生しました。 |
|
ppBuffer パラメーターは NULL ではなく、pcbBuffer パラメーターが指す値は、コンテキストのセットを保持するのに十分な大きさではありません。 |
注釈
BCryptEnumContexts は 、ユーザー モードでのみ呼び出すことができます。
例
次の例は、 BCryptEnumContexts 関数を使用して ppBuffer バッファーのメモリを割り当てる方法を示しています。
#ifndef NT_SUCCESS
#define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0)
#endif
NTSTATUS EnumContexts_SystemAlloc()
{
NTSTATUS status;
ULONG uSize = 0;
PCRYPT_CONTEXTS pContexts = NULL;
// Get the contexts for the local computer.
// CNG allocates the memory.
status = BCryptEnumContexts(CRYPT_LOCAL, &uSize, &pContexts);
if(NT_SUCCESS(status))
{
// Enumerate the context identifiers.
for(ULONG i = 0; i < pContexts->cContexts; i++)
{
wprintf(pContexts->rgpszContexts[i]);
wprintf(L"\n");
}
// Free the buffer.
BCryptFreeBuffer(pContexts);
}
return status;
}
次の例は、 BCryptEnumContexts 関数を使用して 、ppBuffer バッファーに独自のメモリを割り当てる方法を示しています。
#ifndef NT_SUCCESS
#define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0)
#endif
NTSTATUS EnumContexts_SelfAlloc()
{
NTSTATUS status;
ULONG uSize = 0;
// Get the required size of the buffer.
status = BCryptEnumContexts(CRYPT_LOCAL, &uSize, NULL);
if(STATUS_BUFFER_TOO_SMALL == status)
{
// Allocate the buffer.
PCRYPT_CONTEXTS pContexts = (PCRYPT_CONTEXTS)HeapAlloc(
GetProcessHeap(),
HEAP_ZERO_MEMORY,
uSize);
if(pContexts)
{
// Get the contexts for the local machine.
status = BCryptEnumContexts(
CRYPT_LOCAL,
&uSize,
&pContexts);
if(NT_SUCCESS((status))
{
// Enumerate the context identifiers.
for(ULONG i = 0; i < pContexts->cContexts; i++)
{
wprintf(pContexts->rgpszContexts[i]);
wprintf(L"\n");
}
}
// Free the buffer.
HeapFree(GetProcessHeap(), 0, pContexts);
pContexts = NULL;
}
else
{
status = STATUS_NO_MEMORY;
}
}
return status;
}
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2008 [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | bcrypt.h |
Library | Bcrypt.lib |
[DLL] | Bcrypt.dll |