Forum: Object-Pascal / Delphi-Language
by Zacherl,
13. Mär 2017
Genau das ermöglicht die Funktion. Ich glaube da haben wir uns missverstanden: Die Session unter der ich das Programm starte ist nicht gleichzusetzen mit den Benutzerkontext unter dem das Programm läuft.
Die Session ist fest an den Benutzeraccount gebunden, mit dem du dich einloggst (egal ob lokal oder remote). Sagen wir du loggst dich mit einem eingeschränkten Account "Luckie" ein und...
Forum: Object-Pascal / Delphi-Language
by Zacherl,
12. Mär 2017
Hab schnell einen Windows Server 2016 aufgesetzt und selbst getestet: Es wird tatsächlich immer die Session zurückgegeben, mit der man aktuell angemeldet (also die Session mit der ich das Testprogramm auch tatsächlich starte) ist. Dabei ist es sogar egal, ob ich das Programm per "Ausführen als .." unter einem anderen Benutzerkontext starte.
Forum: Object-Pascal / Delphi-Language
by Zacherl,
12. Mär 2017
Wie sich der Code (insbesondere das WTS_CURRENT_SESSION) auf Server-Systemen mit mehreren aktiven Sessions verhält, weiß ich leider nicht. Hat jemand einen Windows Server am laufen, der das mal testen mag? Wenn man tatsächlich ausschließlich die lokale Session benötigt, dann gibt es aber auch per WTSQuerySessionInformation eine Möglichkeit das zu prüfen.
Forum: Object-Pascal / Delphi-Language
by Zacherl,
12. Mär 2017
Man bekommt den Namen des Benutzerkontos mit dem man sich per RDP eingeloggt hat. Intern unterscheidet Windows gar nicht mehr großartig zwischen lokalem Login und einer Remote-Session. Session ist Session :stupid:
In meinem Falle benötigte ich das Token des angemeldeten Users, um bestimmte Aktionen in seinem Userkontext ausführen zu können.
Forum: Object-Pascal / Delphi-Language
by Zacherl,
12. Mär 2017
Ich sehe grade, dass es für die aktuelle Sitzung sogar Konstanten gibt. Folgender Aufruf sollte für dich funktionieren:
function WTSQuerySessionInformationW(hServer: THandle; SessionId: DWord; WTSInfoClass: DWord;
var ppBuffer: LPTSTR; var BytesReturned: DWord): BOOL; stdcall;
external 'Wtsapi32.dll';
procedure WTSFreeMemory(pMemory: Pointer); stdcall;
external 'Wtsapi32.dll';
...