Funzione LsaLogonUser (ntsecapi.h)
La funzione LsaLogonUser autentica i dati di accesso di un'entità sicurezza usando le informazioni sulle credenziali archiviate.
Se l'autenticazione ha esito positivo, questa funzione crea una nuova sessione di accesso e restituisce un token utente.
Quando viene ottenuto un nuovo ticket di concessione ticket (TGT) usando nuove credenziali del certificato, tutti i TGT e i ticket di servizio del sistema vengono eliminati. Tutti i ticket di servizio utente che sono di un'identità composta vengono eliminati anche.
Sintassi
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
);
Parametri
[in] LsaHandle
Handle ottenuto da una chiamata precedente a LsaRegisterLogonProcess.
Il chiamante deve avere SeTcbPrivilege solo se uno o più dei seguenti è true:
- Viene usato un pacchetto di sottoutenticazione.
- KERB_S4U_LOGON viene usato e il chiamante richiede un token di rappresentazione.
- Il parametro LocalGroups non è NULL.
[in] OriginName
Stringa che identifica l'origine del tentativo di accesso. Per altre informazioni, vedere la sezione Osservazioni.
[in] LogonType
Valore dell'enumerazione SECURITY_LOGON_TYPE che specifica il tipo di accesso richiesto. Se LogonType è Interattivo o Batch, viene generato un token primario per rappresentare il nuovo utente. Se LogonType è Network, viene generato un token di rappresentazione.
[in] AuthenticationPackage
Identificatore del pacchetto di autenticazione da usare per l'autenticazione. È possibile ottenere questo valore chiamando LsaLookupAuthenticationPackage.
[in] AuthenticationInformation
Puntatore a un buffer di input contenente informazioni di autenticazione, ad esempio nome utente e password. Il formato e il contenuto di questo buffer sono determinati dal pacchetto di autenticazione.
Questo parametro può essere una delle strutture del buffer di input seguenti per i pacchetti di autenticazione MSV1_0 e Kerberos.
Valore | Significato |
---|---|
|
Autenticazione di un accesso utente interattivo.
I membri LogonDomainName, UserName e Password della struttura MSV1_0_INTERACTIVE_LOGON devono puntare ai buffer in memoria contigui alla struttura stessa. Il valore del parametro AuthenticationInformationLength deve tenere conto della lunghezza di questi buffer. |
|
Autenticazione di un accesso utente interattivo. |
|
Autenticazione di un utente nell'accesso di rete iniziale o disconnessione. |
|
Autenticazione di un utente durante l'aggiornamento del ticket, una variante dell'accesso normale dello sblocco della workstation. |
|
Autenticazione di un utente usando un accesso interattivo della smart card. |
|
Autenticazione di un utente che usa un servizio per l'accesso dell'utente (S4U). |
|
Autenticazione di un utente per sbloccare una workstation bloccata durante una sessione di accesso interattiva della smart card. |
|
Autenticazione di un accesso a smart card utente tramite LOGON32_PROVIDER_WINNT50 o LOGON32_PROVIDER_DEFAULT. |
|
Autenticazione di un utente per sbloccare una workstation bloccata durante una sessione di accesso alla smart card. |
|
Autenticazione di un utente tramite richieste client S4U. Per la delega vincolata, una chiamata a LsaLogonUser non è necessaria se il client ha eseguito l'accesso usando un pacchetto di autenticazione in modalità LSA. Nei sistemi operativi Windows, questi includono Kerberos, NTLM, Secure Channel e Digest. Per la riuscita della chiamata, è necessario che sia true quanto segue:
|
|
Elaborazione della seconda metà di un accesso al protocollo NTLM 2.0. La prima metà di questo tipo di accesso viene eseguita chiamando LsaCallAuthenticationPackage con il messaggio di MsV1_0Lm20ChallengeRequest . Per altre informazioni, vedere la descrizione di MsV1_0Lm20ChallengeRequest in MSV1_0_PROTOCOL_MESSAGE_TYPE.
Questo tipo di accesso può usare un pacchetto di sottoutenticazione. |
|
Autenticazione di un utente con sottoutenticazione. |
Per altre informazioni sul buffer usato da altri pacchetti di autenticazione, vedere la documentazione per tali pacchetti di autenticazione.
[in] AuthenticationInformationLength
Lunghezza, in byte, del buffer AuthenticationInformation .
[in, optional] LocalGroups
Elenco di identificatori di gruppo aggiuntivi da aggiungere al token dell'utente autenticato. Questi identificatori di gruppo verranno aggiunti, insieme al gruppo predefinito WORLD e al gruppo di tipi di accesso (Interactive, Batch o Network), che vengono automaticamente inclusi in ogni token utente.
[in] SourceContext
Struttura TOKEN_SOURCE che identifica il modulo di origine, ad esempio gestione sessione, e il contesto che può essere utile per tale modulo. Queste informazioni sono incluse nel token utente e possono essere recuperate chiamando GetTokenInformation.
[out] ProfileBuffer
Puntatore a un puntatore void che riceve l'indirizzo di un buffer di output che contiene informazioni di autenticazione, ad esempio la shell di accesso e la home directory.
Questo parametro può essere una delle strutture del buffer di output seguenti per i pacchetti di autenticazione MSV1_0 e Kerberos.
Per altre informazioni sul buffer usato da altri pacchetti di autenticazione, vedere la documentazione per tale pacchetto di autenticazione.
Quando questo buffer non è più necessario, l'applicazione chiamante deve liberare questo buffer chiamando la funzione LsaFreeReturnBuffer .
[out] ProfileBufferLength
Puntatore a un ULONG che riceve la lunghezza, in byte, del buffer del profilo restituito.
[out] LogonId
Puntatore a un buffer che riceve un LUID che identifica in modo univoco la sessione di accesso. Questo LUID viene assegnato dal controller di dominio che ha autenticato le informazioni di accesso.
[out] Token
Puntatore a un handle che riceve il nuovo token utente creato per questa sessione. Al termine dell'uso del token, rilasciarlo chiamando la funzione CloseHandle .
[out] Quotas
Quando viene restituito un token primario, questo parametro riceve una struttura QUOTA_LIMITS che contiene i limiti di quota di processo assegnati al processo iniziale dell'utente appena connesso.
[out] SubStatus
Se l'accesso non è riuscito a causa delle restrizioni dell'account, questo parametro riceve informazioni sul motivo per cui l'accesso non è riuscito. Questo valore viene impostato solo se le informazioni sull'account dell'utente sono valide e l'accesso viene rifiutato.
Questo parametro può essere uno dei valori SubStatus seguenti per il pacchetto di autenticazione MSV1_0.
Valore restituito
Se la funzione ha esito positivo, la funzione restituisce STATUS_SUCCESS.
Se la funzione ha esito negativo, restituisce un codice NTSTATUS , che può essere uno dei valori seguenti.
Valore | Descrizione |
---|---|
|
La quota di memoria del chiamante non è sufficiente per allocare il buffer di output restituito dal pacchetto di autenticazione. |
|
L'account utente e la password sono legittimi, ma l'account utente ha una restrizione che impedisce l'accesso in questo momento. Per altre informazioni, vedere il valore archiviato nel parametro SubStatus . |
|
Le informazioni di autenticazione fornite non vengono riconosciute dal pacchetto di autenticazione. |
|
Il tentativo di accesso ha avuto esito negativo. Il motivo dell'errore non è specificato, ma i motivi tipici includono nomi utente non ortografiati e password non eliminate. |
|
Nessun controller di dominio è disponibile per il servizio della richiesta di autenticazione. |
|
Il pacchetto di autenticazione specificato non viene riconosciuto dall'LSA. |
|
Il client Kerberos ha ricevuto un certificato KDC non valido. Per l'accesso al dispositivo, è necessaria la convalida KDC rigorosa, pertanto il KDC deve disporre di certificati che usano il modello "Autenticazione Kerberos" o equivalente. Inoltre, il certificato KDC potrebbe essere scaduto, revocato o il client è in attacco attivo dell'invio di richieste al server errato. |
|
Il client Kerberos usa un certificato di sistema non valido. Per l'accesso del dispositivo, deve essere presente un nome DNS. Inoltre, il certificato di sistema potrebbe essere scaduto o quello errato potrebbe essere selezionato. |
Per altre informazioni, vedere Valori restituiti dalla funzione criteri LSA.
La funzione LsaNtStatusToWinError converte un codice NTSTATUS in un codice di errore di Windows.
Commenti
Il parametro OriginName deve specificare informazioni significative. Ad esempio, potrebbe contenere "TTY1" per indicare il terminale uno o "NTLM - remote node JAZZ" per indicare un accesso di rete che usa NTLM tramite un nodo remoto denominato "JAZZ".
È necessario chiamare separatamente LsaLogonUser per aggiornare le credenziali del dispositivo PKINIT per LOCAL_SYSTEM e NETWORK_SERVICE. Quando non è presente alcuna credenziale del dispositivo PKINIT, una chiamata riuscita non esegue alcuna operazione. Quando è presente una credenziale del dispositivo PKINIT, una chiamata riuscita pulisce le credenziali del dispositivo PKINIT in modo che solo le credenziali delle password rimangano.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows XP [solo app desktop] |
Server minimo supportato | Windows Server 2003 [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | ntsecapi.h |
Libreria | Secur32.lib |
DLL | Secur32.dll |