BCryptOpenAlgorithmProviderFn
コールバックシグネチャ
NTSTATUS BCryptOpenAlgorithmProviderFn(
BCRYPT_ALG_HANDLE* phAlgorithm,
LPWSTR pszAlgId,
DWORD dwFlags
);パラメーター
| フィールド | 型 | 説明 | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| phAlgorithm | BCRYPT_ALG_HANDLE* | CNG プロバイダーのハンドルを受け取る BCRYPT_ALG_HANDLE 変数へのポインターです。このハンドルの使用を終えたら、BCryptCloseAlgorithmProvider 関数に渡して解放してください。 | ||||||||
| pszAlgId | LPWSTR | 要求する暗号アルゴリズムを識別する、null で終わる Unicode 文字列へのポインターです。標準の CNG アルゴリズム識別子のいずれか、または登録された別のアルゴリズムの識別子を指定できます。 | ||||||||
| dwFlags | DWORD | 関数の動作を変更するフラグです。0、または次の値のうち 1 つ以上の組み合わせを指定できます。
|
公式ドキュメント
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 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)