Lista użytkowników systemu

0

Jak pobrać listę wszystkich użytkowników systemu ? tzn.:

Jeśli istnieją inne konta, a użytkownik pracuje w danym momencie na koncie A, to poniższym przykładem można pobrać tą nazwę:

var
  User : String;
  Buff : DWORD;
begin
  Buff := 30;
  SetLength(User, Buff);
  GetUserName(PChar(User), Buff);
  ShowMessage(User);
end;

ale zakładam, że istnieje także konto o nazwie: B i C.

Jak pobrać nazwy tych pozostałych kont ?
Pomyślałem, że można jakoś wydobyć nazwy na podstawie nazw folderów kont
w Documents and Settings, ale czy jest inna możliwość ? [soczek]

0

kiedyś szukałem czegoś o tym i jedyne co znalazłęm to to http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthz/security/lookupaccountname.asp podobno jakoś przy jej pomocy można pobrać listę wszystkich kont ale nie doszedłem do tego :(

0
Misiekd napisał(a)

kiedyś szukałem czegoś o tym i jedyne co znalazłęm (...) ale nie doszedłem do tego :(

Szkoda. Czyli pozostała zabawa z pobraniem nazw folderów w "Documents and Settings"... :-/

0

wiesz co nie chcę, żebyś wychodził z założenia, że się nie da - musi się jakoś dać, przecież windows skądś wie, jakie są konta na danym kompie. Ja po prostu nie mogłem tego znaleźć

0

Pobranie nazw folderów w Documents and Settings nie da wszystkich kont użytkowników i - przede wszystkim - ich "widocznych" nazw.

0

Już lepiej przejąć wyjście polecenia konsolowego:

net users

0

ale kombinujecie...

procedure GetUsers(Users : TStrings; AServer : string);
type
  TUserInfoArr = array[0..(MaxInt - 4) div SizeOf(TUserInfo0)] of TUserInfo0;
var
  UserInfo: Pointer;
  EntriesRead, TotalEntries, ResumeHandle: DWORD;
  Res: DWORD;
  i: Integer;
  FServer : WideString;
begin
  FServer :=  AServer;
  ResumeHandle := 0;
  repeat
    Res := NetUserEnum(PWideChar(FServer), 0, 0, UserInfo, 64 * SizeOf(TUserInfo0),
      EntriesRead, TotalEntries, @ResumeHandle);
    if (Res = NERR_SUCCESS) or (Res = ERROR_MORE_DATA) then
    begin
      for i := 0 to EntriesRead - 1 do
        Users.Add(TUserInfoArr(UserInfo^)[i].usri0_name);
      NetApiBufferFree(UserInfo);
    end;
  until Res <> ERROR_MORE_DATA;
end;
0
ŁF napisał(a)

ale kombinujecie...

ŁF, a ten przykład jak wykorzystać, poza tym sporo błędów:

[Error] Unit1.pas(29): Nie zadeklarowany identyfikator: 'TUserInfo0'
[Error] Unit1.pas(40): Nie zadeklarowany identyfikator: 'NetUserEnum'
[Error] Unit1.pas(42): Nie zadeklarowany identyfikator: 'NERR_SUCCESS'
[Warning] Unit1.pas(42): Porównane znaki i nie-znaki typów - należy rozszerzyć oba argumenty
[Error] Unit1.pas(45): Oczekiwano ')', a jest podany identyfikator 'usri0_name'
[Error] Unit1.pas(47): Oczekiwano 'UNTIL', a jest podane 'END'
[Error] Unit1.pas(48): Oczekiwano deklaracji, a jest podane 'UNTIL'
[Error] Unit1.pas(49): Oczekiwano '.', a jest podane ';'
[Fatal Error] Project1.dpr(5): Nie można skompilować używanego modułu 'Unit1.pas'

1 użytkowników online, w tym zalogowanych: 0, gości: 1