BCryptExportKeyFn
コールバックシグネチャ
NTSTATUS BCryptExportKeyFn(
BCRYPT_KEY_HANDLE hKey,
BCRYPT_KEY_HANDLE hExportKey,
LPWSTR pszBlobType,
BYTE* pbOutput,
DWORD cbOutput,
DWORD* pcbResult,
DWORD dwFlags
);パラメーター
| フィールド | 型 | 説明 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| hKey | BCRYPT_KEY_HANDLE | エクスポートするキーのハンドルです。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| hExportKey | BCRYPT_KEY_HANDLE | エクスポートされるキーをラップするために使用するキーのハンドルです。BCRYPT_AES_WRAP_KEY_BLOB 型の BLOB をエクスポートするときにこのパラメーターを使用します。それ以外の場合は メモ
hExportKey ハンドルは、hKey ハンドルを提供したものと同じプロバイダーから提供される必要があります。また、hExportKey は Advanced Encryption Standard (AES) キーラップアルゴリズムで使用できる対称キーのハンドルである必要があります。hKey ハンドルが Microsoft プロバイダーのものである場合、hExportKey は AES キーのハンドルである必要があります。 Windows Server 2008 および Windows Vista: このパラメーターは使用されないため、 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| pszBlobType | LPWSTR | エクスポートする BLOB の種類を指定する識別子を格納した、null で終わる Unicode 文字列です。次のいずれかの値を指定できます。
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| pbOutput | BYTE* | キー BLOB を受け取るバッファーのアドレスです。cbOutput パラメーターには、このバッファーのサイズを指定します。このパラメーターが NULL の場合、この関数は必要なサイズをバイト単位で、pcbResult パラメーターが指す ULONG に格納します。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| cbOutput | DWORD | pbOutput バッファーのサイズをバイト単位で指定します。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| pcbResult | DWORD* | pbOutput バッファーにコピーされたバイト数を受け取る ULONG へのポインターです。pbOutput パラメーターが NULL の場合、この関数は必要なサイズをバイト単位で、このパラメーターが指す ULONG に格納します。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| dwFlags | DWORD | この関数の動作を変更するフラグのセットです。この関数に対して定義されているフラグはありません。 |
公式ドキュメント
BCryptExportKey 関数は、キーを、後で使用するために永続化できるメモリ BLOB にエクスポートします。
戻り値
関数の成功または失敗を示すステータスコードを返します。
返される可能性のあるコードには、次のものが含まれます (ただし、これらに限定されません)。
| リターンコード | 説明 |
|---|---|
| STATUS_SUCCESS | 関数は成功しました。 |
| STATUS_BUFFER_TOO_SMALL | cbOutput パラメーターで指定されたサイズが、暗号文を格納するのに十分な大きさではありません。バッファー pbOutput が小さすぎる場合、pcbResult は pbOutput に必要なバイト数を受け取ります。 |
| STATUS_INVALID_HANDLE | hKey パラメーターのキーハンドルが無効です。 |
| STATUS_INVALID_PARAMETER | 1 つ以上のパラメーターが無効です。 |
| STATUS_NOT_SUPPORTED | 指定された BLOB 型はプロバイダーでサポートされていません。指定されたキーハンドルが秘密シードのエクスポートをサポートしていない場合も同様です。解説 を参照してください。 |
解説(Remarks)
サポートされているアルゴリズムプロバイダーを使用する場合、BCryptExportKey はユーザーモードとカーネルモードのどちらからでも呼び出せます。カーネルモードの呼び出し元は、PASSIVE_LEVEL IRQL または DISPATCH_LEVEL IRQL のいずれでも実行できます。現在の IRQL レベルが DISPATCH_LEVEL の場合、hKey パラメーターに渡すハンドルは、BCRYPT_PROV_DISPATCH フラグを指定して開かれたプロバイダーが返したアルゴリズムハンドルから派生したものである必要があり、BCryptExportKey 関数に渡すポインターはページング不可 (またはロックされた) メモリを参照している必要があります。
この関数をカーネルモードで呼び出すには、Driver Development Kit (DDK) に含まれる Cng.lib を使用します。Windows Server 2008 および Windows Vista: この関数をカーネルモードで呼び出すには、Ksecdd.lib を使用します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)