Partager via


Fonction ImpersonateLoggedOnUser (securitybaseapi.h)

La fonction ImpersonateLoggedOnUser permet au thread appelant d’emprunter l’identité du contexte de sécurité d’un utilisateur connecté. L’utilisateur est représenté par un handle de jeton.

Syntaxe

BOOL ImpersonateLoggedOnUser(
  [in] HANDLE hToken
);

Paramètres

[in] hToken

Handle vers un jeton d’accès principal ou d’emprunt d’identité qui représente un utilisateur connecté. Il peut s’agir d’un handle de jeton retourné par un appel aux fonctions LogonUser, CreateRestrictedToken, DuplicateToken, DuplicateTokenEx, OpenProcessToken ou OpenThreadToken . Si hToken est un handle d’un jeton principal, le jeton doit avoir un accès TOKEN_QUERY et TOKEN_DUPLICATE . Si hToken est un handle pour un jeton d’emprunt d’identité, le jeton doit avoir un accès TOKEN_QUERY et TOKEN_IMPERSONATE .

Valeur retournée

Si la fonction réussit, la valeur de retour est différente de zéro.

Si la fonction échoue, la valeur de retour est égale à zéro. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.

Remarques

L’emprunt d’identité dure jusqu’à ce que le thread se ferme ou qu’il appelle RevertToSelf.

Le thread appelant n’a pas besoin de disposer de privilèges particuliers pour appeler ImpersonateLoggedOnUser.

Si l’appel à ImpersonateLoggedOnUser échoue, la connexion cliente n’est pas empruntée et la demande du client est effectuée dans le contexte de sécurité du processus. Si le processus s’exécute en tant que compte à privilèges élevés, tel que LocalSystem, ou en tant que membre d’un groupe d’administration, l’utilisateur peut être en mesure d’effectuer des actions qu’il ne serait pas autorisé à effectuer. Par conséquent, il est important de toujours case activée la valeur de retour de l’appel et, en cas d’échec, de générer une erreur ; ne poursuivez pas l’exécution de la demande du client.

Toutes les fonctions d’emprunt d’identité, y compris ImpersonateLoggedOnUser , autorisent l’emprunt d’identité demandé si l’une des conditions suivantes est vraie :

  • Le niveau d’emprunt d’identité demandé du jeton est inférieur à SecurityImpersonation, par exemple SecurityIdentification ou SecurityAnonymous.
  • L’appelant a le privilège SeImpersonatePrivilege .
  • Un processus (ou un autre processus dans la session d’ouverture de session de l’appelant) a créé le jeton à l’aide d’informations d’identification explicites via la fonction LogonUser ou LsaLogonUser .
  • L’identité authentifiée est identique à l’appelant.
Windows XP avec SP1 et versions antérieures : Le privilège SeImpersonatePrivilege n’est pas pris en charge.

Pour plus d’informations sur l’emprunt d’identité, consultez Emprunt d’identité client.

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 securitybaseapi.h (inclure Windows.h)
Bibliothèque Advapi32.lib
DLL Advapi32.dll

Voir aussi

Fonctions de Access Control client/serveur

Vue d’ensemble des Access Control client/serveur

CreateProcessAsUser

CreateRestrictedToken

DuplicateToken

DuplicateTokenEx

LogonUser

OpenProcessToken

OpenThreadToken

RevertToSelf