LogonUserExExW-Funktion
Die LogonUserExExW-Funktion versucht, einen Benutzer beim lokalen Computer zu anmelden. Der lokale Computer ist der Computer, von dem LogonUserExExW aufgerufen wurde. Sie können logonUserExExW nicht verwenden, um sich bei einem Remotecomputer anmelden. Geben Sie den Benutzer mit einem Benutzernamen und einer Domäne an, und authentifizieren Sie den Benutzer mithilfe eines Klartextkennworts. Wenn die Funktion erfolgreich ist, empfängt sie ein Handle für ein Token, das den angemeldeten Benutzer darstellt. Anschließend können Sie dieses Tokenhand handle verwenden, um die Identität des angegebenen Benutzers zu übernehmen oder in den meisten Fällen einen Prozess zu erstellen, der im Kontext des angegebenen Benutzers ausgeführt wird.
Diese Funktion ähnelt der LogonUserEx-Funktion, mit der Ausnahme, dass sie den zusätzlichen Parameter pTokenGroups verwendet, bei dem es sich um einen Satz von sicherheitsbezeichnern (SIDs) handelt, die dem Token hinzugefügt werden, das an den Aufrufer zurückgegeben wird, wenn die Anmeldung erfolgreich ist.
Diese Funktion ist nicht in einem öffentlichen Header deklariert und verfügt über keine zugeordnete Importbibliothek. Sie müssen die Funktionen LoadLibrary und GetProcAddress verwenden, um eine dynamische Verknüpfung mit Advapi32.dll.
Syntax
BOOL WINAPI LogonUserExExW(
_In_ LPTSTR lpszUsername,
_In_opt_ LPTSTR lpszDomain,
_In_opt_ LPTSTR lpszPassword,
_In_ DWORD dwLogonType,
_In_ DWORD dwLogonProvider,
_In_opt_ PTOKEN_GROUPS pTokenGroups,
_Out_opt_ PHANDLE phToken,
_Out_opt_ PSID *ppLogonSid,
_Out_opt_ PVOID *ppProfileBuffer,
_Out_opt_ LPDWORD pdwProfileLength,
_Out_opt_ PQUOTA_LIMITS pQuotaLimits
);
Parameter
-
lpszUsername [ In]
-
Ein Zeiger auf eine auf NULL beendete Zeichenfolge, die den Namen des Benutzers angibt. Dies ist der Name des Benutzerkontos, bei dem sie sich anmelden. Wenn Sie das UPN-Format (User Principal Name) verwenden, muss der lpszDomain-Parameter NULL sein.
-
lpszDomain [ in, optional]
-
Ein Zeiger auf eine auf NULL beendete Zeichenfolge, die den Namen der Domäne oder des Servers angibt, deren Kontodatenbank das Konto lpszUsername enthält. Wenn dieser Parameter NULL ist, muss der Benutzername im UPN-Format angegeben werden. Wenn dieser Parameter "." ist, überprüft die Funktion das Konto nur mithilfe der lokalen Kontodatenbank.
-
lpszPassword [ in, optional]
-
Ein Zeiger auf eine auf NULL beendete Zeichenfolge, die das Klartextkennwort für das benutzerkonto angibt, das von lpszUsername angegeben wird. Wenn Sie die Verwendung des Kennworts abgeschlossen haben, löschen Sie das Kennwort aus dem Arbeitsspeicher, indem Sie die SecureZeroMemory-Funktion aufrufen. Weitere Informationen zum Schutz von Kennwörtern finden Sie unter Behandeln von Kennwörtern.
-
dwLogonType [ In]
-
Der Typ des durchzuführenden Anmeldevorgang. Dieser Parameter kann einen der folgenden Werte annehmen.
Wert Bedeutung - LOGON32 _ INTERAKTIVE _ ANMELDUNG
- 2
Dieser Anmeldetyp ist für Benutzer bestimmt, die den Computer interaktiv verwenden, z. B. ein Benutzer, der von einem Terminalserver, einer Remoteshell oder einem ähnlichen Prozess angemeldet ist. Dieser Anmeldetyp hat zusätzliche Kosten für das Zwischenspeichern von Anmeldeinformationen für getrennte Vorgänge. Daher ist sie für einige Client-/Serveranwendungen, z. B. einen E-Mail-Server, ungeeignet. - LOGON32 _ LOGON _ NETWORK
- 3
Dieser Anmeldetyp ist für Hochleistungsserver zum Authentifizieren von Klartextkennwörtern vorgesehen. Die LogonUserExExW-Funktion speichert keine Anmeldeinformationen für diesen Anmeldetyp zwischen. - LOGON32 _ LOGON _ BATCH
- 4
Dieser Anmeldetyp ist für Batchserver vorgesehen, bei denen Prozesse im Auftrag eines Benutzers ohne direktes Eingreifen ausgeführt werden können. Dieser Typ ist auch für Server mit höherer Leistung, die viele Klartextauthentifizierungsversuche gleichzeitig verarbeiten, z. B. E-Mail- oder Webserver. Die LogonUserExExW-Funktion speichert keine Anmeldeinformationen für diesen Anmeldetyp zwischen. - LOGON32 _ LOGON _ SERVICE
- 5
Gibt eine Diensttypanmeldung an. Für das bereitgestellte Konto muss die Dienstberechtigung aktiviert sein. - LOGON32 _ ENTSPERREN _ DER ANMELDUNG
- 7
Dieser Anmeldetyp gilt für GINA-DLLs, die Benutzer anmelden, die den Computer interaktiv verwenden. Dieser Anmeldetyp kann einen eindeutigen Überwachungsdatensatz generieren, der zeigt, wann die Arbeitsstation entsperrt wurde. - LOGON32 _ LOGON _ NETWORK _ CLEARTEXT
- 8
Dieser Anmeldetyp behält den Namen und das Kennwort im Authentifizierungspaket bei, wodurch der Server verbindungen mit anderen Netzwerkservern herstellen kann, während die Identität des Clients angenommen wird. Ein Server kann Nur-Text-Anmeldeinformationen von einem Client akzeptieren, LogonUserExExW aufrufen, überprüfen, ob der Benutzer über das Netzwerk auf das System zugreifen und weiterhin mit anderen Servern kommunizieren kann. - LOGON32 _ NEUE _ ANMELDEINFORMATIONEN _ ANMELDEN
- 9
Mit diesem Anmeldetyp kann der Aufrufer sein aktuelles Token klonen und neue Anmeldeinformationen für ausgehende Verbindungen angeben. Die neue Anmeldesitzung verfügt über den gleichen lokalen Bezeichner, verwendet jedoch unterschiedliche Anmeldeinformationen für andere Netzwerkverbindungen.
Dieser Anmeldetyp wird nur vom LOGON32 _ PROVIDER _ WINNT50-Anmeldeanbieter unterstützt. -
dwLogonProvider [ In]
-
Der Anmeldeanbieter. Dieser Parameter kann einen der folgenden Werte annehmen.
Wert Bedeutung - LOGON32 _ PROVIDER _ DEFAULT
Verwenden Sie den Standardanmeldungsanbieter für das System. Der Standardsicherheitsanbieter ist NTLM. - LOGON32 _ PROVIDER _ WINNT50
Verwenden Sie den Aushandlungsanmeldungsanbieter. - LOGON32 _ PROVIDER _ WINNT40
Verwenden Sie den NTLM-Anmeldeanbieter. -
pTokenGroups [ in, optional]
-
Ein Zeiger auf eine TOKEN _ GROUPS-Struktur, der eine Liste von Gruppen-SIDs angibt, die dem Token hinzugefügt werden, das diese Funktion bei erfolgreicher Anmeldung empfängt. Alle DEM Token hinzugefügten SIDs wirken sich auch auf die Gruppenerweiterung aus. Wenn die hinzugefügten SIDs beispielsweise Mitglieder lokaler Gruppen sind, werden diese Gruppen auch dem empfangenen Zugriffstoken hinzugefügt.
Wenn dieser Parameter nicht NULL ist, muss dem Aufrufer dieser Funktion die _ tcb SE PRIVILEG-Berechtigung _ erteilt und aktiviert sein.
-
phToken [ out, optional]
-
Ein Zeiger auf eine Handlevariable, die ein Handle für ein Token empfängt, das den angegebenen Benutzer darstellt.
Sie können das zurückgegebene Handle in Aufrufen der ImpersonateLoggedOnUser-Funktion verwenden.
In den meisten Fällen ist das zurückgegebene Handle ein primäres Token, das Sie in Aufrufen der CreateProcessAsUser-Funktion verwenden können. Wenn Sie jedoch das LOGON32 _ LOGON NETWORK-Flag angeben, gibt _ LogonUserExExW ein Identitätswechseltoken zurück, das Sie nicht in CreateProcessAsUser verwenden können, es sei denn, Sie rufen DuplicateTokenEx auf, um das Identitätswechseltoken in ein primäres Token zu konvertieren.
Wenn Sie dieses Handle nicht mehr benötigen, schließen Sie es, indem Sie die CloseHandle-Funktion aufrufen.
-
ppLogonSid [ out, optional]
-
Ein Zeiger auf einen Zeiger auf eine SID, die die SID des angemeldeten Benutzers empfängt.
Wenn Sie die SID nicht mehr verwenden, geben Sie sie frei, indem Sie die LocalFree-Funktion aufrufen.
-
ppProfileBuffer [ out, optional]
-
Ein Zeiger auf einen Zeiger, der die Adresse eines Puffers empfängt, der das Profil des angemeldeten Benutzers enthält.
-
pdwProfileLength [ out, optional]
-
Ein Zeiger auf ein DWORD, das die Länge des Profilpuffers empfängt.
-
pQuotaLimits [ out, optional]
-
Ein Zeiger auf eine QUOTA _ LIMITS-Struktur, die Informationen zu den Kontingenten für den angemeldeten Benutzer empfängt.
Rückgabewert
Wenn die Funktion erfolgreich ist, gibt die Funktion einen Wert ungleich 0 (null) zurück.
Wenn die Funktion fehlschlägt, gibt sie 0 (null) zurück. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.
Bemerkungen
Der LOGON32 _ LOGON _ NETWORK-Anmeldetyp ist am schnellsten, hat jedoch die folgenden Einschränkungen:
- Die Funktion gibt ein Identitätswechseltoken zurück,kein primäres Token. Sie können dieses Token nicht direkt in der CreateProcessAsUser-Funktion verwenden. Sie können jedoch die DuplicateTokenEx-Funktion aufrufen, um das Token in ein primäres Token zu konvertieren, und es dann in CreateProcessAsUser verwenden.
- Wenn Sie das Token in ein primäres Token konvertieren und es in CreateProcessAsUser verwenden, um einen Prozess zu starten, kann der neue Prozess nicht über den Redirector auf andere Netzwerkressourcen wie Remoteserver oder Drucker zugreifen. Eine Ausnahme ist, dass der neue Prozess darauf zugreifen kann, wenn der Zugriff auf die Netzwerkressource nicht gesteuert wird.
Das durch lpszUsername angegebene Konto muss über die erforderlichen Kontorechte verfügen. Um sich beispielsweise bei einem Benutzer mit dem LOGON32 _ LOGON _ INTERACTIVE-Flag anmelden zu können, muss der Benutzer (oder eine Gruppe, zu der der Benutzer gehört) über das SE INTERACTIVE _ _ LOGON _ NAME-Konto verfügen. Eine Liste der Kontorechte, die sich auf die verschiedenen Anmeldevorgänge auswirken, finden Sie unter Kontoobjektzugriffsrechte.
Ein Benutzer gilt als angemeldet, wenn mindestens ein Token vorhanden ist. Wenn Sie CreateProcessAsUser aufrufen und dann das Token schließen, ist der Benutzer weiterhin angemeldet, bis der Prozess (und alle untergeordneten Prozesse) beendet wurde.
Wenn der optionale pTokenGroups-Parameter angegeben wird, fügt LSA weder die lokale SID noch die Anmelde-SID automatisch hinzu.
Requirements (Anforderungen)
| Anforderung | Wert |
|---|---|
| Unterstützte Mindestversion (Client) |
Windows [Nur Vista-Desktop-Apps] |
| Unterstützte Mindestversion (Server) |
Windows Nur Server [ 2008-Desktop-Apps] |
| Version |
LogonUserExExW ist auch unterWindows Server 2003 oder Windows XP mit dem Release der allgemeinen Verteilung verfügbar. |
| Header |
|
| DLL |
|