AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi LsaEnumerateLogonSessions gibt nicht eingeloggte User in Liste aus
Thema durchsuchen
Ansicht
Themen-Optionen

LsaEnumerateLogonSessions gibt nicht eingeloggte User in Liste aus

Offene Frage von "virus82"
Ein Thema von virus82 · begonnen am 6. Jan 2012 · letzter Beitrag vom 9. Jan 2012
 
ASM

Registriert seit: 15. Aug 2004
165 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: LsaEnumerateLogonSessions gibt nicht eingeloggte User in Liste aus

  Alt 6. Jan 2012, 22:12
Ich möchte gern alle Sessions der zur Zeit angemeldeten Benutzer mit Namen und Uhrzeit des Logons ermittel. Und LsaEnumerateLogonSessions liefert mir leider auch Sessions, deren Benutzer schon längst abgemeldet sind.
Mit Hilfe der NetAPI Funktion NetWkstaUserEnum() geht es.
Hier noch ohne Uhrzeit des Logins; aber die lässt sich - etwas aufwändiger zwar - anders ermitteln:
Code:
type
  TWKSTA_USER_INFO_0 = record
    username: PWideChar;
  end;
  PTWKSTA_USER_INFO_0 = ^TWKSTA_USER_INFO_0;

function NetWkstaUserEnum(servername: PWideChar; level: DWORD; var bufptr: Pointer;
  prefmaxlen: DWORD; var entriesread: PDWord; var totalentries: PDWord;
  var resumehandle: PDWord): Longint;
  stdcall; external 'netapi32.dll' Name 'NetWkstaUserEnum';

function EnumNetUsers(Users: TStrings): TWKSTA_USER_INFO_0;
const
  STR_ERROR_ACCESS_DENIED = 'User does not have access to the requested information.';
  STR_ERROR_MORE_DATA = 'Specify a buffer large enough to receive all entries.';
  STR_ERROR_INVALID_LEVEL = 'Parameter "level" has been set invalid.';
var
  UI: PTWKSTA_USER_INFO_0;
  HostInfo: Pointer;
  ElTotal: PDWord;
  ElCount: PDWord;
  Resume: PDWord;
  Error: Longint;
  i: Integer;
begin
  Resume := 0;
  NetWkstaUserEnum(nil, 0, HostInfo, 0, ElCount, ElTotal, Resume);
  Error := NetWkstaUserEnum(nil, 0, HostInfo, 256 * Integer(ElTotal),
    ElCount, ElTotal, Resume);
  case Error of
    ERROR_ACCESS_DENIED: Result.UserName := STR_ERROR_ACCESS_DENIED;
    ERROR_MORE_DATA: Result.UserName := STR_ERROR_MORE_DATA;
    ERROR_INVALID_LEVEL: Result.UserName := STR_ERROR_INVALID_LEVEL;
  else
    if HostInfo <> nil then
    begin
      Result := TWKSTA_USER_INFO_0(HostInfo^);
      UI := PTWKSTA_USER_INFO_0(HostInfo);
      for i := 1 to DWord(ElCount) do
      begin
        Users.Add(UI^.username);
        inc(UI);
      end;
    end
    else
    begin
      Result.UserName := '<???>';
    end;
  end;
end;
Beispiel:
Code:
procedure TForm1.Button1Click(Sender: TObject);
var
  HostInfo: TWKSTA_USER_INFO_0;
  ActiveUsers: TStringlist;
  i: integer;
  wrkstr: string;
begin
  ActiveUsers := TStringlist.Create;
  try
    HostInfo := EnumNetUsers(ActiveUsers);
    wrkstr := 'Users currently logged in:'#13#10;
    for i := 1 to ActiveUsers.count - 1 do
      wrkstr := wrkstr + ActiveUsers[i] + #13#10;
    Showmessage(wrkstr);
  finally
    ActiveUsers.Free;
  end;
end;
  Mit Zitat antworten Zitat
 

 

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:04 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