this slowpoke moves

Get User Rights

program UserRights;

{$APPTYPE CONSOLE}

uses
  Windows;

const

  APPNAME = 'UserRights';
  VER = '1.0';
  INFO_TEXT = APPNAME + ' ' + VER +
    ' - asciigen.blogspot.com';

type
  TUserPrivileges = record
    InternalName: string[255];
    Displayname: string[255];
  end;
  TUserPrivilegesArray = array of TUserPrivileges;

function Ansi2OEM(AnsiString: string): string; 
begin
  ANSIString := ANSIString + #0;
  CharToOEM(PChar(ANSIString), @ANSIString[1]);
  Delete(ANSIString, Length(ANSIString), 1);
  Result := ANSIString;
end;

function UserName: string;
var
  Size: DWORD;
begin
  Size := MAX_COMPUTERNAME_LENGTH + 1;
  SetLength(Result, Size);
  if GetUserName(PChar(Result), Size) then
    SetLength(Result, Size)
  else
    Result := '';
end;

function GetCurrentUserPrivileges: TUserPrivilegesArray;
const
  TokenSize = 800; //  (SizeOf(Pointer)=4 *200)
var
  hToken: THandle;
  pTokenInfo: PTOKENPRIVILEGES;
  ReturnLen: Cardinal;
  i: Integer;
  PrivName: PChar;
  DisplayName: PChar;
  NameSize: Cardinal;
  DisplSize: Cardinal;
  LangId: Cardinal;
begin
  if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or
    TOKEN_QUERY, hToken) then
  begin
    GetMem(pTokenInfo, TokenSize);
    try
      if GetTokenInformation(hToken, TokenPrivileges, pTokenInfo, TokenSize,
        ReturnLen) then
      begin
        GetMem(PrivName, 255);
        GetMem(DisplayName, 255);
        try
          setlength(result, pTokenInfo.PrivilegeCount);
          for i := 0 to pTokenInfo.PrivilegeCount - 1 do
          begin
            DisplSize := 255;
            NameSize := 255;
            LookupPrivilegeName(nil, pTokenInfo.Privileges[i].Luid, PrivName,
              Namesize);
            LookupPrivilegeDisplayName(nil, PrivName, DisplayName, DisplSize,
              LangId);
            SetString(result[i].InternalName, PrivName, NameSize);
            SetString(result[i].Displayname, DisplayName, DisplSize);
          end;
        finally
          FreeMem(PrivName, 255);
          FreeMem(DisplayName, 255);
        end;
      end;
    finally
      FreeMem(PTokenInfo, sizeof(PTokenPrivileges));
    end;
  end;
end;

var
  Loop: Cardinal;
  UP: TUserPrivilegesArray;
  s: string;
begin
  writeln(Ansi2OEM('Benutzerrechte für: ') + UserName());
  writeln('');
  UP := GetCurrentUserPrivileges;
  for Loop := 0 to length(UP) - 1 do
  begin
    s := UP[Loop].InternalName + ': ' + Ansi2OEM(UP[Loop].Displayname);
    writeln(s);
  end;
  writeln('');
  writeln(INFO_TEXT);
  readln;
end.


Keine Kommentare:

Kommentar veröffentlichen

Beliebte Posts

Translate