![]() |
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 ? |
Re: Benutzer wechseln
Actually...
It was documented starting from vista as WTSConnectSession http://msdn.microsoft.com/en-us/library/bb394782(VS.85).aspx which is merely a wrapper for WinStationConnect. I don't think it will work on the services session though (you can try offcourse). I think for that purpose (switching to session 0) you need to use the WinStationSwitchToServicesSession which I expect to require system permissions. As I recall it's a function (or procedure) without arguments. |
Re: Benutzer wechseln
Delphi-Quellcode:
Nur leider reagiert das unter Vista anders als unter XP :gruebel:
procedure TForm1.Button1Click(Sender: TObject);
begin Windows.ExitWindowsEx(Windows.EWX_LOGOFF, 1); end; |
Re: Benutzer wechseln
Ja so kann man sich irren. Es wäre also möglich sich zu einem existierenden User zu verbinden. Ich sehe jedoch keine Möglichkeit eine eigene Session und damit eingeloggten Benutzer zu erstellen.
Wenn du Laufi oder jemand anderes in die Richtung machen will, dann wäre ich glücklich, wenn wir da etwas unter der JEDI API&WSCL machen könnten |
Re: Benutzer wechseln
Zitat:
|
Re: Benutzer wechseln
So wie der Quelltext aussieht, fehlt das Shutdownprivileg.
Wenn du Laufi oder jemand anderes in die Richtung machen will, dann wäre ich glücklich, wenn wir da etwas unter der JEDI API&WSCL machen könnten |
Re: Benutzer wechseln
Zitat:
|
Re: Benutzer wechseln
Zitat:
Also folgnich eigentlich nicht das, was er tun sollte! Unter Vista wird mein Benutzer komplett abgemeldet! Alle Offenen Task und Fenster werden geschlossen. Und da bin ich mir zu 90% sicher, weil ich mich damals sowas von über diese dämliche "ExitWindowsEx" geärgert habe. mit Shutdown fuhr der PC auch nicht runter etc.... EDIT: So muss richtig lauten :D |
Re: Benutzer wechseln
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:24 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