LsaLogonUser-Funktion (ntsecapi.h)

Die LsaLogonUser-Funktion authentifiziert die Anmeldedaten eines Sicherheitsprinzipals mithilfe gespeicherter Anmeldeinformationen.

Wenn die Authentifizierung erfolgreich ist, erstellt diese Funktion eine neue Anmeldesitzung und gibt ein Benutzertoken zurück.

Wenn ein neues Ticket granting ticket (TGT) mit neuen Zertifikatanmeldeinformationen abgerufen wird, werden alle TGTs und Servicetickets des Systems gelöscht. Alle Benutzerdiensttickets, die eine zusammengesetzte Identität aufweisen, werden ebenfalls gelöscht.

Syntax

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
);

Parameter

[in] LsaHandle

Ein Handle, das aus einem vorherigen Aufruf von LsaRegisterLogonProcess abgerufen wurde.

Der Aufrufer muss nur über SeTcbPrivilege verfügen, wenn mindestens eines der folgenden Punkte zutrifft:

  • Ein Unterauthentifizierungspaket wird verwendet.
  • KERB_S4U_LOGON wird verwendet, und der Aufrufer fordert ein Identitätswechseltoken an.
  • Der LocalGroups-Parameter ist nicht NULL.
Wenn SeTcbPrivilege nicht erforderlich ist, rufen Sie LsaConnectUntrusted auf, um das Handle abzurufen.

[in] OriginName

Eine Zeichenfolge, die den Ursprung des Anmeldeversuchs identifiziert. Weitere Informationen finden Sie in den Hinweisen.

[in] LogonType

Ein Wert der SECURITY_LOGON_TYPE-Enumeration , der den angeforderten Anmeldetyp angibt. Wenn LogonType interactive oder Batch ist, wird ein primäres Token generiert, das den neuen Benutzer darstellt. Wenn LogonType network ist, wird ein Identitätswechseltoken generiert.

[in] AuthenticationPackage

Ein Bezeichner des Authentifizierungspakets, das für die Authentifizierung verwendet werden soll. Sie können diesen Wert abrufen, indem Sie LsaLookupAuthenticationPackage aufrufen.

[in] AuthenticationInformation

Ein Zeiger auf einen Eingabepuffer, der Authentifizierungsinformationen wie Benutzername und Kennwort enthält. Das Format und der Inhalt dieses Puffers werden durch das Authentifizierungspaket bestimmt.

Dieser Parameter kann eine der folgenden Eingabepufferstrukturen für die MSV1_0- und Kerberos-Authentifizierungspakete sein.

Wert Bedeutung
MSV1_0_INTERACTIVE_LOGON
MSV1_0
Authentifizieren einer interaktiven Benutzeranmeldung.

Die Member LogonDomainName, UserName und Password der MSV1_0_INTERACTIVE_LOGON-Struktur müssen auf Puffer im Arbeitsspeicher verweisen, die mit der Struktur selbst zusammenhängend sind. Der Wert des AuthenticationInformationLength-Parameters muss die Länge dieser Puffer berücksichtigen.

KERB_INTERACTIVE_LOGON
Kerberos
Authentifizieren einer interaktiven Benutzeranmeldung.
KERB_TICKET_LOGON
Kerberos
Authentifizieren eines Benutzers bei der ersten Netzwerkanmeldung oder Trennen der Verbindung.
KERB_TICKET_UNLOCK_LOGON
Kerberos
Authentifizieren eines Benutzers bei der Ticketaktualisierung, eine Variante der normalen Entsperrung der Arbeitsstation.
KERB_CERTIFICATE_LOGON
Kerberos
Authentifizieren eines Benutzers mithilfe einer interaktiven intelligenten Karte Anmeldung.
KERB_CERTIFICATE_S4U_LOGON
Kerberos
Authentifizieren eines Benutzers mithilfe eines Diensts für die Benutzeranmeldung (S4U).
KERB_CERTIFICATE_UNLOCK_LOGON
Kerberos
Authentifizieren eines Benutzers zum Entsperren einer Arbeitsstation, die während einer interaktiven Smart Karte Anmeldesitzung gesperrt wurde.
KERB_SMARTCARD_LOGON
Kerberos
Authentifizieren eines Benutzers smart Karte Anmeldung mithilfe von LOGON32_PROVIDER_WINNT50 oder LOGON32_PROVIDER_DEFAULT.
KERB_SMARTCARD_UNLOCK_LOGON
Kerberos
Authentifizieren eines Benutzers, um eine Arbeitsstation zu entsperren, die während einer Smart Karte Anmeldesitzung gesperrt wurde.
KERB_S4U_LOGON
Kerberos
Authentifizieren eines Benutzers mithilfe von S4U-Clientanforderungen. Für die eingeschränkte Delegierung ist kein Aufruf von LsaLogonUser erforderlich, wenn sich der Client mit einem Authentifizierungspaket im LSA-Modus angemeldet hat. Unter Windows-Betriebssystemen gehören dazu Kerberos, NTLM, Secure Channel und Digest. Damit dieser Aufruf erfolgreich ist, muss Folgendes zutreffen:
  • Der Aufrufer muss ein Domänenkonto sein (dies schließt LOCAL_SYSTEM ein, wenn der Computer ein Domänenmitglied ist).
  • Wenn Sie ein Dienstkonto verwenden, muss für das Konto SeTcbPrivilege auf dem lokalen Computer festgelegt sein, um ein Identitätswechseltoken zu erhalten. Andernfalls wird das Identitätstoken verwendet.
  • Der Aufrufer muss Mitglied des Pre-Windows 2000-kompatiblen Zugriffs sein oder über Lesezugriff auf die Gruppenmitgliedschaften des Clients verfügen. Die Mitgliedschaft in der Windows-Autorisierungszugriffsgruppe garantiert Lesezugriff auf die Gruppenmitgliedschaft des Clients. Informationen zum Konfigurieren der Windows-Autorisierungszugriffsgruppe finden Sie in der Microsoft Knowledge Base.
Die Member ClientUpn und ClientRealm der KERB_S4U_LOGON-Struktur müssen auf Puffer im Arbeitsspeicher verweisen, die mit der Struktur selbst zusammenhängend sind. Der Wert des AuthenticationInformationLength-Parameters muss die Länge dieser Puffer berücksichtigen.
MSV1_0_LM20_LOGON
MSV1_0
Verarbeiten der zweiten Hälfte einer NTLM 2.0-Protokollanmeldung. Die erste Hälfte dieses Anmeldetyps erfolgt durch Aufrufen von LsaCallAuthenticationPackage mit der MsV1_0Lm20ChallengeRequest Nachricht. Weitere Informationen finden Sie in der Beschreibung der MsV1_0Lm20ChallengeRequest in MSV1_0_PROTOCOL_MESSAGE_TYPE.

Dieser Anmeldetyp kann ein Unterauthentifizierungspaket verwenden.

MSV1_0_SUBAUTH_LOGON
MSV1_0
Authentifizieren eines Benutzers mit Unterauthentifizierung.
 

Weitere Informationen zum Puffer, der von anderen Authentifizierungspaketen verwendet wird, finden Sie in der Dokumentation zu diesen Authentifizierungspaketen.

[in] AuthenticationInformationLength

Die Länge des AuthenticationInformation-Puffers in Bytes.

[in, optional] LocalGroups

Eine Liste zusätzlicher Gruppenbezeichner, die dem Token des authentifizierten Benutzers hinzugefügt werden sollen. Diese Gruppenbezeichner werden zusammen mit der Standardgruppe WORLD und der Anmeldetypgruppe (Interaktiv, Batch oder Netzwerk) hinzugefügt, die automatisch in jedem Benutzertoken enthalten sind.

