AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

als Administrator ausführen

Ein Thema von Willie1 · begonnen am 30. Jul 2017 · letzter Beitrag vom 1. Aug 2017
Antwort Antwort
Willie1

Registriert seit: 28. Mai 2008
657 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

als Administrator ausführen

  Alt 30. Jul 2017, 19:08
Hallo Leute,
in einem Programm von mir soll ein Zugriff auf die Registry stattfinden, der nur möglich ist, wenn das Programm mit der Option "Als Administrator ausführen"
gestartet wird.
Aus einem Beitrag in StackOverflow habe ich folgende Funktion entwickelt:
Delphi-Quellcode:
 function CheckTokenMembership(TokenHandle: THandle; SidToCheck: PSID; var IsMember: BOOL): BOOL; stdcall; external advapi32;

 function RunAsAdmin : Boolean;
 const
  SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5));
  SECURITY_BUILTIN_DOMAIN_RID = $00000020;
  DOMAIN_ALIAS_RID_ADMINS = $00000220;

 var
  pIdentifierAuthority :TSIDIdentifierAuthority;
  pSid : WinApi.Windows.PSid;
  IsMember : BOOL;
 begin
  pIdentifierAuthority := SECURITY_NT_AUTHORITY;
  Result := AllocateAndInitializeSid(pIdentifierAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, pSid);
  try
    if Result then
      if not CheckTokenMembership(0, pSid, IsMember) then
         Result:= False
      else
         Result:=IsMember;
  finally
     FreeSid(pSid);
  end;
 end;
Sie gibt true zurück, wenn die genannte Option genutzt wird. Bei mir funktioniert sie. Frage:ist das so in Ordnung?

Gruß Willie.
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#2

AW: als Administrator ausführen

  Alt 30. Jul 2017, 19:12
(einmal überarbeitet und umgeworfen)

Ich verwende dazu bisher immer IsUserAnAdmin aus Shell32.dll. Dort wird Deine Variante als bessere Version empfohlen (und sieht dazu noch aus wie von genau jenem Beispiel inspiriert). Klingt also gut.

Geändert von CCRDude (30. Jul 2017 um 19:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.586 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: als Administrator ausführen

  Alt 30. Jul 2017, 21:12
Ich würde schlicht schauen, ob ich auf die Registry entsprechend zugreifen kann.

Hintergrund:
Auf manchen Kundensystemen startet sich z.B. der Process Monitor nach dem Start immer wieder neu, weil er fälschlicherweise davon ausgeht, dass er keine Adminrechte hat. In Wirklichkeit hat er die aber. Da scheinen die Admingruppen anders zu sein.

Oder umgekehrt:
Es reicht doch einem Standarduser die nötigen Zugriffsrechte auf die Registry zu geben. Dann muss das Programm gar nicht als Admin gestartet werden.

Diese pauschale "auf Adminrechte prüfen" macht in meinen Augen genauso wenig Sinn wie die Prüfung auf eine bestimmte Windowsversion, dabei will man eigentlich nur vermeiden, dass ein Feature fehlt oder ähnliches und es dann unter unpassenden Windowsversionen Fehler gibt. Auch da sollte man lieber schauen, ob die Systemfunktion da ist usw.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#4

AW: als Administrator ausführen

  Alt 31. Jul 2017, 13:45
Die Ansätze finde ich besprechungswürdig.

Auf welche Root und Key willst du zugreifen?
Lesend kannst du auf fast alles zugreifen.
Schreibend nur unter HKCU.

Wenn du auf HKLM zugreifen willst, dann kommt das auf die Rechte der Benutzer an.
Diese kommen aus Gruppenzugehörigkeiten in Windows.
Jeder Key in der Registry kann mit einer ACL geschützt werden.

Die meisten Key unterhalb HKLM darf nur ein Mitglied der "local Admins" schreiben. Lesen dürfen Mitglieder von "Users". Es kann sein, dass die Berechtigungen anderes vergeben sind, so dass auch Benutzer z.B. Schreiben dürfen.

Ein Problem ist in Delphi. Wenn du ein Key öffnest wird wenn nichts anderes angegeben wird, direkt mit Schreibrechten geöffnet.
Das erzeugt unter HKLM eine Exception.

Folgendes öffnet den Key zu Lesen (only):
Code:
fregistry:=TRegistry.Create(KEY_READ);
Damit kann dann auch auf HKLM lesend zugegriffen werden ohne "Admin"-Rechte.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#5

AW: als Administrator ausführen

  Alt 31. Jul 2017, 14:19
Um das nochmal aufzugreifen, was schon gesagt wurde.

Nicht auf "bin ich Administrator" prüfen, denn auch einem Admin kann man alle Rechte entziehen.
Sondern auf "hab ich diese oder jene Berechtigung" oder beim Start einfach ausprobieren, ob du zugreifen darfst. Hier muß man aber aufpassen, dass es z.B. nicht eventuell eine Umleitung im Windows gibt ... z.B. könnte man beim Schreiben ins Programmverzeichnis in den VirtualStore umgeleitet werden und denkt dann man darf in C:\Programme schreiben
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
657 Beiträge
 
Delphi 10.1 Berlin Starter
 
#6

AW: als Administrator ausführen

  Alt 1. Aug 2017, 16:35
Hallo,
ich habe entschieden, nichts zu ändern. Ich hatte den Button mit dem Admin-Schild-Icon versehen, die meisten Anwender werden wissen, was es bedeutet. Im anderen Fall erhalten sie meine Fehlermeldung "Der Zugriff auf die Registry ist gescheitert". Trotzdem danke für eure Hinweise bes. gerneric (das wusste ich nicht).
Gruß Willie.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.586 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: als Administrator ausführen

  Alt 1. Aug 2017, 17:01
Ich hatte den Button mit dem Admin-Schild-Icon versehen
Das machen wir auch so, vor allem seit man nur noch am normalen TButton die Eigenschaft ElevationRequired dafür setzen muss.

Bei uns wird dann allerdings die eigene Exe mit Parametern und der Aufforderung als Admin zu starten ausgeführt (ShellExecute + runas als verb), so dass dann im Hintergrund diese zweite Instanz die Zugriffe macht. Diese sieht man nicht, die bekommt nur die nötigen Aktionen übergeben.

Auf die Weise bleibt die Anwendung stehen wie sie ist, auch wenn sie nicht die nötigen Rechte hat, und es sieht für den Benutzer so aus als würde die Anwendung lediglich die Rechte anfordern.
(Tatsächlich geht das auch wirklich so, aber dafür muss man etwas mehr Aufwand betreiben.)
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  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 04:41 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