![]() |
Benutzer wechseln
Hallo!
Wie kann ich mit Delphi den Benutzer wechseln, so wie wenn ich mit WIN-L einen Benutzer anwähle? Also ich möchte eine Funktion schreiben wo ich Benutzername und Passwort übergebe, damit dann zu diesem geswitcht wird mit Desktop und allem :) Liebe Grüsse Laufi |
Re: Benutzer wechseln
Geht nicht...
...ohne riesen Aufwand! Aber du kannst den Desktop mit LockWindowStation sperren oder einen neuen Desktop anlegen und dort den Explorer mit dem Token von der API LogonUser starten. Das funktioniert mit dem meisten Programmen, ist aber nicht wirklich sicher. |
Re: Benutzer wechseln
Zitat:
|
Re: Benutzer wechseln
Zitat:
Am PC angemeldete Benutzer werden durch eine Session getrennt. Session grenzen so ziemlich alles ab, bis auf Pipes, IP und Memory. Handles sind nie gültig in der anderen Sessions, und auf den Desktop der anderen Session kommt man auch nicht. Das gibt es schon seit Windows XP, jedoch ist es vielen erst bei Vista passiert, dass ihre Dienste nicht mehr laufen. Daher sage ich immer, dass es reiner Zufall ist, dass das Programm X in XP läuft. Lässt man nämlich einen Dienst in XP laufen und loggt sich als zweiter User ein, dann kann der Dienst dort nichts ausgeben, da es sich ja um eine andere Session handelt. Daher schreibe ich auch immer, dass die Leute ihre Dienste und Apps nach dem MVC (siehe Wikipedia) bauen sollen. |
Re: Benutzer wechseln
Bis Windows XP gab es ja nur eine interaktive Windows Station, die WinSta0. Kann es davon jetzt mehrere geben oder gibt es jetzt mehr interaktive Windows Stations?
|
Re: Benutzer wechseln
Ein Windows XP sieht mit mehreren Benutzern so aus :
Code:
Vista:
Session 0 (phys Console)
|- Winsta 0 (sichtbar) |- Default |- Winlogon |- ... |- Service-$xxx (unsichtbar) Session 1 (TerminalSession: FUS, Remote Desktop) |- Winsta 0 (sichtbar) |- Default |- Winlogon |- ... |- weitere WindowStations (unsichtbar) ...
Code:
Session 0 (Dienstsession)
|- Winsta 0 (sichtbar in Ausnahmefällen - Legacy Mode) |- Default |- ... |- Service-$xxx (unsichtbar) Session 1 (Session des ersten angemeldeten Benutzers, phys oder Terminal (RDP) ) |- Winsta 0 (sichtbar) |- Default |- Winlogon |- ... |- weitere WindowStations (unsichtbar) ... |
Re: Benutzer wechseln
Interessant. Danke für die Information.
|
Re: Benutzer wechseln
Es gibt keine Funktion, um zwischen zwei Sessions umzuschalten!
|
Re: Benutzer wechseln
Actually... it does.
It's called WinStationConnect, an undocumented function from winsta.dll. It's present in JwaWinsta.pas (Jedi Apilib):
Delphi-Quellcode:
and also in Jwscl Terminal Server unit (TJwWTSSession.Connect).
function WinStationConnectW(hServer: Handle; SessionId: DWORD;
TargetSessionId: DWORD; pPassword: LPWSTR; bWait: BOOL): Boolean; stdcall; If you switch to a session with the same user you don't need to specify a password in which case you pass empty string (and not nil!). |
Re: Benutzer wechseln
Ich habe indirekt damit gemeint, dass es keine dokumentierte Variante gibt!
So, this func can actually change the session ID from 1 to 0 in Vista??? So we could see ServiceGUIs ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz