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

BCryptOpenAlgorithmProviderFn

コールバック

シグネチャ

NTSTATUS BCryptOpenAlgorithmProviderFn(
    BCRYPT_ALG_HANDLE* phAlgorithm,
    LPWSTR pszAlgId,
    DWORD dwFlags
);

パラメーター

フィールド型説明
phAlgorithmBCRYPT_ALG_HANDLE*CNG プロバイダーのハンドルを受け取る BCRYPT_ALG_HANDLE 変数へのポインターです。このハンドルの使用を終えたら、BCryptCloseAlgorithmProvider 関数に渡して解放してください。
pszAlgIdLPWSTR要求する暗号アルゴリズムを識別する、null で終わる Unicode 文字列へのポインターです。標準の CNG アルゴリズム識別子のいずれか、または登録された別のアルゴリズムの識別子を指定できます。
dwFlagsDWORD

関数の動作を変更するフラグです。0、または次の値のうち 1 つ以上の組み合わせを指定できます。

値 意味
BCRYPT_ALG_HANDLE_HMAC_FLAG プロバイダーは、指定されたハッシュアルゴリズムを使用して ハッシュベースメッセージ認証コード (HMAC) アルゴリズムを実行します。このフラグはハッシュアルゴリズムのプロバイダーでのみ使用されます。
BCRYPT_PROV_DISPATCH プロバイダーを非ページメモリプールに読み込みます。このフラグが指定されていない場合、プロバイダーはページメモリプールに読み込まれます。このフラグを指定した場合、依存するすべてのオブジェクトが解放されるまで、返されたハンドルを閉じてはいけません。

注: このフラグはカーネルモードでのみサポートされ、プロバイダーに対する以降の操作を Dispatch レベルで処理できるようにします。プロバイダーが dispatch レベルでの呼び出しをサポートしていない場合、このフラグを使用して開くとエラーが返されます。

Windows Server 2008 および Windows Vista: このフラグは Microsoft のアルゴリズムプロバイダーでのみサポートされ、対象はハッシュアルゴリズムと対称キーの暗号アルゴリズムに限られます。
BCRYPT_HASH_REUSABLE_FLAG 再利用可能なハッシュオブジェクトを持つハッシュアルゴリズムを作成します。これらのアルゴリズムのハッシュオブジェクトは、BCryptFinishHash を呼び出した直後に、新しいハッシュ操作に使用できます。詳細については、CNG によるハッシュの作成を参照してください。

Windows Server 2008 R2、Windows 7、Windows Server 2008 および Windows Vista: このフラグはサポートされていません。

公式ドキュメント

BCryptOpenAlgorithmProvider 関数は、CNG アルゴリズムプロバイダーを読み込んで初期化します。

注: Windows 10 以降を対象とする場合は、CNG アルゴリズムプロバイダーを開いたり閉じたりする代わりに、CNG アルゴリズム疑似ハンドルの使用を検討してください。制限事項については、CNG アルゴリズム疑似ハンドルのドキュメントの解説を参照してください。

戻り値

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

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

戻り値 説明
STATUS_SUCCESS 関数は成功しました。
STATUS_NOT_FOUND 指定されたアルゴリズム ID に対応するプロバイダーが見つかりませんでした。
STATUS_INVALID_PARAMETER 指定されたパラメーターのいずれかが無効です。
STATUS_NO_MEMORY メモリの割り当てに失敗しました。
STATUS_NOT_SUPPORTED 指定されたフラグのいずれかが、指定されたアルゴリズム ID ではサポートされていません。

解説(Remarks)

アルゴリズムプロバイダーの検索、読み込み、初期化に必要な操作の数と種類のため、BCryptOpenAlgorithmProvider 関数は比較的時間のかかる関数です。そのため、可能な場合は CNG アルゴリズム疑似ハンドルを使用するか、アルゴリズムプロバイダーを繰り返し開いたり閉じたりするのではなく、複数回使用するアルゴリズムプロバイダーのハンドルをキャッシュすることをお勧めします。

BCryptOpenAlgorithmProvider は、ユーザーモードとカーネルモードのどちらからでも呼び出せます。カーネルモードの呼び出し元は、PASSIVE_LEVEL の IRQL で実行されている必要があります。

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

Windows 10 以降、CNG は暗号化の構成に対するすべての更新を自動的に処理するわけではなくなりました。新しい既定のプロバイダーの追加や、アルゴリズムプロバイダーの優先順位の変更など、一部の変更では再起動が必要になる場合があります。そのため、新しく構成したプロバイダーを指定して BCryptOpenAlgorithmProvider を呼び出す前に、再起動してください。

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