NCryptExportKeyFn
コールバックシグネチャ
HRESULT NCryptExportKeyFn(
NCRYPT_PROV_HANDLE hProvider,
NCRYPT_KEY_HANDLE hKey,
NCRYPT_KEY_HANDLE hExportKey,
LPWSTR pszBlobType,
BCryptBufferDesc* pParameterList,
BYTE* pbOutput,
DWORD cbOutput,
DWORD* pcbResult,
DWORD dwFlags
);パラメーター
| フィールド | 型 | 説明 | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| hProvider | NCRYPT_PROV_HANDLE | |||||||||||||||||
| hKey | NCRYPT_KEY_HANDLE | エクスポートするキーのハンドルです。 | ||||||||||||||||
| hExportKey | NCRYPT_KEY_HANDLE | エクスポート先のユーザーの暗号キーへのハンドルです。エクスポートされるキー BLOB 内のキーデータは、このキーを使用して暗号化されます。これにより、エクスポート先のユーザーだけがそのキー BLOB を利用できるようになります。 | ||||||||||||||||
| pszBlobType | LPWSTR | エクスポートする BLOB の種類を指定する識別子を格納した、null 終端の Unicode 文字列です。次のいずれかの値を指定できます。 BCRYPT_DH_PRIVATE_BLOBDiffie-Hellman の公開キー/秘密キーのペアをエクスポートします。pbOutput バッファーは、BCRYPT_DH_KEY_BLOB 構造体と、その直後に続くキーデータを受け取ります。 BCRYPT_DH_PUBLIC_BLOBDiffie-Hellman の公開キーをエクスポートします。pbOutput バッファーは、BCRYPT_DH_KEY_BLOB 構造体と、その直後に続くキーデータを受け取ります。 BCRYPT_DSA_PRIVATE_BLOBDSA の公開キー/秘密キーのペアをエクスポートします。pbOutput バッファーは、BCRYPT_DSA_KEY_BLOB 構造体と、その直後に続くキーデータを受け取ります。 BCRYPT_DSA_PUBLIC_BLOBDSA の公開キーをエクスポートします。pbOutput バッファーは、BCRYPT_DSA_KEY_BLOB 構造体と、その直後に続くキーデータを受け取ります。 BCRYPT_ECCPRIVATE_BLOB楕円曲線暗号 (ECC) の秘密キーをエクスポートします。pbOutput バッファーは、BCRYPT_ECCKEY_BLOB 構造体と、その直後に続くキーデータを受け取ります。 BCRYPT_ECCPUBLIC_BLOBECC の公開キーをエクスポートします。pbOutput バッファーは、BCRYPT_ECCKEY_BLOB 構造体と、その直後に続くキーデータを受け取ります。 BCRYPT_MLKEM_PRIVATE_SEED_BLOBML-KEM の秘密シードキーをエクスポートします。pbOutput バッファーは、BCRYPT_MLKEM_KEY_BLOB 構造体と、その直後に続くパラメーターセットおよびキーデータを受け取ります。 注: BCRYPT_MLKEM_PRIVATE_BLOB を使用してインポートされた秘密キーを保持する ML-KEM キーハンドルは、秘密シードキーをエクスポートするための情報が不足しています。 Windows Insiders (ビルド 27843): ML-KEM のサポートが開始されます。 BCRYPT_MLKEM_PRIVATE_BLOBML-KEM の秘密キー (デカプセル化キー) をエクスポートします。pbOutput バッファーは、BCRYPT_MLKEM_KEY_BLOB 構造体と、その直後に続くパラメーターセットおよびキーデータを受け取ります。 Windows Insiders (ビルド 27843): ML-KEM のサポートが開始されます。 BCRYPT_MLKEM_PUBLIC_BLOBML-KEM の公開キー (カプセル化キー) をエクスポートします。pbOutput バッファーは、BCRYPT_MLKEM_KEY_BLOB 構造体と、その直後に続くパラメーターセットおよびキーデータを受け取ります。 Windows Insiders (ビルド 27843): ML-KEM のサポートが開始されます。 BCRYPT_PQDSA_PRIVATE_SEED_BLOBPQDSA の秘密シードキーをエクスポートします。pbOutput バッファーは、BCRYPT_PQDSA_KEY_BLOB 構造体と、その直後に続くパラメーターセットおよびキーデータを受け取ります。 注: BCRYPT_PQDSA_PRIVATE_BLOB を使用してインポートされた秘密キーを保持する PQDSA キーハンドルは、秘密シードキーをエクスポートするための情報が不足しています。 Windows Insiders (ビルド 27843): ML-DSA のサポートが開始されます。 BCRYPT_PQDSA_PRIVATE_BLOBPQDSA の秘密キーをエクスポートします。pbOutput バッファーは、BCRYPT_PQDSA_KEY_BLOB 構造体と、その直後に続くパラメーターセットおよびキーデータを受け取ります。 Windows Insiders (ビルド 27843): ML-DSA のサポートが開始されます。 BCRYPT_PQDSA_PUBLIC_BLOBPQDSA の公開キーをエクスポートします。pbOutput バッファーは、BCRYPT_PQDSA_KEY_BLOB 構造体と、その直後に続くパラメーターセットおよびキーデータを受け取ります。 Windows Insiders (ビルド 27843): ML-DSA のサポートが開始されます。 BCRYPT_PUBLIC_KEY_BLOB任意の種類の汎用的な公開キーをエクスポートします。この BLOB に含まれるキーの種類は、BCRYPT_KEY_BLOB 構造体の Magic メンバーによって決まります。 BCRYPT_PRIVATE_KEY_BLOB任意の種類の汎用的な秘密キーをエクスポートします。この秘密キーには、必ずしも公開キーが含まれるとは限りません。この BLOB に含まれるキーの種類は、BCRYPT_KEY_BLOB 構造体の Magic メンバーによって決まります。 BCRYPT_RSAFULLPRIVATE_BLOB完全な RSA 公開キー/秘密キーのペアをエクスポートします。pbOutput バッファーは、BCRYPT_RSAKEY_BLOB 構造体と、その直後に続くキーデータを受け取ります。この BLOB には、BCRYPT_RSAPRIVATE_BLOB 型よりも多くのキーマテリアルが含まれます。 BCRYPT_RSAPRIVATE_BLOBRSA の公開キー/秘密キーのペアをエクスポートします。pbOutput バッファーは、BCRYPT_RSAKEY_BLOB 構造体と、その直後に続くキーデータを受け取ります。 BCRYPT_RSAPUBLIC_BLOBRSA の公開キーをエクスポートします。pbOutput バッファーは、BCRYPT_RSAKEY_BLOB 構造体と、その直後に続くキーデータを受け取ります。 LEGACY_DH_PRIVATE_BLOBDiffie-Hellman の公開キー/秘密キーのペアを格納した、レガシの Diffie-Hellman バージョン 3 秘密キー BLOB をエクスポートします。この BLOB は CryptoAPI を使用してインポートできます。 LEGACY_DH_PUBLIC_BLOBDiffie-Hellman の公開キーを格納した、レガシの Diffie-Hellman バージョン 3 秘密キー BLOB をエクスポートします。この BLOB は CryptoAPI を使用してインポートできます。 LEGACY_DSA_PRIVATE_BLOBCryptoAPI を使用してインポートできる形式で、DSA の公開キー/秘密キーのペアをエクスポートします。 LEGACY_DSA_PUBLIC_BLOBCryptoAPI を使用してインポートできる形式で、DSA の公開キーをエクスポートします。 LEGACY_RSAPRIVATE_BLOBCryptoAPI を使用してインポートできる形式で、RSA の公開キー/秘密キーのペアをエクスポートします。 LEGACY_RSAPUBLIC_BLOBCryptoAPI を使用してインポートできる形式で、RSA の公開キーをエクスポートします。 NCRYPT_CIPHER_KEY_BLOBNCRYPT_KEY_BLOB_HEADER 構造体として暗号キーをエクスポートします。 Windows 8 および Windows Server 2012: この値のサポートが開始されます。 NCRYPT_OPAQUETRANSPORT_BLOB単一の CSP に固有で、転送に適した形式でキーをエクスポートします。オペーク BLOB には可搬性がなく、その BLOB を生成したのと同じ CSP を使用してインポートする必要があります。 NCRYPT_PKCS7_ENVELOPE_BLOBPKCS #7 エンベロープ BLOB をエクスポートします。pParameterList パラメーターで指定するパラメーターには、次のパラメーターを含めることができるか、または含める必要があります (「必須または省略可能」列を参照)。
NCRYPT_PKCS8_PRIVATE_KEY_BLOBPKCS #8 秘密キー BLOB をエクスポートします。pParameterList パラメーターで指定するパラメーターには、次のパラメーターを含めることができるか、または含める必要があります (「必須または省略可能」列を参照)。
NCRYPT_PROTECTED_KEY_BLOBNCRYPT_KEY_BLOB_HEADER 構造体として保護されたキーをエクスポートします。 Windows 8 および Windows Server 2012: この値のサポートが開始されます。 NCRYPT_PQ_PRIVATE_KEY_BLOB任意の種類のポスト量子アルゴリズムの汎用的な秘密キーをエクスポートします。この BLOB に含まれるキーの種類は、NCRYPT_PQ_BLOB 構造体の Magic メンバーによって決まります。 | ||||||||||||||||
| pParameterList | BCryptBufferDesc* | キーのパラメーター情報を受け取る NCryptBufferDesc 構造体のアドレスです。この情報が不要な場合、このパラメーターは NULL にできます。 | ||||||||||||||||
| pbOutput | BYTE* | キー BLOB を受け取るバッファーのアドレスです。cbOutput パラメーターには、このバッファーのサイズを指定します。このパラメーターが NULL の場合、この関数は必要なサイズ (バイト単位) を pcbResult パラメーターが指す DWORD に格納します。 | ||||||||||||||||
| cbOutput | DWORD | pbOutput バッファーのサイズ (バイト単位) です。 | ||||||||||||||||
| pcbResult | DWORD* | pbOutput バッファーにコピーされたバイト数を受け取る DWORD 変数のアドレスです。pbOutput パラメーターが NULL の場合、この関数は必要なサイズ (バイト単位) を、このパラメーターが指す DWORD に格納します。 | ||||||||||||||||
| dwFlags | DWORD | 関数の動作を変更するフラグです。0 を指定するか、次の値の 1 つ以上を組み合わせて指定できます。有効なフラグの種類はキーストレージプロバイダーごとに異なります。次のフラグはすべてのプロバイダーに適用されます。
|
公式ドキュメント
NCryptExportKey 関数は、CNG キーをメモリ BLOB にエクスポートします。
戻り値
関数の成功または失敗を示すステータスコードを返します。
返される可能性のあるコードには、次のものが含まれます (これらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| ERROR_SUCCESS | 関数は成功しました。 |
| NTE_BAD_FLAGS | dwFlags パラメーターに無効な値が含まれています。 |
| NTE_BAD_KEY_STATE | hKey パラメーターで指定されたキーが無効です。このエラーの最も一般的な原因は、NCryptFinalizeKey 関数によってキーが完成されていないことです。 |
| NTE_BAD_TYPE | hKey パラメーターで指定されたキーは、pszBlobType パラメーターで指定された種類の BLOB にエクスポートできません。 |
| NTE_INVALID_HANDLE | hKey パラメーターまたは hExportKey パラメーターが無効です。 |
| NTE_INVALID_PARAMETER | 1 つ以上のパラメーターが無効です。 |
解説(Remarks)
サービスは、StartService 関数からこの関数を呼び出してはなりません。サービスが StartService 関数からこの関数を呼び出すと、デッドロックが発生し、サービスが応答しなくなる場合があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)