NCryptCreatePersistedKeyFn
コールバックシグネチャ
HRESULT NCryptCreatePersistedKeyFn(
NCRYPT_PROV_HANDLE hProvider,
NCRYPT_KEY_HANDLE* phKey,
LPWSTR pszAlgId,
LPWSTR pszKeyName,
DWORD dwLegacyKeySpec,
DWORD dwFlags
);パラメーター
| フィールド | 型 | 説明 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| hProvider | NCRYPT_PROV_HANDLE | キーを作成するキーストレージプロバイダーのハンドルです。このハンドルは NCryptOpenStorageProvider 関数を使用して取得します。 | ||||||||||||
| phKey | NCRYPT_KEY_HANDLE* | キーのハンドルを受け取る NCRYPT_KEY_HANDLE 変数のアドレスです。このハンドルの使用を終えたら、NCryptFreeObject 関数に渡して解放してください。ディスク上のキーファイルを削除するには、ハンドルを NCryptDeleteKey 関数に渡します。この場合もハンドルは解放されます。したがってアプリケーションは、ハンドルを NCryptFreeObject または NCryptDeleteKey のいずれかに渡すことはできますが、両方に渡すことはできません。 | ||||||||||||
| pszAlgId | LPWSTR | キーを作成する暗号アルゴリズムの識別子を格納した、NULL で終わる Unicode 文字列へのポインターです。標準の CNG Algorithm Identifiers のいずれか、または登録された他のアルゴリズムの識別子を指定できます。 | ||||||||||||
| pszKeyName | LPWSTR | キーの名前を格納した、NULL で終わる Unicode 文字列へのポインターです。このパラメーターが NULL の場合、この関数は永続化されない一時的な (エフェメラル) キーを作成します。 | ||||||||||||
| dwLegacyKeySpec | DWORD | キーの種類を指定するレガシーの識別子です。次のいずれかの値を指定できます。
| ||||||||||||
| dwFlags | DWORD | この関数の動作を変更するフラグのセットです。0、または次の値の 1 つ以上の組み合わせを指定できます。
|
公式ドキュメント
NCryptCreatePersistedKey 関数は、新しいキーを作成し、指定されたキーストレージプロバイダーに格納します。この関数でキーを作成した後、NCryptSetProperty 関数でそのプロパティを設定できます。ただし、NCryptFinalizeKey 関数が呼び出されるまで、そのキーは使用できません。
戻り値
関数の成功または失敗を示すステータスコードを返します。
返される可能性のあるコードには、次のものが含まれます (これらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| ERROR_SUCCESS | 関数は成功しました。 |
| NTE_BAD_FLAGS | dwFlags パラメーターに有効でない値が含まれています。 |
| NTE_EXISTS | 指定した名前のキーが既に存在し、NCRYPT_OVERWRITE_KEY_FLAG が指定されていませんでした。 |
| NTE_INVALID_HANDLE | hProvider パラメーターが有効ではありません。 |
| NTE_INVALID_PARAMETER | 1 つ以上のパラメーターが有効ではありません。 |
| NTE_NO_MEMORY | メモリの割り当てに失敗しました。 |
| NTE_VBS_UNAVAILABLE | VBS が利用できません。 |
解説(Remarks)
VBS フラグに関する情報は、商用リリース前に大幅に変更される可能性があるプレリリース製品に関するものです。Microsoft は、ここで提供される情報について、明示または黙示を問わず、いかなる保証も行いません。
RSA キーペアを作成する場合、キーを確定する際に NCryptFinalizeKey 関数へ NCRYPT_WRITE_KEY_TO_LEGACY_STORE_FLAG フラグを渡すことで、CryptoAPI から使用できるようにキーをレガシーストレージにも格納できます。
サービスは、この関数を StartService Function から呼び出してはいけません。サービスが StartService 関数からこの関数を呼び出すと、デッドロックが発生し、サービスが応答しなくなる可能性があります。
VBS キーに関する追加のハードウェア要件
適切な OS がコンピューターにインストールされていても、VBS を使用してキーを生成および保護するには、次の追加のハードウェア要件を満たす必要があります。
- VBS が有効であること (Virtualization-based security (VBS) を参照)
- TPM が有効であること
- ベアメタル環境では TPM 2.0 が必要です。
- VM 環境では vTPM (仮想 TPM) がサポートされます。
- BIOS は SecureBoot プロファイルを備えた UEFI にアップグレードされていること
ハードウェア要件の詳細については、次を参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)