Win32 API 日本語リファレンス
ホーム › Security.Cryptography › BCryptGenRandomFn

BCryptGenRandomFn

コールバック

シグネチャ

NTSTATUS BCryptGenRandomFn(
    BCRYPT_ALG_HANDLE hAlgorithm,
    BYTE* pbBuffer,
    DWORD cbBuffer,
    DWORD dwFlags
);

パラメーター

フィールド型説明
hAlgorithmBCRYPT_ALG_HANDLEBCryptOpenAlgorithmProvider 関数を使用して作成されたアルゴリズムプロバイダーのハンドルです。プロバイダーの作成時に指定されたアルゴリズムは、乱数ジェネレーターインターフェイスをサポートしている必要があります。
pbBufferBYTE*乱数を受け取るバッファーのアドレスです。このバッファーのサイズは、cbBuffer パラメーターで指定します。
cbBufferDWORDpbBuffer バッファーのサイズ (バイト単位) です。
dwFlagsDWORD

この関数の動作を変更するフラグのセットです。このパラメーターには、0 または次の値を指定できます。

値 意味
BCRYPT_RNG_USE_ENTROPY_IN_BUFFER
0x00000001
この関数は、pbBuffer バッファー内の数値を乱数の追加エントロピーとして使用します。このフラグを指定しない場合、この関数はエントロピーとして乱数を使用します。

Windows 8 以降: このフラグは Windows 8 以降では無視されます。

BCRYPT_USE_SYSTEM_PREFERRED_RNG
0x00000002
システム優先の乱数ジェネレーターアルゴリズムを使用します。hAlgorithm パラメーターは NULL である必要があります。

BCRYPT_USE_SYSTEM_PREFERRED_RNG は、PASSIVE_LEVEL IRQL でのみサポートされます。詳細については、「解説」を参照してください。

Windows Vista: このフラグは SP2 がない環境ではサポートされません。

公式ドキュメント

BCryptGenRandom 関数は、乱数を生成します。

戻り値

関数の成功または失敗を示すステータスコードを返します。

返される可能性のあるコードには、次のものが含まれます (ただし、これらに限定されません)。

戻り値 説明
STATUS_SUCCESS
関数は成功しました。
STATUS_INVALID_HANDLE
hAlgorithm パラメーターのハンドルが無効です。
STATUS_INVALID_PARAMETER
1 つ以上のパラメーターが無効です。

解説(Remarks)

既定の乱数プロバイダーは、NIST SP800-90 標準、特にその標準の CTR_DRBG の部分に準拠した乱数生成アルゴリズムを実装しています。

Windows Vista: Windows Vista with Service Pack 1 (SP1) より前では、既定の乱数プロバイダーは FIPS 186-2 標準に準拠した乱数生成アルゴリズムを実装しています。

サポートされているアルゴリズムプロバイダーを使用する場合、BCryptGenRandom はユーザーモードとカーネルモードのどちらからでも呼び出せます。カーネルモードの呼び出し元は、PASSIVE_LEVEL IRQL と DISPATCH_LEVEL IRQL のいずれでも実行できます。現在の IRQL レベルが DISPATCH_LEVEL の場合、hAlgorithm パラメーターに渡すハンドルは BCRYPT_PROV_DISPATCH フラグを使用して開かれている必要があり、BCryptGenRandom 関数に渡すポインターはページング不可 (またはロックされた) メモリを参照している必要があります。Windows Vista: Microsoft プロバイダーは DISPATCH_LEVEL での呼び出しをサポートしていません。

この関数をカーネルモードで呼び出すには、Driver Development Kit (DDK) に含まれる Cng.lib を使用します。Windows Server 2008 および Windows Vista: この関数をカーネルモードで呼び出すには、Ksecdd.lib を使用します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)