Entwickler-Ecke

Dateizugriff - Netzlaufwerke auslesen mit erhöhten Rechten?


hydemarie - Di 02.12.25 11:45
Titel: Netzlaufwerke auslesen mit erhöhten Rechten?
Ahoi,

mal ein etwas kryptisches Problem. Eigentlich geht's um Lazarus, aber in "Dateizugriff" passte es m.E. besser rein und so groß sind die syntaktischen Unterschiede ja nicht mehr. (Sonst notfalls in Free Pascal verschieben bitte.)

Was ich vorhabe:



Ich scheitere derzeit noch. Zwei Szenarien habe ich ausprobiert:

  1. for A:\ to Z:\ [https://wiki.lazarus.freepascal.org/Windows_Programming_Tips#Listing_all_available_drives]: FindAllFiles() behauptet, auf V:\ seien keine Dateien. Vielleicht, weil V:\ als DRIVE_NO_ROOT_DIR erkannt wird? (Warum?)
  2. GetLogicalDriveStrings [https://wiki.freepascal.org/Identify_Drives/de]: V:\ taucht gar nicht erst auf.


Ich schließe nicht aus, dass der erste Ansatz besser war. Aber wie bekomme ich die Anwendung jetzt dazu, dass FindAllFiles() funktioniert?


jaenicke - Mi 03.12.25 11:08

Du musst dein Programm ebenfalls als Admin starten, wenn das Netzlaufwerk nur im Admin-Kontext gemappt wurde. Im Benutzerkontext ohne Adminrechte existiert es dann schlicht nicht.


hydemarie - Do 04.12.25 02:02

Die Anwendung läuft automatisch mit erhöhten Rechten, das ist bereits in die .exe hineinkompiliert. Daran liegt es also nicht (oder?).


jaenicke - Do 04.12.25 07:23

Ich habe das nicht getestet. Da bei der Anmeldung das Standardnutzer und Admintoken generiert werden, hätte ich gedacht, dass beide in der gleichen Umgebung laufen. Ich bin mir aber nicht sicher, wie lange das Netzlaufwerk lebt, wenn die Session nach dem net use wieder beendet wird.

Warum verwendest du eigentlich nicht einfach UNC-Pfade? Dann gibt es das Problem gar nicht erst.


hydemarie - Do 04.12.25 11:40

Das Netzlaufwerk ist da und im Explorer komme ich auch ran. Das ist ja das Merkwürdige. Bei lokal angeschlossenen Festplatten funktioniert der Code.

Meine Anwendung ist nicht nur dafür da, dass ich damit klarkomme, das macht die Sache schwieriger. Ich muss also in jedem Fall die Laufwerksbuchstaben abbilden.