Autor |
Beitrag |
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Mi 21.07.10 18:18
Hallo!
Ich verschiebe eine Datei mittels MoveFile/MoveFileEx von Ordner A zu Ordner B.
Ordner A und Ordner B haben andere Berechtigungen. Z.B. kann User X auf Ordner B zugreifen, nicht aber auf Ordner A.
Wenn ich eine Datei verschiebe, dann gehen die Permissions mit. D.h. eine Datei, die in Ordner A erzeugt wurde und nach Ordner B verschoben wurde heisst nicht automatisch, dass User X nun plötzlich auf die Datei zugreifen kann.
Hat jemand so eine Funktion, welcher die Permissions einer Datei den Permissions des Ordners in dem es liegt, anpasst?
Danke
Gruss
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Do 22.07.10 15:50
Eigentlich müsste man doch nur die ACL der Datei zurücksetzen, so dass wieder die geerbten Einstellungen zählen. Oder?
Kann dir leider keine Funktion direkt sagen, aber vielleicht war ja ein googlebares Stichwort dabei.
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 22.07.10 20:45
delfiphan hat folgendes geschrieben : | Wenn ich eine Datei verschiebe, dann gehen die Permissions mit. D.h. eine Datei, die in Ordner A erzeugt wurde und nach Ordner B verschoben wurde heisst nicht automatisch, dass User X nun plötzlich auf die Datei zugreifen kann. |
Das kommt darauf an wie die Sicherheitseinstellungen eingestellt sind, d.h. ob die vereinfachten Sicherheitseinstellungen im Windows Explorer aktiviert sind oder nicht. Das hat AFAIK leider Einfluss auf die Dateioperationen der API.
Genauso kannst du per Policy explizit festlegen was beim Verschieben einer Datei mit der ACL passieren soll. // EDIT: MoveSecurityAttributes ist das.
Die Frage ist aber warum du MoveFile benutzt statt dem viel mächtigeren SHFileOperation.
Dort brauchst du nur FOF_NOCOPYSECURITYATTRIBUTES als Flag setzen und schon werden die Attribute des Zielortes gesetzt.
Allerdings nur, wenn in der Policy nicht explizit eine andere Einstellung gesetzt ist.
Ja, und dann gibt es noch die Möglichkeit mit SetNamedSecurityInfo eine leere ACL zu setzen um die mit verschobene ACL durch die des Zielortes zu ersetzen.
Zuletzt bearbeitet von jaenicke am Do 22.07.10 20:48, insgesamt 1-mal bearbeitet
Für diesen Beitrag haben gedankt: delfiphan
|
|
Gerd Kayser
      
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Do 22.07.10 20:47
delfiphan hat folgendes geschrieben : | Hat jemand so eine Funktion, welcher die Permissions einer Datei den Permissions des Ordners in dem es liegt, anpasst? |
Laut MSDN: "By default, an object inherits permissions from its parent object, either at the time of creation or when it is copied or moved to its parent folder. The only exception to this rule occurs when you move an object to a different folder on the same volume. In this case, the original permissions are retained."
Also würde ich es anstatt mit Verschieben mal mit Kopieren und anschließendem Löschen der Quelldatei versuchen.
|
|
delfiphan 
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Fr 23.07.10 06:54
Gerd Kayser hat folgendes geschrieben : | Also würde ich es anstatt mit Verschieben mal mit Kopieren und anschließendem Löschen der Quelldatei versuchen. |
Ist keine Option für mich. Sind GB grosse Files.
Ich hab mir jetzt eine kleine Hilfsfunktion gebaut, die mit GetNamedSecurityInfo/SetNamedSecurityInfo funktioniert.
SHFileOperation stimmt, ginge auch. Ist halt so ne Shell GUI Funktion (über VPN/Internet vielleicht ein merkbarer Performance-Unterschied: wenn ich von Hand per Drag&Drop move, dann geht das um einiges länger als per Eingabeaufforderung und "move" - ich denke die Shell Funktion macht noch ein halbes Duzend Abklärungen bevor da wirklich gemoved wird), aber scheint schlussendlich wirklich einfacher zu sein. Ich werde das vermutlich noch umbauen, wenn das von der Performance (VPN/Internet) keinen grossen Unterschied macht.
Danke!
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 23.07.10 22:02
Wenn du die GUI bei der Funktion abschaltest, sollte es kaum einen Unterschied geben, insbesondere bei wenigen großen Dateien. Jedenfalls habe ich da bisher keine Geschwindigkeitsprobleme gehabt.
Wenn du es mit dem Setzen der ACL via SetNamedSecurityInfo bereits fertig hast, sehe ich aber auch keinen Grund das auf SHFileOperation umzustellen.
|
|
Dezipaitor
      
Beiträge: 220
|
Verfasst: Mi 28.07.10 00:54
Hmm, ja ist schon etwas komplizierter. Du musst alle expliziten ACE Einträge löschen und den DACL protected status entfernen.
Wenn ich mich noch recht erinnere, könnte man aber auch einfach alles entfernen und dann den DACL protected status entfernen. Die Vererbung sollte dann automatisch funktionieren.
_________________ Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: blog.delphi-jedi.net = JEDI API LIB & Windows Security Code Library (JWSCL)
|
|
|