BCryptCreateMultiHash 関数は、複数のハッシュ操作を並列に計算できるマルチハッシュ状態を作成する。
BCryptCreateMultiHash hAlgorithm, phHash, nHashes, pbHashObject, cbHashObject, pbSecret, cbSecret, dwFlags
hAlgorithm : [int] *BCRYPT_ALG_HANDLE* `[in, out]` マルチハッシュ配列内のすべてのハッシュ状態に使用されるアルゴリズムハンドル。このアルゴリズムハンドルは、[BCryptOpenAlgorithmProvider](nf-bcrypt-bcryptopenalgorithmprovider.md) 関数に **BCYRPT_MULTI_FLAG** を渡してオープンされたものでなければならない。あるいは、呼び出し元が疑似ハンドルを使用することもできる。 phHash : [var] *BCRYPT_HASH_HANDLE** `[out]` マルチハッシュ状態を表すハンドルを受け取る **BCRYPT_HASH_HANDLE** 値へのポインタ。このハンドルは [BCryptProcessMultiOperations](nf-bcrypt-bcryptprocessmultioperations.md) などの後続の操作で使用される。ハンドルの使用が終わったら、[BCryptDestroyHash](nf-bcrypt-bcryptdestroyhash.md) 関数に渡して解放する。 nHashes : [int] *ULONG* `[in]` 配列内の要素数。この関数によって作成されるマルチハッシュ状態は、*nHashes* 個の異なるハッシュ状態に対する並列計算を行える。 pbHashObject : [var] *PUCHAR* `[out]` マルチハッシュ状態を受け取るバッファへのポインタ。サイズは [BCRYPT_MULTI_OBJECT_LENGTH_STRUCT](ns-bcrypt-bcrypt_multi_object_length_struct.md) 構造体の **cbPerObject** メンバと **cbPerElement** メンバから計算できる。値は次のとおり: `cbPerObject + (ハッシュ状態の数) * cbPerElement`。*pbHashObject* が `NULL` で *cbHashObject* が 0 の場合、オブジェクトバッファは自動的に確保される。 cbHashObject : [int] *ULONG* `[in]` *pbHashObject* バッファのサイズ。*pbHashObject* が `NULL` の場合は 0。 pbSecret : [var] *PUCHAR* `[in]` ハッシュまたは MAC に使用するキーを格納したバッファへのポインタ。*cbSecret* パラメータがこのバッファのサイズを示す。このキーは、[BCryptOpenAlgorithmProvider](nf-bcrypt-bcryptopenalgorithmprovider.md) 関数を **BCRYPT_ALG_HANDLE_HMAC** フラグを指定してオープンしたハッシュアルゴリズムにのみ適用される。それ以外の場合はこのパラメータを `NULL` に設定する。同じキーが配列のすべての要素に対して使用される。 cbSecret : [int] *ULONG* `[in]` *pbSecret* バッファのバイト単位のサイズ。キーを使用しない場合はこのパラメータを 0 に設定する。 dwFlags : [int] *ULONG* `[in]` 関数の動作を変更するフラグ。0 または以下の値を指定できる。マルチハッシュオブジェクトは常に再利用可能であり、常に **BCRYPT_HASH_REUSABLE_FLAG** が渡されたかのように振る舞う。このフラグは一貫性のためにここでもサポートされている。 | 値 | 意味 | |--------|--------| | **BCRYPT_HASH_REUSABLE_FLAG** | 再利用可能なハッシュオブジェクトを作成する。[BCryptFinishHash](nf-bcrypt-bcryptfinishhash.md) を呼び出した直後に新しいハッシュ操作で使用できる。詳細は [Creating a Hash with CNG](/windows/win32/SecCNG/creating-a-hash-with-cng) を参照。 |
(プラグイン / モジュール : bcrypt.dll)
BCryptCreateMultiHash 関数は、複数のハッシュ操作を並列に計算できるマルチハッシュ状態を作成する。 [戻り値] 関数の成否を示すステータスコードを返す。メソッドが成功した場合は `STATUS_SUCCESS` を返す。その他の **NTSTATUS** 値については [NTSTATUS Values](/openspecs/windows_protocols/ms-erref/596a1078-e883-4972-9bbc-49e60bebca55) を参照。 [備考] 内部的には、ハッシュアルゴリズムと使用可能な CPU 機能に応じて、SIMD 命令を用いて最大 8 個までの並列ハッシュ計算が同時に行われる。性能を最大化するため、呼び出し元は並列処理可能な計算を最低でも 8 個用意することが推奨される。長さの異なる計算では、より多くの計算を並列に渡したほうが、CPU レジスタへの計算スケジューリングがうまく行え、スループットの向上が見込める。最適なスループットを得るためには、8 ~ 100 個の計算を渡すことが推奨される。すべてのハッシュ計算が同じ長さである場合のみ、その範囲の下限を選ぶとよい。マルチハッシュは HMAC-MD2、HMAC-MD4、GMAC ではサポートされない。
| プラグイン / モジュール | bcrypt.dll |
| バージョン | 1.0 |
| 作成日 | 2026/04/16 |
| 著作者 | IronHSP / CsWin32 bridge |
| URL | https://github.com/inovia/IronHSP |
| 備考 | Win32 API の bcrypt.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。 |
| タイプ | 拡張命令 |
| グループ | Win32API |
| 対応環境 |
|
| hs ファイル | hsphelp\win32_bcrypt_gen2.hs |