Función LsaLogonUser (ntsecapi.h)
La función LsaLogonUser autentica los datos de inicio de sesión de una entidad de seguridad mediante la información de credenciales almacenadas.
Si la autenticación se realiza correctamente, esta función crea una nueva sesión de inicio de sesión y devuelve un token de usuario.
Cuando se obtiene un nuevo vale de concesión de vales (TGT) mediante nuevas credenciales de certificado, se purgan todos los TGT del sistema y los vales de servicio. Los vales de servicio de usuario que sean de una identidad compuesta también se purgan.
Sintaxis
NTSTATUS LsaLogonUser(
[in] HANDLE LsaHandle,
[in] PLSA_STRING OriginName,
[in] SECURITY_LOGON_TYPE LogonType,
[in] ULONG AuthenticationPackage,
[in] PVOID AuthenticationInformation,
[in] ULONG AuthenticationInformationLength,
[in, optional] PTOKEN_GROUPS LocalGroups,
[in] PTOKEN_SOURCE SourceContext,
[out] PVOID *ProfileBuffer,
[out] PULONG ProfileBufferLength,
[out] PLUID LogonId,
[out] PHANDLE Token,
[out] PQUOTA_LIMITS Quotas,
[out] PNTSTATUS SubStatus
);
Parámetros
[in] LsaHandle
Identificador obtenido de una llamada anterior a LsaRegisterLogonProcess.
Se requiere que el autor de la llamada tenga SeTcbPrivilege solo si se cumple una o varias de las siguientes condiciones:
- Se usa un paquete de subautenticación.
- KERB_S4U_LOGON se usa y el autor de la llamada solicita un token de suplantación.
- El parámetro LocalGroups no es NULL.
[in] OriginName
Cadena que identifica el origen del intento de inicio de sesión. Para obtener más información, vea la sección Comentarios.
[in] LogonType
Valor de la enumeración SECURITY_LOGON_TYPE que especifica el tipo de inicio de sesión solicitado. Si LogonType es Interactivo o Batch, se genera un token principal para representar al nuevo usuario. Si LogonType es Network, se genera un token de suplantación.
[in] AuthenticationPackage
Identificador del paquete de autenticación que se va a usar para la autenticación. Puede obtener este valor llamando a LsaLookupAuthenticationPackage.
[in] AuthenticationInformation
Puntero a un búfer de entrada que contiene información de autenticación, como el nombre de usuario y la contraseña. El paquete de autenticación determina el formato y el contenido de este búfer.
Este parámetro puede ser una de las siguientes estructuras de búfer de entrada para los paquetes de autenticación MSV1_0 y Kerberos.
Valor | Significado |
---|---|
|
Autenticación de un inicio de sesión de usuario interactivo.
Los miembros LogonDomainName, UserName y Password de la estructura MSV1_0_INTERACTIVE_LOGON deben apuntar a búferes en la memoria que son contiguos a la propia estructura. El valor del parámetro AuthenticationInformationLength debe tener en cuenta la longitud de estos búferes. |
|
Autenticación de un inicio de sesión de usuario interactivo. |
|
Autenticación de un usuario en el inicio de sesión o desconexión de la red inicial. |
|
Autenticación de un usuario en la actualización de vales, una variación del inicio de sesión de desbloqueo normal de la estación de trabajo. |
|
Autenticación de un usuario mediante un inicio de sesión de tarjeta inteligente interactivo. |
|
Autenticación de un usuario mediante un servicio para el inicio de sesión del usuario (S4U). |
|
Autenticación de un usuario para desbloquear una estación de trabajo que se ha bloqueado durante una sesión interactiva de inicio de sesión de tarjeta inteligente. |
|
Autenticación de un inicio de sesión de tarjeta inteligente de usuario mediante LOGON32_PROVIDER_WINNT50 o LOGON32_PROVIDER_DEFAULT. |
|
Autenticación de un usuario para desbloquear una estación de trabajo bloqueada durante una sesión de inicio de sesión de tarjeta inteligente. |
|
Autenticación de un usuario mediante solicitudes de cliente S4U. Para la delegación restringida, no es necesario llamar a LsaLogonUser si el cliente inició sesión con un paquete de autenticación en modo LSA. En los sistemas operativos Windows, estos incluyen Kerberos, NTLM, Canal seguro y Resumen. Para que esta llamada se realice correctamente, debe ser true:
|
|
Procesamiento de la segunda mitad de un inicio de sesión de protocolo NTLM 2.0. La primera mitad de este tipo de inicio de sesión se realiza llamando a LsaCallAuthenticationPackage con el mensaje MsV1_0Lm20ChallengeRequest . Para obtener más información, consulte la descripción de MsV1_0Lm20ChallengeRequest en MSV1_0_PROTOCOL_MESSAGE_TYPE.
Este tipo de inicio de sesión puede usar un paquete de subautenticación. |
|
Autenticación de un usuario con subautenticación. |
Para obtener más información sobre el búfer usado por otros paquetes de autenticación, consulte la documentación de esos paquetes de autenticación.
[in] AuthenticationInformationLength
Longitud, en bytes, del búfer AuthenticationInformation .
[in, optional] LocalGroups
Lista de identificadores de grupo adicionales que se van a agregar al token del usuario autenticado. Estos identificadores de grupo se agregarán, junto con el grupo predeterminado WORLD y el grupo de tipos de inicio de sesión (Interactivo, Batch o Red), que se incluyen automáticamente en cada token de usuario.
[in] SourceContext
Estructura de TOKEN_SOURCE que identifica el módulo de origen (por ejemplo, el administrador de sesiones) y el contexto que puede ser útil para ese módulo. Esta información se incluye en el token de usuario y se puede recuperar llamando a GetTokenInformation.
[out] ProfileBuffer
Puntero a un puntero void que recibe la dirección de un búfer de salida que contiene información de autenticación, como el shell de inicio de sesión y el directorio principal.
Este parámetro puede ser una de las siguientes estructuras de búfer de salida para los paquetes de autenticación MSV1_0 y Kerberos.
Para obtener más información sobre el búfer usado por otros paquetes de autenticación, consulte la documentación de ese paquete de autenticación.
Cuando este búfer ya no es necesario, la aplicación que realiza la llamada debe liberar este búfer llamando a la función LsaFreeReturnBuffer .
[out] ProfileBufferLength
Puntero a un ULONG que recibe la longitud, en bytes, del búfer de perfil devuelto.
[out] LogonId
Puntero a un búfer que recibe un LUID que identifica de forma única la sesión de inicio de sesión. El controlador de dominio asigna este LUID que autentica la información de inicio de sesión.
[out] Token
Puntero a un identificador que recibe el nuevo token de usuario creado para esta sesión. Cuando haya terminado de usar el token, suelte mediante una llamada a la función CloseHandle .
[out] Quotas
Cuando se devuelve un token principal, este parámetro recibe una estructura de QUOTA_LIMITS que contiene los límites de cuota de proceso asignados al proceso inicial del usuario que acaba de iniciar sesión.
[out] SubStatus
Si se produjo un error en el inicio de sesión debido a restricciones de cuenta, este parámetro recibe información sobre por qué se produjo un error en el inicio de sesión. Este valor solo se establece si la información de la cuenta del usuario es válida y se rechaza el inicio de sesión.
Este parámetro puede ser uno de los siguientes valores de SubStatus para el paquete de autenticación MSV1_0.
Valor devuelto
Si la función se realiza correctamente, la función devuelve STATUS_SUCCESS.
Si se produce un error en la función, devuelve un código NTSTATUS , que puede ser uno de los siguientes valores.
Valor | Descripción |
---|---|
|
La cuota de memoria del autor de la llamada no es suficiente para asignar el búfer de salida devuelto por el paquete de autenticación. |
|
La cuenta de usuario y la contraseña son legítimas, pero la cuenta de usuario tiene una restricción que impide el inicio de sesión en este momento. Para obtener más información, vea el valor almacenado en el parámetro SubStatus . |
|
El paquete de autenticación no reconoce la información de autenticación proporcionada. |
|
Error en el intento de inicio de sesión. El motivo del error no se especifica, pero los motivos típicos incluyen nombres de usuario mal escrito y contraseñas mal escritas. |
|
No hay controladores de dominio disponibles para atender la solicitud de autenticación. |
|
El LSA no reconoce el paquete de autenticación especificado. |
|
El cliente Kerberos recibió un certificado KDC que no es válido. Para el inicio de sesión de dispositivo, se requiere una validación estricta de KDC, por lo que el KDC debe tener certificados que usen la plantilla "Autenticación Kerberos" o equivalente. Además, el certificado KDC podría expirarse, revocarse o el cliente está bajo un ataque activo de envío de solicitudes al servidor incorrecto. |
|
El cliente Kerberos usa un certificado del sistema que no es válido. Para el inicio de sesión del dispositivo, debe haber un nombre DNS. Además, el certificado del sistema podría expirar o se podría seleccionar uno incorrecto. |
Para obtener más información, vea Valores devueltos de la función de directiva LSA.
La función LsaNtStatusToWinError convierte un código NTSTATUS en un código de error de Windows.
Comentarios
El parámetro OriginName debe especificar información significativa. Por ejemplo, podría contener "TTY1" para indicar el terminal uno o "NTLM - remote node JAZZ" para indicar un inicio de sesión de red que usa NTLM a través de un nodo remoto denominado "JAZZ".
Debe llamar a LsaLogonUser por separado para actualizar las credenciales del dispositivo PKINIT para LOCAL_SYSTEM y NETWORK_SERVICE. Cuando no hay ninguna credencial de dispositivo PKINIT, una llamada correcta no realiza ninguna operación. Cuando hay una credencial de dispositivo PKINIT, una llamada correcta limpia la credencial del dispositivo PKINIT para que solo permanezca la credencial de contraseña.
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 | ntsecapi.h |
Library | Secur32.lib |
Archivo DLL | Secur32.dll |