Fonction CryptDuplicateKey (wincrypt.h)
Syntaxe
BOOL CryptDuplicateKey(
[in] HCRYPTKEY hKey,
[in] DWORD *pdwReserved,
[in] DWORD dwFlags,
[out] HCRYPTKEY *phKey
);
Paramètres
[in] hKey
Handle de la clé à dupliquer.
[in] pdwReserved
Réservé pour une utilisation ultérieure et doit être NULL.
[in] dwFlags
Réservé pour une utilisation ultérieure et doit être égal à zéro.
[out] phKey
Adresse du handle à la clé dupliquée. Lorsque vous avez terminé d’utiliser la clé, relâchez le handle en appelant la fonction CryptDestroyKey .
Valeur retournée
Si la fonction réussit, la valeur de retour est différente de zéro (TRUE).
Si la fonction échoue, la valeur de retour est zéro (FALSE). Pour obtenir des informations d’erreur étendues, appelez GetLastError.
Le code d’erreur préfacé par « NTE » est généré par le fournisseur de solutions Cloud particulier utilisé. Certains codes d’erreur possibles sont répertoriés dans le tableau suivant.
Code de retour | Description |
---|---|
|
Étant donné qu’il s’agit d’une nouvelle fonction, il se peut que les fournisseurs de services cloud existants ne l’implémentent pas. Cette erreur est retournée si le fournisseur de solutions Cloud ne prend pas en charge cette fonction. |
|
L’un des paramètres contient une valeur qui n’est pas valide. Il s’agit le plus souvent d’un pointeur qui n’est pas valide. |
|
Un handle de la clé d’origine n’est pas valide. |
Remarques
CryptDuplicateKey effectue une copie d’une clé et l’état exact de la clé. L’un des scénarios où cette fonction peut être utilisée est lorsqu’une application doit chiffrer deux messages distincts avec la même clé, mais avec des valeurs salt différentes. La clé d’origine est générée, puis une clé en double est créée à l’aide de la fonction CryptDuplicateKey . Les différentes valeurs salt sont ensuite définies sur les clés d’origine et dupliquées avec des appels distincts à la fonction CryptSetKeyParam .
CryptDestroyKey doit être appelé pour détruire toutes les clés créées à l’aide de CryptDuplicateKey. La destruction de la clé d’origine n’entraîne pas la destruction de la clé en double. Une fois qu’une clé en double est effectuée, elle est distincte de la clé d’origine. Il n’existe aucun état partagé entre les deux clés.
Exemples
L’exemple suivant montre la création d’une clé de session qui est un doublon d’une clé de session existante. Pour obtenir un exemple qui inclut le contexte complet de cet exemple, consultez Exemple de programme C : duplication d’une clé de session.
//--------------------------------------------------------------------
// 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");
}
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows XP [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows Server 2003 [applications de bureau uniquement] |
Plateforme cible | Windows |
En-tête | wincrypt.h |
Bibliothèque | Advapi32.lib |
DLL | Advapi32.dll |