Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Benutzer wechseln (https://www.delphipraxis.net/118910-benutzer-wechseln.html)

Laufi 17. Aug 2008 19:47


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

Dezipaitor 17. Aug 2008 21:13

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.

Luckie 17. Aug 2008 23:51

Re: Benutzer wechseln
 
Zitat:

Zitat von Dezipaitor
Geht nicht...

...ohne riesen Aufwand!

Weiß du was Windows eigentlich genau macht, wenn man die schnelle Benutzerumschlatung benutzt? Das würde mich jetzt mal interessieren.

Dezipaitor 18. Aug 2008 07:31

Re: Benutzer wechseln
 
Zitat:

Zitat von Luckie
Weiß du was Windows eigentlich genau macht, wenn man die schnelle Benutzerumschlatung benutzt? Das würde mich jetzt mal interessieren.

Der Terminaldienst erstellt eine neue TerminalSession, dort drin die Windowstation und die Desktops und lädt dann das Benutzerprofil, um den Explorer usw zu starten.
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.

Luckie 18. Aug 2008 08:23

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?

Dezipaitor 18. Aug 2008 08:43

Re: Benutzer wechseln
 
Ein Windows XP sieht mit mehreren Benutzern so aus :

Code:
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)
...
Vista:

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

Luckie 18. Aug 2008 08:46

Re: Benutzer wechseln
 
Interessant. Danke für die Information.

Dezipaitor 18. Aug 2008 10:02

Re: Benutzer wechseln
 
Es gibt keine Funktion, um zwischen zwei Sessions umzuschalten!

Remko 18. Aug 2008 15:01

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:
function WinStationConnectW(hServer: Handle; SessionId: DWORD;
  TargetSessionId: DWORD; pPassword: LPWSTR;
  bWait: BOOL): Boolean; stdcall;
and also in Jwscl Terminal Server unit (TJwWTSSession.Connect).

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!).

Dezipaitor 18. Aug 2008 15:17

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 01:55 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz