AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Vista: Administratorkonto oder reelle elevated Adminrechte?
Thema durchsuchen
Ansicht
Themen-Optionen

Vista: Administratorkonto oder reelle elevated Adminrechte?

Ein Thema von Zacherl · begonnen am 1. Sep 2008 · letzter Beitrag vom 2. Sep 2008
Antwort Antwort
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

Vista: Administratorkonto oder reelle elevated Adminrechte?

  Alt 1. Sep 2008, 20:33
Hey,

gibt es eine einfache Möglichkeit unter Vista zu testen, ob meine Anwendung wirklich momentan mit Adminrechten läuft? Ich teste erst, ob der Benutzer ein Administrator ist. Ist dies der Fall ist ja aber noch nicht sichergestellt, dass er die Anwendung über die UAC mit wirklichen Adminrechten gestartet hat.

Gruß Zacherl
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Vista: Administratorkonto oder reelle elevated Adminrech

  Alt 1. Sep 2008, 20:39
Das müsste sich am Token ablesen lassen. Probiere mal IsTokenRestricted.
Oder besser: Hole dir mit GetTokenInformation die Gruppen und prüfe die Administratorengruppe auf das Flag SE_GROUP_USE_FOR_DENY_ONLY.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

Re: Vista: Administratorkonto oder reelle elevated Adminrech

  Alt 1. Sep 2008, 21:11
Hast du einen Beispielcode, der möglichst ohne die JEDIs auskommt?
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#4

Re: Vista: Administratorkonto oder reelle elevated Adminrech

  Alt 1. Sep 2008, 21:13
Warum denn ohne JEDIs?
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

Re: Vista: Administratorkonto oder reelle elevated Adminrech

  Alt 1. Sep 2008, 21:14
Wegen nonVCL ..
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Vista: Administratorkonto oder reelle elevated Adminrech

  Alt 1. Sep 2008, 21:15
Zitat von Dezipaitor:
Warum denn ohne JEDIs?
Weil man für eine Funktion nicht diese ganzen aufgeblähten Jedis installieren möchte.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#7

Re: Vista: Administratorkonto oder reelle elevated Adminrech

  Alt 1. Sep 2008, 23:51
@Zacherl:
1. Okay, wenn ohne alles, dann nimm CheckTokenMembership. Ich glaube den C Quelltext kannst du auch noch alleine übersetzen.

2. nonVCL, gutes Stichwort. JWSCL läuft jetzt ohne VCL. Nur RTL ist drin. Verfügbar ist es jedoch im Moment nur im SVN Trunk.

@Luckie: Ich ziehe jederzeit Qualität der Quantität vor! Aber letzendlich geht man immer ein Risiko ein, wenn man fremden Code verwendet. Das mag jetzt zwar nicht auf den einfachen Code von CheckTokenMembership zutreffen, aber es trifft sehr wohl auf die ganzen Token und ACL Quelltexte zu. Wenn man gerade damit anfängt und nicht weiß, worum es geht, ist es sehr problematisch.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#8

Re: Vista: Administratorkonto oder reelle elevated Adminrech

  Alt 2. Sep 2008, 09:30
Hab mal das hier aus verschiedenen Funktionen, die ich hier im Forum gefunden habe gebastelt und mit Hilfe eurer Tips. Vielleicht hilft es ja jemandem:

Delphi-Quellcode:
type
  TAdminPrivileges = (
    apLimited,
    apAdmin,
    apFullAdmin
  );

function HasAdminPrivileges: TAdminPrivileges;

function GetAdminSid: PSID;
const
  SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority =
    (Value: (0, 0, 0, 0, 0, 5));
  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;

const
  SE_GROUP_USE_FOR_DENY_ONLY = $00000010;

var
  TokenHandle : THandle;
  ReturnLength : DWORD;
  TokenInformation : PTokenGroups;
  AdminSid : PSID;
  Loop : Integer;
begin
  Result := apLimited;
  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
            if (TokenInformation^.Groups[Loop].Attributes and
              SE_GROUP_USE_FOR_DENY_ONLY) = SE_GROUP_USE_FOR_DENY_ONLY then
            begin
              Result := apAdmin;
            end
              else
            begin
              Result := apFullAdmin;
            end;
            Break;
          end;
        end;
        FreeSid(AdminSid);
      end;
    finally
      FreeMemory(TokenInformation);
    end;
  finally
    CloseHandle(TokenHandle);
  end;
end;
Diese Funktion gibt unter XP entweder apLimited für eingeschränkte Rechte oder apFullAdmin für Administratorrechte zurück. Ab Vista wird apAdmin zurückgegeben, wenn es sich um einen Administrator handelt, das aktuelle Programm aber nicht per UAC elevated gestartet wurde. Läuft das Programm mit uneingeschränkten Adminrechten, so wird hier apFullAdmin zurückgegeben.

Gruß Zacherl
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#9

Re: Vista: Administratorkonto oder reelle elevated Adminrech

  Alt 2. Sep 2008, 10:55
Nichts anderes macht die Funktion CheckTokenMembership!
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#10

Re: Vista: Administratorkonto oder reelle elevated Adminrech

  Alt 2. Sep 2008, 16:47
Zitat von Dezipaitor:
Nichts anderes macht die Funktion CheckTokenMembership!
Ja ich weiß, aber da die API in der Windows.pas bei meinem Delphi irgendwie nicht importiert wird, hab ich schnell den anderen Code als Grundlage genommen. Ist ja eh beides das selbe ..
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz