| Autor |
Beitrag |
digi_c
      
Beiträge: 1905
W98, XP
D7 PE, Lazarus, WinAVR
|
Verfasst: Mo 28.11.05 11:32
Hallo, für einen Service eines Kollegen suchen wir/ich schon eine ganze Weile nach einer Lösung.
Und zwar:
Ermitteln des aktiven Benutzers sprich desjenigen Benutzers der gerade auf dem PC arbeitet. Und das trotz aller Wiedrigkeiten wie RemoteLogin, Programme unter fremden Benutzerkonten(runas) und insbesondere Schneller Benutzerumschaltung.
Dabei sind uns schon die verrücktesten Ideen gekommen und wir haben auch schon etliche Units abgegrast(z.B. die Unit hier mit der EnumUsers Funktion) aber alle verfehlen das Ziel
Das Problem ist immer die angemeldeten Benutzer bzw. die aktiven Programmen einzuschränken und zu schlussfolgern.
Mein Kollege meinte, das selbst MS eingestanden hat, das es keine Messages gibt, die beim Login/out ausgelöst werden...
Weiß da einer Rat oder ist das Thema doch etwas zu abgehoben?
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mo 28.11.05 12:57
Naja, GetCurrentUser (oder wie die hieß) aus der Win-API geht so leicht auszutricksen, die brauch ich also gar nicht weiter erwähnen.
Unter allen Systemen vor WinXP ist das noch über die beschriebene Variante: User aller Prozesse fltern und nach Login-Usern filtern möglich, da nur 1 User aktiv sein kann (RunAs erzeugt Subprozesse, deren Parents zurückverfolgt werden können).
Eine Idee, die mir käme, wäre aus der Reg auszulesen, wer sich zuletzt angemeldet hat ... Aber das ist genauso unsicher wie alle bisherigen Versuche auch ...
Vielleicht kann man ja irgendwie die Eigentumsverhältnisse bei EnumDesktops auslesen 
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
digi_c 
      
Beiträge: 1905
W98, XP
D7 PE, Lazarus, WinAVR
|
Verfasst: Mo 28.11.05 14:53
So ähnlich ist ein Ansatz von meinem Kollegen, der die Benutzerrechte die Shellinstanzen(explorer.exe) ausließt. Aber trotzdem weiß man ja nicht welcher der Aktive ist 
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 28.11.05 14:56
BenBE hat folgendes geschrieben: | Naja, GetCurrentUser (oder wie die hieß) aus der Win-API geht so leicht auszutricksen, die brauch ich also gar nicht weiter erwähnen.
|
Äh, in wie fern austricksen? In diesem Fall ist es nur unbrauchbar, weil als Benutzer bei einem Dienst wohl "System" zurückgegeben wird. Die API Funktion guckt nämlich in den Token Informationen des aufrufenden Prozesses, welcher Benutzer den Prozess gestartet hat.
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Mo 28.11.05 16:08
Schau dir mal LSAENUMERATELOGONSESSIONS an.. geht AFAIR, entgegen MS-Doku, auch schon unter Win2k.
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Mo 28.11.05 22:50
digi_c hat folgendes geschrieben: | | Mein Kollege meinte, das selbst MS eingestanden hat, das es keine Messages gibt, die beim Login/out ausgelöst werden... |
Da finde ich aber folgendes etwas seltsam (eben drauf gestoßen): msdn.microsoft.com/l...anged.asp?frame=true
Weiß MS selbst nicht, was sie tun oder hab ich da was falsch verstanden?
|
|
digi_c 
      
Beiträge: 1905
W98, XP
D7 PE, Lazarus, WinAVR
|
Verfasst: Di 29.11.05 08:51
@Motzi sieht gut aus aber da würden wir bei zwei parallen Sessions für beide Interactive zurückkriegen und könnten nicht herausfinden welche von beiden nun "den Fokus" hat
@UGrohne leider nicht für NT Schiene.
Das aufzählen ist nicht das Problem, das unterscheiden/filtern ist das was uns Kopfzerbrechen bereitet
Trotzdem Danke für eure Hinweise  ist echt ne harte Nuss, gell?
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Di 29.11.05 10:18
Hm.. ok, dann würde ich vorschlagen probiert mal das:
- den aktuellen Desktop per OpenInputDesktop öffnen
- mit GetUserObjectInformation die SID des Users holen der mit dem Desktop verknüpft ist
- mit LookupAccountSid den Usernamen für die SID holen
- nicht vergessen den Desktop wieder zu schließen
Gruß, Motzi
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
digi_c 
      
Beiträge: 1905
W98, XP
D7 PE, Lazarus, WinAVR
|
Verfasst: Di 29.11.05 10:56
Mir ein wenig zu hoch aber schaut vielversprechend aus.
Kollege wird es mal ausprobieren 
|
|
|