home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 November / Chip_2002-11_cd1.bin / zkuste / delphi / unity / d56 / DW / DW10242.ZIP / NTWorks.pas < prev    next >
Pascal/Delphi Source File  |  2002-08-11  |  3KB  |  117 lines

  1. (*------------------------------NTWorks.pas------------------------------
  2.    V1.0.1 - 11.08.2002 - current release (ListDomainUsers excluded)
  3. *------------------------------------------------------------------------*)
  4. unit NTWorks;
  5.  
  6. interface
  7.  
  8. uses Windows, Classes;
  9.  
  10. type
  11.    _USER_INFO_1 = record
  12.      usri1_name: LPWSTR;
  13.      usri1_password: LPWSTR;
  14.      usri1_password_age: DWORD;
  15.      usri1_priv: DWORD;
  16.      usri1_home_dir: LPWSTR;
  17.       usri1_comment: LPWSTR;
  18.      usri1_flags: DWORD;
  19.      usri1_script_path: LPWSTR;
  20.    end;
  21.  
  22.    lpUSER_INFO_1 = ^_USER_INFO_1;
  23.  
  24. function NetUserEnum(ServerName: PWideChar;
  25.    Level,
  26.    Filter: DWORD;
  27.    var Buffer: Pointer;
  28.    PrefMaxLen: DWORD;
  29.    var EntriesRead,
  30.    TotalEntries,
  31.    ResumeHandle: DWORD): Longword; stdcall; external 'netapi32.dll';
  32.  
  33. function NetApiBufferFree(pBuffer: PByte): Longint; stdcall; external
  34.    'netapi32.dll';
  35.  
  36. {procedure ListDomainUsers(const ServerName: String; var List: TStringList);}
  37.  
  38. implementation
  39.  
  40. function IsAdmin: Boolean;
  41. const
  42.   SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority =
  43.     (Value: (0, 0, 0, 0, 0, 5));
  44.   SECURITY_BUILTIN_DOMAIN_RID = $00000020;
  45.   DOMAIN_ALIAS_RID_ADMINS = $00000220;
  46. var
  47.   hAccessToken: THandle;
  48.   ptgGroups: PTokenGroups;
  49.   dwInfoBufferSize: DWORD;
  50.   psidAdministrators: PSID;
  51.   x: Integer;
  52.   bSuccess: BOOL;
  53. begin
  54.   Result   := False;
  55.   bSuccess := OpenThreadToken(GetCurrentThread, TOKEN_QUERY, True,
  56.     hAccessToken);
  57.   if not bSuccess then
  58.   begin
  59.     if GetLastError = ERROR_NO_TOKEN then
  60.       bSuccess := OpenProcessToken(GetCurrentProcess, TOKEN_QUERY,
  61.         hAccessToken);
  62.   end;
  63.   if bSuccess then
  64.   begin
  65.     GetMem(ptgGroups, 1024);
  66.     bSuccess := GetTokenInformation(hAccessToken, TokenGroups,
  67.       ptgGroups, 1024, dwInfoBufferSize);
  68.     CloseHandle(hAccessToken);
  69.     if bSuccess then
  70.     begin
  71.       AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2,
  72.         SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS,
  73.         0, 0, 0, 0, 0, 0, psidAdministrators);
  74.       {$R-}
  75.       for x := 0 to ptgGroups.GroupCount - 1 do
  76.         if EqualSid(psidAdministrators, ptgGroups.Groups[x].Sid) then
  77.         begin
  78.           Result := True;
  79.           Break;
  80.         end;
  81.       {$R+}
  82.       FreeSid(psidAdministrators);
  83.     end;
  84.     FreeMem(ptgGroups);
  85.   end;
  86. end;
  87.  
  88. {procedure ListDomainUsers(const ServerName: String; var List: TStringList);
  89. var
  90.   EntiesRead: DWORD;
  91.   TotalEntries: DWORD;
  92.   UserInfo: lpUSER_INFO_1;
  93.   lpBuffer: Pointer;
  94.   ResumeHandle: DWORD;
  95.   Counter: Integer;
  96.   NetApiStatus: LongWord;
  97. begin
  98. //  ResumeHandle := 0;
  99.   repeat
  100. //     NetApiStatus :=
  101. //     NetUserEnum(PChar('\\NT-Domain'), 1, 0, lpBuffer, 0,EntiesRead, TotalEntries, ResumeHandle);
  102.  TODO 5 -oCodehunter : PWideChar ( ServerName ) als String ⁿbergeben
  103. //    NetApiStatus := NetUserEnum(@WideChar(ServerName), 1, 0, lpBuffer, 0, EntiesRead,
  104. //      TotalEntries, ResumeHandle);
  105.     UserInfo     := lpBuffer;
  106.     for Counter := 0 to EntiesRead - 1 do
  107.     begin
  108.       List.Add(WideCharToString(UserInfo^.usri1_name) + ' --> ' +
  109.         WideCharToString(UserInfo^.usri1_comment));
  110.       Inc(UserInfo);
  111.     end;
  112.     NetApiBufferFree(lpBuffer);
  113.   until (NetApiStatus <> ERROR_MORE_DATA);
  114. end;}
  115.  
  116. end.
  117.