Partager via


Fonction DuplicateTokenEx (securitybaseapi.h)

La fonction DuplicateTokenEx crée un nouveau jeton d’accès qui duplique un jeton existant. Cette fonction peut créer un de jeton principal ou un jeton d’emprunt d’identité .

Syntaxe

BOOL DuplicateTokenEx(
  [in]           HANDLE                       hExistingToken,
  [in]           DWORD                        dwDesiredAccess,
  [in, optional] LPSECURITY_ATTRIBUTES        lpTokenAttributes,
  [in]           SECURITY_IMPERSONATION_LEVEL ImpersonationLevel,
  [in]           TOKEN_TYPE                   TokenType,
  [out]          PHANDLE                      phNewToken
);

Paramètres

[in] hExistingToken

Handle vers un jeton d’accès ouvert avec un accès TOKEN_DUPLICATE.

[in] dwDesiredAccess

Spécifie les droits d’accès demandés pour le nouveau jeton. La fonction DuplicateTokenEx compare les droits d’accès demandés avec la liste de contrôle d’accès discrétionnaire du jeton existant (DACL) pour déterminer quels droits sont accordés ou refusés. Pour demander les mêmes droits d’accès que le jeton existant, spécifiez zéro. Pour demander tous les droits d’accès valides pour l’appelant, spécifiez MAXIMUM_ALLOWED.

Pour obtenir la liste des droits d’accès pour les jetons d’accès, consultez Droits d’accès pour les objets Access-Token.

[in, optional] lpTokenAttributes

Pointeur vers une structure SECURITY_ATTRIBUTES qui spécifie un descripteur de sécurité pour le nouveau jeton et détermine si les processus enfants peuvent hériter du jeton. Si lpTokenAttributes est NULL, le jeton obtient un descripteur de sécurité par défaut et le handle ne peut pas être hérité. Si le descripteur de sécurité contient une liste de contrôle d’accès système (SACL), le jeton obtient ACCESS_SYSTEM_SECURITY droit d’accès, même s’il n’a pas été demandé dans dwDesiredAccess.

Pour définir le propriétaire dans le descripteur de sécurité du nouveau jeton, le jeton de processus de l’appelant doit avoir le jeu de privilèges SE_RESTORE_NAME.

[in] ImpersonationLevel

Spécifie une valeur de l’énumération SECURITY_IMPERSONATION_LEVEL qui indique le niveau d’emprunt d’identité du nouveau jeton.

[in] TokenType

Spécifie l’une des valeurs suivantes de l’énumération TOKEN_TYPE.

Valeur Signification
TokenPrimary
Le nouveau jeton est un jeton principal que vous pouvez utiliser dans la fonction CreateProcessAsUser.
tokenImpersonation
Le nouveau jeton est un jeton d’emprunt d’identité.

[out] phNewToken

Pointeur vers une variable HANDLE qui reçoit le nouveau jeton.

Lorsque vous avez terminé d’utiliser le nouveau jeton, appelez la fonction CloseHandle pour fermer le handle de jeton.

Valeur de retour

Si la fonction réussit, la fonction retourne une valeur différente de zéro.

Si la fonction échoue, elle retourne zéro. Pour obtenir des informations d’erreur étendues, appelez GetLastError.

Remarques

La fonction DuplicateTokenEx vous permet de créer un jeton principal que vous pouvez utiliser dans la fonction CreateProcessAsUser. Cela permet à une application serveur qui emprunte l’identité d’un client de créer un processus qui a le contexte de sécurité du client. Notez que la fonction DuplicateToken peut créer uniquement des jetons d’emprunt d’identité, qui ne sont pas valides pour CreateProcessAsUser.

Voici un scénario classique d’utilisation DuplicateTokenEx pour créer un jeton principal . Une application serveur crée un thread qui appelle l’une des fonctions d’emprunt d’identité, telles que emprunt d’identitéNamedPipeClient, pour emprunter l’identité d’un client. L’emprunt d’identité appelle ensuite la fonction OpenThreadToken pour obtenir son propre jeton, qui est un jeton d’emprunt d’identité qui a le contexte de sécurité du client. Le thread spécifie ce jeton d’emprunt d’identité dans un appel à DuplicateTokenEx, en spécifiant l’indicateur TokenPrimary. La fonction DuplicateTokenEx crée un jeton principal qui a le contexte de sécurité du client.

Exigences

Exigence Valeur
client minimum pris en charge Windows XP [applications de bureau | Applications UWP]
serveur minimum pris en charge Windows Server 2003 [applications de bureau | Applications UWP]
plateforme cible Windows
d’en-tête securitybaseapi.h (include Windows.h)
bibliothèque Advapi32.lib
DLL Advapi32.dll

Voir aussi

de contrôle d’accès

fonctions de contrôle d’accès de base

closeHandle

CreateProcessAsUser

DdeImpersonateClient

DuplicateToken

emprunt d’identitéNamedPipeClient

OpenThreadToken

RevertToSelf

RpcImpersonateClient

SECURITY_ATTRIBUTES

SECURITY_IMPERSONATION_LEVEL