Função LsaLogonUser (ntsecapi.h)
A função LsaLogonUser autentica os dados de logon de uma entidade de segurança usando informações de credenciais armazenadas.
Se a autenticação for bem-sucedida, essa função criará uma nova sessão de logon e retornará um token de usuário.
Quando um novo TGT (tíquete de concessão de tíquete) é obtido usando novas credenciais de certificado, todos os TGTs e tíquetes de serviço do sistema são limpos. Todos os tíquetes de serviço de usuário que são de uma identidade composta também são limpos.
Sintaxe
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
Um identificador obtido de uma chamada anterior para LsaRegisterLogonProcess.
O chamador deverá ter SeTcbPrivilege somente se um ou mais dos seguintes itens forem verdadeiros:
- Um pacote de Subautenticação é usado.
- KERB_S4U_LOGON é usado e o chamador solicita um token de representação.
- O parâmetro LocalGroups não é NULL.
[in] OriginName
Uma cadeia de caracteres que identifica a origem da tentativa de logon. Para obter mais informações, consulte Comentários.
[in] LogonType
Um valor da enumeração SECURITY_LOGON_TYPE que especifica o tipo de logon solicitado. Se LogonType for Interativo ou Lote, um token primário será gerado para representar o novo usuário. Se LogonType for Rede, um token de representação será gerado.
[in] AuthenticationPackage
Um identificador do pacote de autenticação a ser usado para a autenticação. Você pode obter esse valor chamando LsaLookupAuthenticationPackage.
[in] AuthenticationInformation
Um ponteiro para um buffer de entrada que contém informações de autenticação, como nome de usuário e senha. O formato e o conteúdo desse buffer são determinados pelo pacote de autenticação.
Esse parâmetro pode ser uma das estruturas de buffer de entrada a seguir para os pacotes de autenticação MSV1_0 e Kerberos.
Valor | Significado |
---|---|
|
Autenticando um logon de usuário interativo.
Os membros LogonDomainName, UserName e Password da estrutura MSV1_0_INTERACTIVE_LOGON devem apontar para buffers na memória contíguos para a própria estrutura. O valor do parâmetro AuthenticationInformationLength deve levar em conta o comprimento desses buffers. |
|
Autenticando um logon de usuário interativo. |
|
Autenticar um usuário no logon de rede inicial ou desconectar. |
|
Autenticar um usuário na atualização de tíquete, uma variação do logon de desbloqueio normal da estação de trabalho. |
|
Autenticar um usuário usando um logon de cartão inteligente interativo. |
|
Autenticar um usuário usando um logon S4U (serviço para usuário). |
|
Autenticar um usuário para desbloquear uma estação de trabalho que foi bloqueada durante uma sessão interativa de logon de cartão inteligente. |
|
Autenticar um logon de cartão inteligente do usuário usando LOGON32_PROVIDER_WINNT50 ou LOGON32_PROVIDER_DEFAULT. |
|
Autenticar um usuário para desbloquear uma estação de trabalho que foi bloqueada durante uma sessão de logon de cartão inteligente. |
|
Autenticar um usuário usando solicitações de cliente S4U. Para delegação restrita, uma chamada para LsaLogonUser não será necessária se o cliente fizer logon usando um pacote de autenticação no modo LSA. Em sistemas operacionais Windows, eles incluem Kerberos, NTLM, Secure Channel e Digest. Para que essa chamada seja bem-sucedida, o seguinte deve ser verdadeiro:
|
|
Processando a segunda metade de um logon de protocolo NTLM 2.0. A primeira metade desse tipo de logon é executada chamando LsaCallAuthenticationPackage com a mensagem MsV1_0Lm20ChallengeRequest . Para obter mais informações, consulte a descrição do MsV1_0Lm20ChallengeRequest no MSV1_0_PROTOCOL_MESSAGE_TYPE.
Esse tipo de logon pode usar um pacote de subautenticação. |
|
Autenticando um usuário com subautenticação. |
Para obter mais informações sobre o buffer usado por outros pacotes de autenticação, consulte a documentação desses pacotes de autenticação.
[in] AuthenticationInformationLength
O comprimento, em bytes, do buffer AuthenticationInformation .
[in, optional] LocalGroups
Uma lista de identificadores de grupo adicionais a serem adicionados ao token do usuário autenticado. Esses identificadores de grupo serão adicionados, juntamente com o grupo padrão WORLD e o grupo de tipos de logon (Interativo, Lote ou Rede), que são incluídos automaticamente em cada token de usuário.
[in] SourceContext
Uma estrutura TOKEN_SOURCE que identifica o módulo de origem, por exemplo, o gerenciador de sessão, e o contexto que pode ser útil para esse módulo. Essas informações são incluídas no token de usuário e podem ser recuperadas chamando GetTokenInformation.
[out] ProfileBuffer
Um ponteiro para um ponteiro nulo que recebe o endereço de um buffer de saída que contém informações de autenticação, como o shell de logon e o diretório inicial.
Esse parâmetro pode ser uma das seguintes estruturas de buffer de saída para os pacotes de autenticação MSV1_0 e Kerberos.
Para obter mais informações sobre o buffer usado por outros pacotes de autenticação, consulte a documentação desse pacote de autenticação.
Quando esse buffer não for mais necessário, o aplicativo de chamada deverá liberar esse buffer chamando a função LsaFreeReturnBuffer .
[out] ProfileBufferLength
Um ponteiro para um ULONG que recebe o comprimento, em bytes, do buffer de perfil retornado.
[out] LogonId
Um ponteiro para um buffer que recebe um LUID que identifica exclusivamente a sessão de logon. Esse LUID é atribuído pelo controlador de domínio que autenticou as informações de logon.
[out] Token
Um ponteiro para um identificador que recebe o novo token de usuário criado para esta sessão. Quando terminar de usar o token, libere-o chamando a função CloseHandle .
[out] Quotas
Quando um token primário é retornado, esse parâmetro recebe uma estrutura QUOTA_LIMITS que contém os limites de cota de processo atribuídos ao processo inicial do usuário conectado recentemente.
[out] SubStatus
Se o logon falhou devido a restrições de conta, esse parâmetro receberá informações sobre por que o logon falhou. Esse valor será definido somente se as informações da conta do usuário forem válidas e o logon for rejeitado.
Esse parâmetro pode ser um dos seguintes valores de SubStatus para o pacote de autenticação MSV1_0.
Retornar valor
Se a função for bem-sucedida, a função retornará STATUS_SUCCESS.
Se a função falhar, ela retornará um código NTSTATUS , que pode ser um dos valores a seguir.
Valor | Descrição |
---|---|
|
A cota de memória do chamador é insuficiente para alocar o buffer de saída retornado pelo pacote de autenticação. |
|
A conta de usuário e a senha são legítimas, mas a conta de usuário tem uma restrição que impede o logon no momento. Para obter mais informações, consulte o valor armazenado no parâmetro SubStatus . |
|
As informações de autenticação fornecidas não são reconhecidas pelo pacote de autenticação. |
|
Falha na tentativa de logon. O motivo da falha não é especificado, mas os motivos típicos incluem nomes de usuário com ortografia incorreta e senhas incorretas. |
|
Nenhum controlador de domínio está disponível para atender à solicitação de autenticação. |
|
O pacote de autenticação especificado não é reconhecido pela LSA. |
|
O cliente Kerberos recebeu um certificado KDC que não é válido. Para o logon do dispositivo, a validação estrita do KDC é necessária, portanto, o KDC deve ter certificados que usem o modelo "Autenticação Kerberos" ou equivalente. Além disso, o certificado KDC pode ter expirado, revogado ou o cliente está sob ataque ativo de enviar solicitações para o servidor errado. |
|
O cliente Kerberos está usando um certificado do sistema que não é válido. Para o logon do dispositivo, deve haver um nome DNS. Além disso, o certificado do sistema pode ter expirado ou o errado pode ser selecionado. |
Para obter mais informações, consulte Valores retornados da função de política LSA.
A função LsaNtStatusToWinError converte um código NTSTATUS em um código de erro do Windows.
Comentários
O parâmetro OriginName deve especificar informações significativas. Por exemplo, ele pode conter "TTY1" para indicar o terminal um ou "NTLM – jazz de nó remoto" para indicar um logon de rede que usa NTLM por meio de um nó remoto chamado "JAZZ".
Você deve chamar LsaLogonUser separadamente para atualizar as credenciais do dispositivo PKINIT para LOCAL_SYSTEM e NETWORK_SERVICE. Quando não há nenhuma credencial de dispositivo PKINIT, uma chamada bem-sucedida não faz nenhuma operação. Quando há uma credencial de dispositivo PKINIT, uma chamada bem-sucedida limpa a credencial do dispositivo PKINIT para que apenas a credencial de senha permaneça.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows XP [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows Server 2003 [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | ntsecapi.h |
Biblioteca | Secur32.lib |
DLL | Secur32.dll |