Función ImpersonateLoggedOnUser (securitybaseapi.h)

La función ImpersonateLoggedOnUser permite al subproceso de llamada suplantar el contexto de seguridad de un usuario que ha iniciado sesión. El usuario se representa mediante un identificador de token.

Sintaxis

BOOL ImpersonateLoggedOnUser(
  [in] HANDLE hToken
);

Parámetros

[in] hToken

Identificador de un token de acceso principal o suplantación que representa un usuario que ha iniciado sesión. Puede ser un identificador de token devuelto por una llamada a las funciones LogonUser, CreateRestrictedToken, DuplicateToken, DuplicateTokenEx, OpenProcessToken o OpenThreadToken . Si hToken es un identificador de un token principal, el token debe tener TOKEN_QUERY y TOKEN_DUPLICATE acceso. Si hToken es un identificador de un token de suplantación, el token debe tener TOKEN_QUERY y TOKEN_IMPERSONATE acceso.

Valor devuelto

Si la función se realiza correctamente, el valor devuelto es distinto de cero.

Si la función no se realiza correctamente, el valor devuelto es cero. Para obtener información de error extendida, llame a GetLastError.

Comentarios

La suplantación dura hasta que el subproceso sale o hasta que llama a RevertToSelf.

El subproceso de llamada no necesita tener privilegios concretos para llamar a ImpersonateLoggedOnUser.

Si se produce un error en la llamada a ImpersonateLoggedOnUser , la conexión de cliente no se suplanta y la solicitud de cliente se realiza en el contexto de seguridad del proceso. Si el proceso se ejecuta como una cuenta con privilegios elevados, como LocalSystem o como miembro de un grupo administrativo, es posible que el usuario pueda realizar acciones que, de lo contrario, no se les permita. Por lo tanto, es importante comprobar siempre el valor devuelto de la llamada y, si se produce un error, generar un error; no continúe la ejecución de la solicitud de cliente.

Todas las funciones de suplantación, incluidas ImpersonateLoggedOnUser , permiten la suplantación solicitada si se cumple una de las siguientes condiciones:

  • El nivel de suplantación solicitado del token es menor que SecurityImpersonation, como SecurityIdentification o SecurityAnonymous.
  • El autor de la llamada tiene el privilegio SeImpersonatePrivilege .
  • Un proceso (u otro proceso en la sesión de inicio de sesión del autor de la llamada) creó el token mediante credenciales explícitas a través de la función LogonUser o LsaLogonUser .
  • La identidad autenticada es la misma que el autor de la llamada.
Windows XP con SP1 y versiones anteriores: No se admite el privilegio SeImpersonatePrivilege .

Para obtener más información sobre la suplantación, consulte Suplantación de cliente.

Requisitos

Requisito Value
Cliente mínimo compatible Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado securitybaseapi.h (incluya Windows.h)
Library Advapi32.lib
Archivo DLL Advapi32.dll

Consulte también

Funciones de cliente/servidor Access Control

Información general de Access Control de cliente/servidor

CreateProcessAsUser

CreateRestrictedToken

DuplicateToken

DuplicateTokenEx

LogonUser

OpenProcessToken

OpenThreadToken

RevertToSelf