[in] SourceContext

Eine TOKEN_SOURCE Struktur, die das Quellmodul , z. B. den Sitzungs-Manager, und den Kontext identifiziert, der für dieses Modul nützlich sein kann. Diese Informationen sind im Benutzertoken enthalten und können durch Aufrufen von GetTokenInformation abgerufen werden.

[out] ProfileBuffer

Ein Zeiger auf einen Void-Zeiger, der die Adresse eines Ausgabepuffers empfängt, der Authentifizierungsinformationen enthält, z. B. die Anmeldeshell und das Basisverzeichnis.

Dieser Parameter kann eine der folgenden Ausgabepufferstrukturen für die MSV1_0- und Kerberos-Authentifizierungspakete sein.

Wert Bedeutung
MSV1_0_INTERACTIVE_PROFILE
MSV1_0
Anmeldeprofil eines interaktiven Benutzers.
KERB_TICKET_PROFILE
Kerberos
Anmelde-, Trenn- und Ticketaktualisierungs-Authentifizierungsausgabe.
MSV1_0_LM20_LOGON
MSV1_0
Ausgabe beim Verarbeiten der zweiten Hälfte einer NTLM 2.0-Protokollanmeldung.
MSV1_0_LM20_LOGON_PROFILE
MSV1_0
Ausgabe bei Verwendung der Authentifizierung mit Unterauthentifizierung.
 

Weitere Informationen zum Puffer, der von anderen Authentifizierungspaketen verwendet wird, finden Sie in der Dokumentation zu diesem Authentifizierungspaket.

Wenn dieser Puffer nicht mehr benötigt wird, muss die aufrufende Anwendung diesen Puffer durch Aufrufen der LsaFreeReturnBuffer-Funktion freigeben.

[out] ProfileBufferLength

Ein Zeiger auf eine ULONG , die die Länge des zurückgegebenen Profilpuffers in Bytes empfängt.

[out] LogonId

Ein Zeiger auf einen Puffer, der eine LUID empfängt, die die Anmeldesitzung eindeutig identifiziert. Diese LUID wird vom Domänencontroller zugewiesen, der die Anmeldeinformationen authentifiziert hat.

[out] Token

Ein Zeiger auf ein Handle, das das neue Benutzertoken empfängt, das für diese Sitzung erstellt wurde. Wenn Sie die Verwendung des Tokens abgeschlossen haben, geben Sie es durch Aufrufen der CloseHandle-Funktion frei.

[out] Quotas

Wenn ein primäres Token zurückgegeben wird, empfängt dieser Parameter eine QUOTA_LIMITS Struktur, die die Prozesskontingentgrenzwerte enthält, die dem anfänglichen Prozess des neu angemeldeten Benutzers zugewiesen sind.

[out] SubStatus

Wenn die Anmeldung aufgrund von Kontoeinschränkungen fehlgeschlagen ist, empfängt dieser Parameter Informationen darüber, warum die Anmeldung fehlgeschlagen ist. Dieser Wert wird nur festgelegt, wenn die Kontoinformationen des Benutzers gültig sind und die Anmeldung abgelehnt wird.

Dieser Parameter kann einer der folgenden SubStatus-Werte für das MSV1_0-Authentifizierungspaket sein.

Wert Bedeutung
STATUS_INVALID_LOGON_HOURS
Das Benutzerkonto verfügt über Zeitbeschränkungen und kann derzeit nicht für die Anmeldung verwendet werden.
STATUS_INVALID_WORKSTATION
Das Benutzerkonto verfügt über Arbeitsstationseinschränkungen und kann nicht für die Anmeldung von der aktuellen Arbeitsstation verwendet werden.
STATUS_PASSWORD_EXPIRED
Das Kennwort für das Benutzerkonto ist abgelaufen.
STATUS_ACCOUNT_DISABLED
Das Benutzerkonto ist derzeit deaktiviert und kann nicht für die Anmeldung verwendet werden.

