Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Ordnerzugriff besser machen? (https://www.delphipraxis.net/197969-ordnerzugriff-besser-machen.html)

MicMic 23. Sep 2018 18:58

Ordnerzugriff besser machen?
 
Hallo,
ich hab z.B. "C:\PerfLogs" und wenn ich da mit FindFristFile usw. lesen will, bekomme ich Error 5 (Zugriff verweigert). Ich kann somit den Fehlercode entsprechend verarbeiten, die Anwendung nach wunsch vom Benutzer neu mit Adminrechten starten (Als Administrator ausführen) und dann gibt's kein Error 5 mehr und kann den Inhalt lesen. Alles gut.

Jetzt habe ich noch "System Volume Information" (kennt ihr ja alle). Da gibt's auch Error 5 aber mit Adminrechten ebenfalls 5. Das hat natürlich so seinen Grund. Mich interessiert jetzt eigentlich weniger, dass ich da den Inhalt lesen kann, eher will ich einen Unterschied feststellen können.

Also bevor ich die Anwendung mit Adminrechten neu starte, möcht ich wissen ob ein Ordner weiterhin 5 zurück gibt. So könnt man bei dem einem Ordner dem Benutzer wirklich die Möglichkeit anbieten die Anwendung mit Adminrechten neu starten zu lassen und bei dem anderen Ordner dem Benutzer nur mitteilen, dass auf den Ordner kein Zugriff erlaubt ist.

Der Windows Explorer macht das ähnlich... bei PerfLogs hab ich die Möglichkeit und bekomme ein UAC Button und bei "System Volume Information" bekomme ich nur ne Info, dass ich da keinen Zugriffserlaubnis habe (ohne UAC Button).

Wenn das nicht so einfach geht, wäre vielleicht noch die Möglichkeit da, zu prüfen ob die Anwendung schon mit Adminrechten läuft. So könnte man dann wenigstens im nachhinein die Benutzer die Info geben, dass auf dem Ordner mit Adminrechten ebenfalls kein Zugriff möglich ist. Zuvor wäre es aber besser, damit man nicht umsonst die Anwendung mit Adminrechten startet.


Micha

KodeZwerg 23. Sep 2018 19:03

AW: Ordnerzugriff besser machen?
 
Wie lautet die Frage?

Delphi.Narium 23. Sep 2018 19:18

AW: Ordnerzugriff besser machen?
 
Die Rechtevergabe der Ordner unterscheidet sich voneinander.

Darüber könnte man abfragen, ob es mit anderen Rechten weitergehen könnte oder nicht?

Weiterforschen eventuell hier:
https://www.delphipraxis.net/537485-post.html#625343
https://www.delphipraxis.net/364933-post.html#432800

MicMic 23. Sep 2018 20:06

AW: Ordnerzugriff besser machen?
 
Scheint wohl nicht so einfach zu sein.
Ich habe jedenfalls was gefunden, um zu prüfen ob die Anwendung mit Admin Rechten läuft oder nicht
Code:
procedure TForm.Button1Click(Sender: TObject);
type
  TIsUserAnAdminFunc = function (): BOOL; stdcall;
var
  Shell32DLL: THandle;
  IsUserAnAdminFunc: TIsUserAnAdminFunc;
begin
  Shell32DLL := LoadLibrary('shell32.dll');
  try
    if Shell32DLL <> 0 then
    begin
      @IsUserAnAdminFunc := GetProcAddress(Shell32DLL, 'IsUserAnAdmin');
      if Assigned(@IsUserAnAdminFunc) then
        if IsUserAnAdminFunc then
          ShowMessage('Sie haben Adminrechte.')
          else ShowMessage('Keine Adminrechte.')
    end;
  finally
    FreeLibrary(Shell32DLL);
  end;
end;
Das ist ja schon mal was. Vielleicht für den einen oder anderen auch brauchbar. So kann ich dann in meinem Fall bei "System Volume Information" oder auch bei anderen Ordnern die Error 5 (im Admin Modus) zurück liefern, dem Benutzer nur ne Info geben (Zugriff verweigert) und nicht die Frage "Anwendung mit Admin-Rechten neu starten?" hinterlassen. Die Frage "Anwendung mit Admin-Rechten neu starten?" halt nur beim ersten Mal, wenn die Anwendung noch nicht mit Admin-Rechten läuft. Wäre dann zwar 1x überflüssig aber im nachhinein dann wenigstens zu unterscheiden.

@KodeZwerg Die Frage ist eigentlich "Also bevor ich die Anwendung mit Adminrechten neu starte, möcht ich wissen ob ein Ordner weiterhin 5 zurück gibt." Wie "Delphi.Narium" schon schrieb "Die Rechtevergabe der Ordner unterscheidet sich voneinander." Danke für die Links @Delphi.Narium. Da muss ich noch mal genau schauen.

Micha

KodeZwerg 23. Sep 2018 22:12

AW: Ordnerzugriff besser machen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zum Thema Admin-Rechte, ich pack Dir mal im Anhang eine, für mich jedenfalls, sehr geniale Unit rein, damit kannst Du auch zur Laufzeit ohne App-Neu-Start kurz für ne Aktion Dir die passenden Rechte einforden oder checken in was für einen Modus Deine App läuft, auch so ein tollen Schild-Button bekommst Du damit easy gebacken.
Seit dem ich die habe bin ich mit diesem Thema für mich durch, mehr brauche ich nicht.

Viel Spaß damit, ein mini Beispiel wie man's verwendet legte der Erfinder bei.

Sherlock 24. Sep 2018 07:54

AW: Ordnerzugriff besser machen?
 
Meines Wissens ist "System Volume Information" der einzige Ordner der selbst durch Admin nicht geöffnet werden darf. Eine Abfrage des Ordnernamens dürfte also genügen.

Sherlock

p80286 24. Sep 2018 08:21

AW: Ordnerzugriff besser machen?
 
Wenn ein Benutzer/Programm keine Zugriffsrechte auf ein(e) Verzeichnis/Datei hat, könnte es sein, daß es dafür Gründe gibt.
Mit der Brechstange Administrator dann die Rechtevergabe auszuhebeln, halte ich für suboptimal. Eine Nachricht daß die nötige Zugriffsberechtigung fehlt, sollte ausreichend sein. Dann kann der Admin immer noch die notwendigen Berechtigungen erteilen.

Gruß
K-H

MicMic 25. Sep 2018 14:18

AW: Ordnerzugriff besser machen?
 
Zitat:

Zitat von KodeZwerg (Beitrag 1413945)
Zum Thema Admin-Rechte, ich pack Dir mal im Anhang eine, für mich jedenfalls, sehr geniale Unit rein, damit kannst Du auch zur Laufzeit ohne App-Neu-Start kurz für ne Aktion Dir die passenden Rechte einforden oder checken in was für einen Modus Deine App läuft, auch so ein tollen Schild-Button bekommst Du damit easy gebacken.
Seit dem ich die habe bin ich mit diesem Thema für mich durch, mehr brauche ich nicht.

Viel Spaß damit, ein mini Beispiel wie man's verwendet legte der Erfinder bei.

Habe es mir nun angeschaut. Muss es aber noch mal entsprechend für meinen Anwendungszweck anpassen und schauen ob alles so geht wie ich möchte.
Da wäre dann wenigstens ein 2. Start der Anwendung nicht nötig. Danke für's hochladen

Micha

MicMic 25. Sep 2018 14:20

AW: Ordnerzugriff besser machen?
 
Zitat:

Zitat von Sherlock (Beitrag 1413947)
Meines Wissens ist "System Volume Information" der einzige Ordner der selbst durch Admin nicht geöffnet werden darf. Eine Abfrage des Ordnernamens dürfte also genügen.

Sherlock

Davon darf man aber nie ausgehen... wäre falsch dies so zu prüfen.
Micha

KodeZwerg 25. Sep 2018 18:55

AW: Ordnerzugriff besser machen?
 
Freut mich das Dir die Unit gefällt, andere langen auch gut zu wie ich sehe, dafür ists ja da ^_^.

Man muss dabei halt beachten, alles wofür Du Rechte einforderst, muss in einen eigenen Code-Abschnitt rein, total isoliert vom Rest Source, also "elevated" hat keinen internen Zugriff auf was auch immer Dein Project so alles bereitstellt. Ich selbst fühle mich Pudelwohl damit und habe bis jetzt noch nichts negatives damit Erfahren können.

Am wichtigsten, was oft übersehen wird, ist der INITIALISATION/FINALISATION Abschnitt, das ist praktisch der Motor der alles am laufen hält.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:00 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