Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Überprüfen, ob Adminrechte zum Zugriff auf Ordner (https://www.delphipraxis.net/100966-ueberpruefen-ob-adminrechte-zum-zugriff-auf-ordner.html)

xZise 6. Okt 2007 09:13


Überprüfen, ob Adminrechte zum Zugriff auf Ordner
 
Hi DP,
ich wollte Fragen wie man überprüft, ob man zum Zugriff auf einen Ordner Adminrechte benötigt, und wenn ja, ob man diese auch hat?

MfG
xZise

gsh 6. Okt 2007 10:27

Re: Überprüfen, ob Adminrechte zum Zugriff auf Ordner
 
hmm es müsste eigentlich sicher eine API geben wodurch du dir die sicherheitseinstllungen einses ordners anschauen kannst.
dann musst du nur noch den aktuellen benutzernamen ermittlen und schauen ob er die nötigen rechte hat


was einfacher aber radikaler wäre: Mit CreateFile oder so versuchen eine datei mit schreibrechten anzulegen => Fehler = keine rechte

Dezipaitor 6. Okt 2007 10:29

Re: Überprüfen, ob Adminrechte zum Zugriff auf Ordner
 
Die AccessControlList (ACL) bestimmt wer welche Rechte auf einen Ordner hat.
Ein Administrator hat nur den Vorteil, dass er sich Rechte daran verschaffen kann, indem er den Besitz des Ordners übernimmt. Denn der Besitzer kann immer die ACL anpassen und sich Rechte verschaffen.

Oder meinst du Vista? In Vista ist das MandatoryLevel eingeführt worden. Ordner besitzen ein zusätzliches Level, welches Niedrig, Normal und Hoch sein kann. Benutzer und dessen Prozesse (der Explorer), die selbst ein solches Level haben, können nur auf Daten zugreifen, die ein Level gleich oder kleiner besitzen. Dieses Level kann derzeit nur über die Kommandozeile geändert werden - sry, habe aber den Befehl vergessen. Glaube es war irgendwas mit iacacls oder so.

Wenn du tatsächlich überprüfen willst, welche Rechte ein Ordner hast, dann kann ich nur die Msdn und die Funktion "GetFileSecurity" empfehlen. Es ist leider etwas kompliziert und erfordert Zeigermanipulation auf C-Ebene, jedoch nicht unmachbar.

Am einfachsten ist es, indem du versuchst mit CreateFile (siehe MSDN) den Ordner zu öffnen. Glaube man muss das BACKUP_SEMANTICS Flag (oder so) darauf ansetzen, um ein Handle zum Ordner zu bekommen. Wenn der Versuch fehlschlägt, wegen Rechteproblem, dann sollte GetLastError den Wert 5 haben (Access denied).

Luckie 6. Okt 2007 12:28

Re: Überprüfen, ob Adminrechte zum Zugriff auf Ordner
 
So http://www.michael-puff.de/Developer...ileAccess.html könntest du schon mal überprüfen, ob du die Rechte hast, die du benötigst.

xZise 6. Okt 2007 12:37

Re: Überprüfen, ob Adminrechte zum Zugriff auf Ordner
 
Okay, dann werde ich wohl CreateFile benutzen :) Das scheint am besten zu gehen.

Übrigens sagt der Benutzername (zumindest ab WinXP) nichts mehr darüber aus, ob man Zugriff hat, weil man könnte die Anwendung ja als Admin ausführen lassen ;)

Luckie 6. Okt 2007 12:41

Re: Überprüfen, ob Adminrechte zum Zugriff auf Ordner
 
Das hat der Benutzername noch nie. Oder steht irgendwo geschrieben, dass nur Benutzer mit dem Namen Administrator administrative Rechte haben können?

Dezipaitor 6. Okt 2007 13:02

Re: Überprüfen, ob Adminrechte zum Zugriff auf Ordner
 
Man kann den Benutzer Administrator auch umbenennen.
Was man nicht umbenennen kann ist die Gruppe Administratoren. Zumindest habe ich keine Möglichkeit gesehen, oder man muss irgendwo tief in der Registry das machen.

Rechte die ein Benutzer oder Gruppe hat, wird durch Privilegien beschrieben. Mit "secpool.msc" kann man die Privilegien ändern.
Die Privilegien haben jedoch keinen großen Einfluss auf ein Dateisystem. Also welche Dateien der Benutzer ansehen darf oder auch nicht.
Viel mehr ist es die DACL, die bestimmt, wer was darf.
Im Moment sehe ich nur zwei Privilegien, die einen indirekten Einfluss auf das Dateisystem haben und ein Privileg was direkt beeinflusst:

Indirekter Einfluss, da normalerweise nicht aktiv :
1. SeTakeOwnerShipPrivileg - Übernehmen eines Objekt als neuer Besitzer. Nur der Benutzername ist als neuer Besitzer erlaubt (mit Ausnahmen).
2. SeRestorePrivileg - Beliebige Benutzer können als neuer Besitzer übernommen werden

Direkter Einfluss, da normalerweise aktiv:
1. SeChangeNotifyPrivilege - Wenn aktiv, reicht es aus, dass man auf eine Datei zugriff hat, auch wenn ein übergeordnetes Objekt dies verhindert.
So ist es zum Beispiel möglich nur eine Datei für einen Benutzer freizugeben und ihm den direkten Pfad zu übermitteln, ohne dass dieser andere Dateien
lesen oder sehen kann.

xZise 6. Okt 2007 14:37

Re: Überprüfen, ob Adminrechte zum Zugriff auf Ordner
 
Zitat:

Zitat von Luckie
Das hat der Benutzername noch nie. Oder steht irgendwo geschrieben, dass nur Benutzer mit dem Namen Administrator administrative Rechte haben können?

Das ist ja schon fast Haarspalterei !

Was ich meine, und dabei niemand langweilen wollte ist,
Zitat:

dass ein Benutzer ohne administrative Rechte auf dem Betriebssystem, mithilfe des Befehls "Ausführen als..." einen Programm administrative Rechte in einer Umgebung ohne administrative Rechts starten kann. Die Fähigkeit administrative Rechte an ein Programmm zu übergeben in einer nicht adiministrativen Umgebung ist mindestens seit Widnows XP verfügbar.
Ich hoffe mal, jetzt ist klar was ich meine!

Dezipaitor 6. Okt 2007 15:59

Re: Überprüfen, ob Adminrechte zum Zugriff auf Ordner
 
Jetzt verstehe ich garnet mehr was du willst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:41 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz