welche rechte habe ich?



  • hallo, kann mir mal jemand sagen, wie ich in windows (xp) mittels irgendwelcher apis rausbekomme, welche rechte ich momentan besitzte? ich will eigentlich nur wissen, ob ich ein normaler user bin oder amdinistrator.
    ein code schnippel wäre super.

    gruß
    mc_ginley



  • Also ich weis zwar keine Code-Schnipsel für dich aber soweit ichw eis, gibts für Wartungsarbeiten einen Admin zugangd er Admin heist, den erreicht man aber nur wenn man die Modusauswahl hat, ansonsten is jeder User ein Admin bis man es umstellt, gilt vor allem für den ersten User der is immer Admin.



  • Ich habe hier leider nur etwas Delphi Code, aber die APIs sind ja die gleichen:

    function GetAdminSid: PSID;
    const
      // bekannte SIDs ... (WinNT.h)
      SECURITY_NT_AUTHORITY  : TSIDIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5));
      // bekannte RIDs ... (WinNT.h)
      SECURITY_BUILTIN_DOMAIN_RID: DWORD = $00000020;
      DOMAIN_ALIAS_RID_ADMINS: DWORD = $00000220;
    begin
      Result := nil;
      AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2,
        SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS,
        0, 0, 0, 0, 0, 0, Result);
    end;
    
    ////////////////////////////////////////////////////////////////////////////////
    //
    //  IsAdmin
    //    Autor: Nico Bendlin
    
    function IsAdmin: LongBool;
    var
      TokenHandle            : THandle;
      ReturnLength           : DWORD;
      TokenInformation       : PTokenGroups;
      AdminSid               : PSID;
      Loop                   : Integer;
    begin
      Result := False;
      TokenHandle := 0;
      if OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, TokenHandle) then
      try
        ReturnLength := 0;
        GetTokenInformation(TokenHandle, TokenGroups, nil, 0, ReturnLength);
        TokenInformation := GetMemory(ReturnLength);
        if Assigned(TokenInformation) then
        try
          if GetTokenInformation(TokenHandle, TokenGroups, TokenInformation,
            ReturnLength, ReturnLength) then
          begin
            AdminSid := GetAdminSid;
            for Loop := 0 to TokenInformation^.GroupCount - 1 do
            begin
              if EqualSid(TokenInformation^.Groups[Loop].Sid, AdminSid) then
              begin
                Result := True;
                Break;
              end;
            end;
            FreeSid(AdminSid);
          end;
        finally
          FreeMemory(TokenInformation);
        end;
      finally
        CloseHandle(TokenHandle);
      end;
    end;
    

Anmelden zum Antworten