Fungsi CryptDuplicateKey (wincrypt.h)
Sintaks
BOOL CryptDuplicateKey(
[in] HCRYPTKEY hKey,
[in] DWORD *pdwReserved,
[in] DWORD dwFlags,
[out] HCRYPTKEY *phKey
);
Parameter
[in] hKey
Handel ke kunci yang akan diduplikasi.
[in] pdwReserved
Dicadangkan untuk penggunaan di masa mendatang dan harus NULL.
[in] dwFlags
Dicadangkan untuk penggunaan di masa mendatang dan harus nol.
[out] phKey
Alamat handel ke kunci duplikat. Setelah Anda selesai menggunakan kunci, lepaskan handel dengan memanggil fungsi CryptDestroyKey .
Mengembalikan nilai
Jika fungsi berhasil, nilai yang dikembalikan bukan nol (TRUE).
Jika fungsi gagal, nilai yang dikembalikan adalah nol (FALSE). Untuk informasi kesalahan yang diperluas, hubungi GetLastError.
Kode kesalahan yang diawali oleh "NTE" dihasilkan oleh CSP tertentu yang digunakan. Beberapa kemungkinan kode kesalahan tercantum dalam tabel berikut.
Menampilkan kode | Deskripsi |
---|---|
|
Karena ini adalah fungsi baru, CSP yang ada mungkin tidak menerapkannya. Kesalahan ini dikembalikan jika CSP tidak mendukung fungsi ini. |
|
Salah satu parameter berisi nilai yang tidak valid. Ini paling sering merupakan pointer yang tidak valid. |
|
Handel ke kunci asli tidak valid. |
Keterangan
CryptDuplicateKey membuat salinan kunci dan status kunci yang tepat. Salah satu skenario ketika fungsi ini dapat digunakan adalah ketika aplikasi perlu mengenkripsi dua pesan terpisah dengan kunci yang sama tetapi dengan nilai garam yang berbeda. Kunci asli dihasilkan dan kemudian kunci duplikat dibuat dengan menggunakan fungsi CryptDuplicateKey . Nilai garam yang berbeda kemudian diatur pada kunci asli dan duplikat dengan panggilan terpisah ke fungsi CryptSetKeyParam .
CryptDestroyKey harus dipanggil untuk menghancurkan kunci apa pun yang dibuat dengan menggunakan CryptDuplicateKey. Menghancurkan kunci asli tidak menyebabkan kunci duplikat dihancurkan. Setelah kunci duplikat dibuat, kunci tersebut terpisah dari kunci asli. Tidak ada status bersama di antara dua kunci.
Contoh
Contoh berikut menunjukkan pembuatan kunci sesi yang merupakan duplikat dari kunci sesi yang ada. Untuk contoh yang menyertakan konteks lengkap untuk contoh ini, lihat Contoh Program C: Menduplikasi Kunci Sesi.
//--------------------------------------------------------------------
// 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");
}
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows XP [hanya aplikasi desktop] |
Server minimum yang didukung | Windows Server 2003 [hanya aplikasi desktop] |
Target Platform | Windows |
Header | wincrypt.h |
Pustaka | Advapi32.lib |
DLL | Advapi32.dll |