Compartir a través de


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.

Syntax

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 acceso TOKEN_QUERY y TOKEN_IMPERSONATE .

Valor devuelto

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

Si se produce un error en la función, el valor devuelto es cero. Para obtener información de error extendida, llame a GetLastError.

Observaciones

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 permitiría. 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 suplantadas, incluidas ImpersonateLoggedOnUser , permiten la suplantación solicitada si se cumple una de las siguientes opciones:

  • 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.

Importante

El token debe tener un nivel de suplantación de SecurityImpersonation o superior para que la suplantación se realice correctamente. Los tokens con niveles SecurityIdentification o SecurityAnonymous no se pueden usar para la suplantación, incluso si el autor de la llamada tiene SeImpersonatePrivilege. Los tokens SecurityIdentification permiten la comprobación de identidades y las comprobaciones de ACL, pero no permiten la suplantación.

Requisitos de nivel de suplantación

El comportamiento varía en función del nivel de suplantación del token:

  • SecurityAnonymous: el servidor no puede obtener información de identidad de cliente y no puede suplantar al cliente.
  • SecurityIdentification: el servidor puede obtener la identidad del cliente y realizar la validación de acceso, pero no puede suplantar al cliente. Este es el nivel predeterminado para muchos escenarios.
  • SecurityImpersonation: el servidor puede suplantar el contexto de seguridad del cliente en el sistema local. Este es el nivel mínimo necesario para que ImpersonateLoggedOnUser se realice correctamente.
  • SecurityDelegation: el servidor puede suplantar al cliente en sistemas remotos, así como localmente.

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

Requirement Importancia
Cliente mínimo compatible Windows XP [solo aplicaciones de escritorio]
Servidor mínimo admitido Windows Server 2003 [solo aplicaciones de escritorio]
de la plataforma de destino de Windows
Header securitybaseapi.h (incluya Windows.h)
Library Advapi32.lib
DLL de Advapi32.dll

Consulte también

Funciones de control de acceso de cliente/servidor

Información general sobre el control de acceso de cliente/servidor

CreateProcessAsUser

CreateRestrictedToken

DuplicateToken

DuplicateTokenEx

LogonUser

OpenProcessToken

OpenThreadToken

RevertToSelf