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/)
-   -   Delphi NTFS - Dateiberechtigungen übernehmen (https://www.delphipraxis.net/168584-ntfs-dateiberechtigungen-uebernehmen.html)

Pentium 80486 29. Mai 2012 18:47

NTFS - Dateiberechtigungen übernehmen
 
Hallo,

derzeit verwende ich, da es die für meine Zwecke schnellste Methode ist, SHFileOpStruc, um Dateien zu kopieren.
Leider gehen dabei die Werte der Sicherheitsattribute verloren.

Der Code ist kein Geheimnis und Standard:
Delphi-Quellcode:
function copyFileEx(const aSourceFile, aDestFile: string): Boolean;
var
 fos: TSHFileOpStruct;
begin
 ZeroMemory(@fos, SizeOf(fos));

 with fos do
  begin
   wFunc := FO_COPY;
   fFlags := FOF_NO_UI;
   pFrom := PChar(aSourceFile + #0);
   pTo := PChar(aDestFile)
  end;

 Result := (0 = SHFileOperation(fos));
end;

Wie genau muss ich eine Datei kopieren, damit auch die Sicherheitsattribute und dessen eingestellten Werte übertragen werden?

daywalker9 29. Mai 2012 18:59

AW: NTFS - Dateiberechtigungen übernehmen
 
Die sollten normalerweise mitkommen.

Bei TSHFileOPStruct gibt es nur ein Flag um das abzuschalten:

Delphi-Quellcode:
FOF_NOCOPYSECURITYATTRIBS

Dalai 29. Mai 2012 19:02

AW: NTFS - Dateiberechtigungen übernehmen
 
Zitat:

Zitat von daywalker9 (Beitrag 1168615)
Die sollten normalerweise mitkommen.

Nein. Normalerweise werden die Rechte vom Zielverzeichnis übernommen, weil standardmäßig die Vererbung aktiviert ist.

Ich bin mir nicht ganz sicher, aber ich glaube mich zu erinnern, dass Programme wie Total Commander die Berechtigungen von der Quelle auslesen und auf das Ziel übertragen.

MfG Dalai

daywalker9 29. Mai 2012 19:15

AW: NTFS - Dateiberechtigungen übernehmen
 
Zitat:

Zitat von Dalai (Beitrag 1168617)
Zitat:

Zitat von daywalker9 (Beitrag 1168615)
Die sollten normalerweise mitkommen.

Nein. Normalerweise werden die Rechte vom Zielverzeichnis übernommen, weil standardmäßig die Vererbung aktiviert ist.

Und welchen Sinn ergibt dann das Flag, welches man in der Beschreibung findet? ;-)

himitsu 29. Mai 2012 19:28

AW: NTFS - Dateiberechtigungen übernehmen
 
Falls das Flag nichts das gewünschte Ergebnis liefert:


Eventuell manuell über MSDN-Library durchsuchenCreateFile kopieren.
Neue Datei erstellen, das Original als Template verwenden und dann den Inhalt noch rüberschaufeln.

Was dabei nun genau alles kopiert wird, weiß ich aber nicht.

Ansonsten gibt's in den Jedi die Abteilung der Security-API, also Rechte auslesen und nach dem Kopieren entsprechend setzen.

Pentium 80486 29. Mai 2012 19:45

AW: NTFS - Dateiberechtigungen übernehmen
 
Zitat:

Neue Datei erstellen, das Original als Template verwenden und dann den Inhalt noch rüberschaufeln.
Daran hatte ich auch schon gedacht und es durchgetestet.

Das Kopieren einer 10MB Datei dauert bei mir mit TSHFileOPStruct etwa 10 Millisekunden. Mit CreateFile und eigenem Buffer usw. 350 Millisekunden.
Ein angepasster Buffer senkt die Kopierzeit auf akzeptable Werte. Aber ich bleibe lieber bei TSHFileOPStruct.

Dann werde ich die Sicherheitseinstellungen für jede Datei wohl zwischenspeichern müssen und auf die Zieldatei übertragen.

Dalai 29. Mai 2012 20:01

AW: NTFS - Dateiberechtigungen übernehmen
 
Zitat:

Zitat von daywalker9 (Beitrag 1168618)
Zitat:

Zitat von Dalai (Beitrag 1168617)
Zitat:

Zitat von daywalker9 (Beitrag 1168615)
Die sollten normalerweise mitkommen.

Nein. Normalerweise werden die Rechte vom Zielverzeichnis übernommen, weil standardmäßig die Vererbung aktiviert ist.

Und welchen Sinn ergibt dann das Flag, welches man in der Beschreibung findet? ;-)

Das weiß ich nicht. Ich habe nur meine bisherigen Erfahrungen mit diversen Programmen (Explorer, Total Commander (der übrigens auch CopyFileEx benutzt), cwrsync, der CMD usw) und deren Kopiermethoden gemacht und diese Erfahrung kundgetan. Einzige Ausnahme, die ich bisher feststellte: ein move auf einer CMD nimmt die Rechte der Quelle mit.

MfG Dalai

Luckie 29. Mai 2012 20:11

AW: NTFS - Dateiberechtigungen übernehmen
 
Zitat:

Zitat von daywalker9 (Beitrag 1168618)
Und welchen Sinn ergibt dann das Flag, welches man in der Beschreibung findet? ;-)

http://blogs.msdn.com/b/oldnewthing/.../10076226.aspx


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