Función LogonUserA (winbase.h)
La función LogonUser intenta iniciar sesión de un usuario en el equipo local. El equipo local es el equipo desde el que se llamó a logonUser. No puede usar LogonUser para iniciar sesión en un equipo remoto. Especifique el usuario con un nombre de usuario y un dominio y autenticar el usuario con un texto no cifrado contraseña. Si la función se realiza correctamente, recibirá un identificador para un token que representa al usuario que ha iniciado sesión. A continuación, puede usar este identificador de token para suplantar al usuario especificado o, en la mayoría de los casos, para crear un proceso de que se ejecuta en el contexto del usuario especificado.
Sintaxis
BOOL LogonUserA(
[in] LPCSTR lpszUsername,
[in, optional] LPCSTR lpszDomain,
[in, optional] LPCSTR lpszPassword,
[in] DWORD dwLogonType,
[in] DWORD dwLogonProvider,
[out] PHANDLE phToken
);
Parámetros
[in] lpszUsername
Puntero a una cadena terminada en NULL que especifica el nombre del usuario. Este es el nombre de la cuenta de usuario en la que iniciar sesión. Si usa el formato nombre principal de usuario (UPN), User@DNSDomainName, el parámetro lpszDomain debe ser NULL.
[in, optional] lpszDomain
Puntero a una cadena terminada en null que especifica el nombre del dominio o servidor cuya base de datos de cuenta contiene el lpszUsername cuenta. Si este parámetro es NULL, el nombre de usuario debe especificarse en formato UPN. Si este parámetro es ".", la función valida la cuenta con solo la base de datos de la cuenta local.
[in, optional] lpszPassword
Puntero a una cadena terminada en null que especifica la contraseña de texto no cifrado de la cuenta de usuario especificada por lpszUsername. Cuando haya terminado de usar la contraseña, borre la contraseña de la memoria llamando a la función SecureZeroMemory. Para obtener más información sobre cómo proteger contraseñas, consulte Control de contraseñas.
[in] dwLogonType
Tipo de operación de inicio de sesión que se va a realizar. Este parámetro puede ser uno de los siguientes valores, definidos en Winbase.h.
Valor | Significado |
---|---|
|
Este tipo de inicio de sesión está pensado para servidores por lotes, donde los procesos se pueden ejecutar en nombre de un usuario sin su intervención directa. Este tipo también es para servidores de mayor rendimiento que procesan muchos intentos de autenticación de texto no cifrado a la vez, como el correo o los servidores web. |
|
Este tipo de inicio de sesión está pensado para los usuarios que van a usar interactivamente el equipo, como un usuario que inicia sesión mediante un terminal de servidor, shell remoto o proceso similar. Este tipo de inicio de sesión tiene el gasto adicional de almacenar en caché información de inicio de sesión para las operaciones desconectadas; por lo tanto, es inapropiado para algunas aplicaciones cliente/servidor, como un servidor de correo. |
|
Este tipo de inicio de sesión está diseñado para servidores de alto rendimiento para autenticar contraseñas de texto no cifrado. La función LogonUser no almacena en caché las credenciales de este tipo de inicio de sesión. |
|
Este tipo de inicio de sesión conserva el nombre y la contraseña en el paquete de autenticación de , lo que permite al servidor realizar conexiones a otros servidores de red al suplantar al cliente. Un servidor puede aceptar credenciales de texto no cifrado de un cliente, llamar a LogonUser, comprobar que el usuario puede acceder al sistema a través de la red y seguir comunicándose con otros servidores. |
|
Este tipo de inicio de sesión permite al autor de la llamada clonar su token actual y especificar nuevas credenciales para las conexiones salientes. La nueva sesión de inicio de sesión tiene el mismo identificador local, pero usa credenciales diferentes para otras conexiones de red.
Este tipo de inicio de sesión solo es compatible con el proveedor de inicio de sesión de LOGON32_PROVIDER_WINNT50. Nota: A partir de enero de 2023, no es posible usar el tipo de inicio de sesión de LOGON32_LOGON_NEW_CREDENTIALS con una cuenta de servicio administrada de grupo (gMSA). |
|
Indica un inicio de sesión de tipo de servicio. La cuenta proporcionada debe tener habilitado el privilegio de servicio. |
|
Las GINA ya no se admiten.
Windows Server 2003 y Windows XP: Este tipo de inicio de sesión es para archivos DLL de GINA que inician sesión en los usuarios que van a usar el equipo de forma interactiva. Este tipo de inicio de sesión puede generar un registro de auditoría único que muestre cuándo se desbloqueó la estación de trabajo. |
[in] dwLogonProvider
Especifica el proveedor de inicio de sesión. Este parámetro puede ser uno de los siguientes valores.
[out] phToken
Puntero a una variable de identificador que recibe un identificador a un token que representa al usuario especificado.
Puede usar el identificador devuelto en las llamadas a la función ImpersonateLoggedOnUser.
En la mayoría de los casos, el identificador devuelto es un
Cuando ya no necesite este identificador, ciérralo llamando a la función CloseHandle.
Valor devuelto
Si la función se ejecuta correctamente, la función devuelve un valor distinto de cero.
Si se produce un error en la función, devuelve cero. Para obtener información de error extendida, llame a GetLastError.
Observaciones
El tipo de inicio de sesión de LOGON32_LOGON_NETWORK es más rápido, pero tiene las siguientes limitaciones:
- La función devuelve un token de suplantación , no un token principal. No puede usar este token directamente en la función createProcessAsUser
. Sin embargo, puede llamar a la función DuplicateTokenExpara convertir el token en un token principal y, a continuación, usarlo en CreateProcessAsUser . - Si convierte el token en un token principal y lo usa en CreateProcessAsUser para iniciar un proceso, el nuevo proceso no puede acceder a otros recursos de red, como servidores remotos o impresoras, a través del redirector. Una excepción es que si el recurso de red no está controlado por el acceso, el nuevo proceso podrá acceder a él.
El privilegio SE_TCB_NAME no es necesario para esta función a menos que inicie sesión en una cuenta de Passport.
La cuenta especificada por lpszUsername, debe tener los derechos de cuenta necesarios. Por ejemplo, para iniciar sesión en un usuario con la marca LOGON32_LOGON_INTERACTIVE, el usuario (o un grupo al que pertenece el usuario) debe tener derecho a la cuenta de SE_INTERACTIVE_LOGON_NAME. Para obtener una lista de los derechos de cuenta que afectan a las distintas operaciones de inicio de sesión, consulte Constantes de derechos de cuenta.
Un usuario se considera que ha iniciado sesión si existe al menos un token. Si llama a CreateProcessAsUser y, a continuación, cierra el token, el sistema considera que el usuario sigue iniciando sesión hasta que finalice el proceso (y todos los procesos secundarios).
Si el logonUser de
Ejemplos
Puede generar un token localService mediante el código siguiente.
LogonUser(L"LocalService", L"NT AUTHORITY", NULL, LOGON32_LOGON_SERVICE, LOGON32_PROVIDER_DEFAULT, &hToken)
Nota
El encabezado winbase.h define LogonUser como alias que selecciona automáticamente la versión ANSI o Unicode de esta función en función de la definición de la constante de preprocesador UNICODE. La combinación del uso del alias neutral de codificación con código que no es neutral de codificación puede dar lugar a errores de coincidencia que dan lugar a errores de compilación o tiempo de ejecución. Para obtener más información, vea Conventions for Function Prototypes.
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Windows XP [solo aplicaciones de escritorio] |
servidor mínimo admitido | Windows Server 2003 [solo aplicaciones de escritorio] |
de la plataforma de destino de |
Windows |
encabezado de |
winbase.h (incluya Windows.h) |
biblioteca de |
Advapi32.lib |
DLL de |
Advapi32.dll |
Consulte también
de control de acceso de cliente/servidor