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.
Si No se requiere SeTcbPrivilege , llame a LsaConnectUntrusted para obtener el identificador.

[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
MSV1_0_INTERACTIVE_LOGON
MSV1_0
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.

KERB_INTERACTIVE_LOGON
Kerberos
Autenticación de un inicio de sesión de usuario interactivo.
KERB_TICKET_LOGON
Kerberos
Autenticación de un usuario en el inicio de sesión o desconexión de la red inicial.
KERB_TICKET_UNLOCK_LOGON
Kerberos
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.
KERB_CERTIFICATE_LOGON
Kerberos
Autenticación de un usuario mediante un inicio de sesión de tarjeta inteligente interactivo.
KERB_CERTIFICATE_S4U_LOGON
Kerberos
Autenticación de un usuario mediante un servicio para el inicio de sesión del usuario (S4U).
KERB_CERTIFICATE_UNLOCK_LOGON
Kerberos
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.
KERB_SMARTCARD_LOGON
Kerberos
Autenticación de un inicio de sesión de tarjeta inteligente de usuario mediante LOGON32_PROVIDER_WINNT50 o LOGON32_PROVIDER_DEFAULT.
KERB_SMARTCARD_UNLOCK_LOGON
Kerberos
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.
KERB_S4U_LOGON
Kerberos
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:
  • El autor de la llamada debe ser una cuenta de dominio (esto incluye LOCAL_SYSTEM si el equipo es miembro de dominio).
  • Si usa una cuenta de servicio, la cuenta debe tener SeTcbPrivilege establecido en el equipo local para obtener un token de suplantación. De lo contrario, se usa el token de identidad.
  • El autor de la llamada debe ser miembro del acceso compatible anterior a Windows 2000 o tener acceso de lectura a las pertenencias a grupos del cliente. La pertenencia al grupo acceso de autorización de Windows garantiza el acceso de lectura a la pertenencia a grupos del cliente. Para obtener información sobre cómo configurar el grupo de acceso de autorización de Windows, consulte Microsoft Knowledge Base.
Los miembros ClientUpn y ClientRealm de la estructura KERB_S4U_LOGON deben apuntar a búferes en memoria que son contiguos a la propia estructura. El valor del parámetro AuthenticationInformationLength debe tener en cuenta la longitud de estos búferes.
MSV1_0_LM20_LOGON
MSV1_0
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.

MSV1_0_SUBAUTH_LOGON
MSV1_0
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.

Valor Significado
MSV1_0_INTERACTIVE_PROFILE
MSV1_0
Perfil de inicio de sesión de un usuario interactivo.
KERB_TICKET_PROFILE
Kerberos
Salida de autenticación de inicio de sesión, desconexión y actualización de vales.
MSV1_0_LM20_LOGON
MSV1_0
Salida al procesar la segunda mitad de un inicio de sesión de protocolo NTLM 2.0.
MSV1_0_LM20_LOGON_PROFILE
MSV1_0
Salida al usar la autenticación con la subautenticación.
 

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 Significado
STATUS_INVALID_LOGON_HOURS
La cuenta de usuario tiene restricciones de tiempo y no se puede usar para iniciar sesión en este momento.
STATUS_INVALID_WORKSTATION
La cuenta de usuario tiene restricciones de estación de trabajo y no se puede usar para iniciar sesión desde la estación de trabajo actual.
STATUS_PASSWORD_EXPIRED
La contraseña de la cuenta de usuario ha expirado.
STATUS_ACCOUNT_DISABLED
La cuenta de usuario está deshabilitada actualmente y no se puede usar para iniciar sesión.

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
STATUS_QUOTA_EXCEEDED
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.
STATUS_ACCOUNT_RESTRICTION
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 .
STATUS_BAD_VALIDATION_CLASS
El paquete de autenticación no reconoce la información de autenticación proporcionada.
STATUS_LOGON_FAILURE
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.
STATUS_NO_LOGON_SERVERS
No hay controladores de dominio disponibles para atender la solicitud de autenticación.
STATUS_NO_SUCH_PACKAGE
El LSA no reconoce el paquete de autenticación especificado.
STATUS_PKINIT_FAILURE
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.
STATUS_PKINIT_CLIENT_FAILURE
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

Consulte también

Permitir el acceso anónimo

LsaCallAuthenticationPackage

LsaFreeReturnBuffer

LsaLookupAuthenticationPackage