CryptDuplicateKey 関数 (wincrypt.h)
構文
BOOL CryptDuplicateKey(
[in] HCRYPTKEY hKey,
[in] DWORD *pdwReserved,
[in] DWORD dwFlags,
[out] HCRYPTKEY *phKey
);
パラメーター
[in] hKey
複製するキーへのハンドル。
[in] pdwReserved
将来使用するために予約されており、 NULL である必要があります。
[in] dwFlags
将来使用するために予約されており、0 である必要があります。
[out] phKey
重複したキーへのハンドルのアドレス。 キーの使用が完了したら、 CryptDestroyKey 関数を呼び出してハンドルを解放します。
戻り値
関数が成功した場合、戻り値は 0 以外 (TRUE) になります。
関数が失敗した場合、戻り値は 0 (FALSE) になります。 拡張エラー情報については、 GetLastError を呼び出します。
"NTE" で前置きされたエラー コードは、使用されている特定の CSP によって生成されます。 考えられるエラー コードの一部を次の表に示します。
リターン コード | 説明 |
---|---|
|
これは新しい関数であるため、既存の CSP では実装されない可能性があります。 このエラーは、CSP がこの関数をサポートしていない場合に返されます。 |
|
パラメーターの 1 つに無効な値が含まれています。 これは、ほとんどの場合、無効なポインターです。 |
|
元のキーへのハンドルが無効です。 |
注釈
CryptDuplicateKey は 、キーのコピーとキーの正確な 状態 を作成します。 この関数を使用できるシナリオの 1 つは、アプリケーションが同じキーを持ち 、塩の値が異なる 2 つの個別のメッセージを暗号化する必要がある場合です。 元のキーが生成され、 CryptDuplicateKey 関数を使用して重複するキーが作成されます。 その後、 CryptSetKeyParam 関数を個別に呼び出して、元のキーと重複するキーに対して異なる salt 値が設定されます。
CryptDuplicateKey を 使用して作成されたすべてのキーを破棄するには、 CryptDestroyKey を呼び出す必要があります。 元のキーを破棄しても、重複するキーは破棄されません。 重複するキーが作成されると、元のキーとは別のキーになります。 2 つのキー間に共有状態はありません。
例
次の例は、既存のセッション キーの複製であるセッション キーの作成を示しています。 この例の完全なコンテキストを含む例については、「 サンプル C プログラム: セッション キーの複製」を参照してください。
//--------------------------------------------------------------------
// Declare and initialize variables.
HCRYPTKEY hDuplicateKey;
// Duplicate the key. hOriginalKey is a previously
// assigned HCRYPTKEY variable.
if (CryptDuplicateKey(
hOriginalKey,
NULL,
0,
&hDuplicateKey))
{
printf("The session key has been duplicated. \n");
}
else
{
printf("Error using CryptDuplicateKey.\n");
exit(1);
}
// Insert code that uses the duplicate key here.
// When you have finished using the key, the handle must be released.
if (CryptDestroyKey(hDuplicateKey))
{
printf("The handle has been released.\n");
}
else
{
printf("The handle could not be released.\n");
}
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP (デスクトップ アプリのみ) |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
対象プラットフォーム | Windows |
ヘッダー | wincrypt.h |
Library | Advapi32.lib |
[DLL] | Advapi32.dll |