Rückgabewert

Wenn die Funktion erfolgreich ist, gibt die Funktion STATUS_SUCCESS zurück.

Wenn die Funktion fehlschlägt, gibt sie einen NTSTATUS-Code zurück, der einer der folgenden Werte sein kann.

Wert BESCHREIBUNG
STATUS_QUOTA_EXCEEDED
Das Arbeitsspeicherkontingent des Aufrufers reicht nicht aus, um den vom Authentifizierungspaket zurückgegebenen Ausgabepuffer zuzuordnen.
STATUS_ACCOUNT_RESTRICTION
Das Benutzerkonto und das Kennwort sind legitim, aber das Benutzerkonto verfügt über eine Einschränkung, die die Anmeldung zu diesem Zeitpunkt verhindert. Weitere Informationen finden Sie unter dem Wert, der im SubStatus-Parameter gespeichert ist.
STATUS_BAD_VALIDATION_CLASS
Die bereitgestellten Authentifizierungsinformationen werden vom Authentifizierungspaket nicht erkannt.
STATUS_LOGON_FAILURE
Der Anmeldeversuch ist fehlgeschlagen. Der Grund für den Fehler ist nicht angegeben, aber typische Gründe sind falsch geschriebene Benutzernamen und falsch geschriebene Kennwörter.
STATUS_NO_LOGON_SERVERS
Für die Authentifizierungsanforderung stehen keine Domänencontroller zur Verfügung.
STATUS_NO_SUCH_PACKAGE
Das angegebene Authentifizierungspaket wird von der LSA nicht erkannt.
STATUS_PKINIT_FAILURE
Der Kerberos-Client hat ein ungültiges KDC-Zertifikat erhalten. Für die Geräteanmeldung ist eine strenge KDC-Überprüfung erforderlich, sodass das KDC über Zertifikate verfügen muss, die die Vorlage "Kerberos-Authentifizierung" oder eine entsprechende Vorlage verwenden. Außerdem kann das KDC-Zertifikat abgelaufen oder widerrufen sein, oder der Client wird aktiv angegriffen, wenn Anforderungen an den falschen Server gesendet werden.
STATUS_PKINIT_CLIENT_FAILURE
Der Kerberos-Client verwendet ein ungültiges Systemzertifikat. Für die Geräteanmeldung muss ein DNS-Name vorhanden sein. Außerdem kann das Systemzertifikat abgelaufen sein oder das falsche ausgewählt werden.
 

Weitere Informationen finden Sie unter Rückgabewerte der LSA-Richtlinienfunktion.

Die LsaNtStatusToWinError-Funktion konvertiert einen NTSTATUS-Code in einen Windows-Fehlercode.

Hinweise

Der OriginName-Parameter sollte aussagekräftige Informationen angeben. Sie kann z. B. "TTY1" enthalten, um terminal one anzugeben, oder "NTLM – Remoteknoten JAZZ", um eine Netzwerkanmeldung anzugeben, die NTLM über einen Remoteknoten namens "JAZZ" verwendet.

Sie müssen LsaLogonUser separat aufrufen, um die PKINIT-Geräteanmeldeinformationen für LOCAL_SYSTEM und NETWORK_SERVICE zu aktualisieren. Wenn keine PKINIT-Geräteanmeldeinformationen vorhanden sind, führt ein erfolgreicher Aufruf keinen Vorgang aus. Wenn PKINIT-Geräteanmeldeinformationen vorhanden sind, werden bei einem erfolgreichen Aufruf die PKINIT-Geräteanmeldeinformationen bereinigt, sodass nur die Kennwortanmeldeinformationen verbleiben.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile ntsecapi.h
Bibliothek Secur32.lib
DLL Secur32.dll

Weitere Informationen

Zulassen des anonymen Zugriffs

LsaCallAuthenticationPackage

LsaFreeReturnBuffer

LsaLookupAuthenticationPackage