AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Wie findet man den richtigen angemeldeten Windows Benutzer

Wie findet man den richtigen angemeldeten Windows Benutzer

Offene Frage von "Zacherl"
Ein Thema von DavidKlimas · begonnen am 12. Mär 2017 · letzter Beitrag vom 13. Mär 2017
Antwort Antwort
Seite 1 von 2  1 2   
DavidKlimas

Registriert seit: 24. Sep 2006
Ort: Arlon, Belgien
71 Beiträge
 
#1

Wie findet man den richtigen angemeldeten Windows Benutzer

  Alt 12. Mär 2017, 21:34
Delphi-Version: 5
Hallo zusammen,

ich hab verschiedenes ausprobiert, kann aber den Benutzernamen nicht finden in dessen Windows Profil ich angemeldet bin.

Delphi-Quellcode:
function UserName: String;
var User: PChar;
    i: DWord;
begin
  i := 1024;
  user := StrAlloc(Succ(i));
  if GetUserName(User, i) then Result := StrPas(User)
                          else Result := 'unknown';
end;
Diese Funktion gibt mir den Benutzernamen von jenem der das Programm ausführt, aber nicht unbedingt jener bei dem ich angemeldet bin: Wenn ich meine App as "Run as Admin" starte, bekomme ich immer den Namen vom Admin zurück.

Wie kann ich den laufenden Benutzernamen finden ?

Danke
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: Wie findet man den richtigen angemeldeten Windows Benutzer

  Alt 12. Mär 2017, 21:43
Was ist der "laufende" Benutzername?

Der in dessen Kontext das Programm ausgeführt wird? Der, der vor dem Monitor sitzt oder der, der per RemoteSession angemeldet sind?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
DavidKlimas

Registriert seit: 24. Sep 2006
Ort: Arlon, Belgien
71 Beiträge
 
#3

AW: Wie findet man den richtigen angemeldeten Windows Benutzer

  Alt 12. Mär 2017, 21:45
Der bei dem ich bei Windows Angemeldet bin, der der im Startmenu steht, wenn ich unten links auf das Windows zeichen klicke.

Bei Windows heißt es bei GetUserName:
"If the current thread is impersonating another client, the GetUserName function returns the user name of the client that the thread is impersonating."

Geändert von DavidKlimas (12. Mär 2017 um 21:50 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

AW: Wie findet man den richtigen angemeldeten Windows Benutzer

  Alt 12. Mär 2017, 22:02
Versuch mal MSDN-Library durchsuchenWTSGetActiveConsoleSessionId. Existiert allerdings erst seit Vista die API.

Hatte ich damals in folgender Form verwendet, um den aktiven Benutzer aus einem Service heraus abzufragen:
Delphi-Quellcode:
class function TServiceHelper.QueryActiveSessionId: DWord;
var
  WTSGetActiveConsoleSessionId: function: DWord; stdcall;
begin
  Result := 0;
  @WTSGetActiveConsoleSessionId :=
    GetProcAddress(LoadLibrary('kernel32.dll'), 'WTSGetActiveConsoleSessionId');
  if Assigned(@WTSGetActiveConsoleSessionId) then
  begin
    Result := WTSGetActiveConsoleSessionId;
  end;
end;
Edit:
Achso ganz vergessen ... danach brauchst du natürlich noch MSDN-Library durchsuchenWTSQuerySessionInformation mit WTSUserName InfoClass.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl (12. Mär 2017 um 22:05 Uhr)
  Mit Zitat antworten Zitat
DavidKlimas

Registriert seit: 24. Sep 2006
Ort: Arlon, Belgien
71 Beiträge
 
#5

AW: Wie findet man den richtigen angemeldeten Windows Benutzer

  Alt 12. Mär 2017, 22:07
In der Richtung hab ich schon gesucht, konnte aber keine Beispiele zur WTSQuerySessionInformation finden.

Ich probier das mal aus
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

AW: Wie findet man den richtigen angemeldeten Windows Benutzer

  Alt 12. Mär 2017, 22:13
Ich sehe grade, dass es für die aktuelle Sitzung sogar Konstanten gibt. Folgender Aufruf sollte für dich funktionieren:
Delphi-Quellcode:
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';

procedure Test;
const
  WTS_CURRENT_SERVER_HANDLE = 0;
  WTS_CURRENT_SESSION = DWord(-1);
const
  WTSUserName = 5;
var
  Buffer: LPTSTR;
  BytesReturned: DWord;
begin
  if WTSQuerySessionInformationW(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, WTSUserName,
    Buffer, BytesReturned) then
  try
    ShowMessage(Buffer);
  finally
    WTSFreeMemory(Buffer);
  end;
end;
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.712 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Wie findet man den richtigen angemeldeten Windows Benutzer

  Alt 12. Mär 2017, 22:17
Zitat:
WTSGetActiveConsoleSessionId
Und was bekommt man bei einer RemoteSitzung, wenn garkeiner vorm PC sitzt?

PS: Wenn man eine Resource anfordert, dann hat man diese gefälligst auch wieder freizugeben!
LoadLibrary -> FreeLibrary
Aber da man davon ausgehen kann, dass diese DLL (kernel32) immer geladen ist, kann man auch einfach MSDN-Library durchsuchenGetModuleHandle verwenden.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (12. Mär 2017 um 22:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

AW: Wie findet man den richtigen angemeldeten Windows Benutzer

  Alt 12. Mär 2017, 22:22
Und wozu muss das ein Programm wissen?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
DavidKlimas

Registriert seit: 24. Sep 2006
Ort: Arlon, Belgien
71 Beiträge
 
#9

AW: Wie findet man den richtigen angemeldeten Windows Benutzer

  Alt 12. Mär 2017, 22:25
Super, dass klappt alles wie es soll. Danke an euch
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#10

AW: Wie findet man den richtigen angemeldeten Windows Benutzer

  Alt 12. Mär 2017, 22:27
Und was bekommt man bei einer RemoteSitzung, wenn garkeiner vorm PC sitzt?
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

Und wozu muss das ein Programm wissen?
In meinem Falle benötigte ich das Token des angemeldeten Users, um bestimmte Aktionen in seinem Userkontext ausführen zu können.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl (12. Mär 2017 um 22:31 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf