Autor Beitrag
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 22.07.10 20:45 
user profile icondelfiphan hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Do 22.07.10 20:47 
user profile icondelfiphan hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Fr 23.07.10 06:54 
user profile iconGerd Kayser hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 220



BeitragVerfasst: 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)