Partager via


Fonction CryptDuplicateKey (wincrypt.h)

Important Cette API est déconseillée. Les logiciels nouveaux et existants doivent commencer à utiliser les API de nouvelle génération de chiffrement. Microsoft peut supprimer cette API dans les versions ultérieures.
 
La fonction CryptDuplicateKey effectue une copie exacte d’une clé et de l’état de la clé.

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
ERROR_CALL_NOT_IMPLEMENTED
É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.
ERROR_INVALID_PARAMETER
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.
NTE_BAD_KEY
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

Voir aussi

CryptDestroyKey

CryptSetKeyParam

Fonctions De génération de clés et Exchange