Hallo,
ich bin gerade dabei für eine spezielle Sache die NTFS-Rechte an Dateiobjekten zu ändern.
Für die Umsetzung greife ich auf
TNTFileObject von
Colin Wilson zurück.
Es muss die Vererbung von Rechten auf ein Verzeichnis abgeschaltet werden,
sowie ein Gruppenkonto entfernt und ein Benutzerkonto hinzugefügt werden.
Dazu benutze ich folgenden Code:
Delphi-Quellcode:
function CreateFolder(
const Path :
String;
const SamName :
String;
const MemberOf :
String;
Memo : TMemo =
nil) : Boolean;
var
FD : Boolean;
AR : Boolean;
FO : TNTFileObject;
ACL: TAccessControlList;
ACE: TAccessControlElement;
I,M: Integer;
begin
FD := ForceDirectories(Path + '
\' + SamName);
if FD
then
begin
FO := TNTFileObject.Create(Path + '
\' + SamName);
try
ACL:= TAccessControlList.Create;
try
if FO.GetDiscretionaryAccessList(
ACL)
then
begin
M :=
ACL.ElementCount - 1;
for I := 0
to M
do
begin
ACE := TAccessControlElement.Create(
ACL.Element[I].
Name,
ACL.Element[I].Type_,
ACL.Element[I].Flags
xor CONTAINER_INHERIT_ACE,
ACL.Element[I].Mask);
if POS(MemberOf,
ACL.Element[I].
Name) = 0
then ACL.AddElement(ACE);
end;
for I := 0
to M
do ACL.DeleteElement(0);
ACE := TAccessControlElement.Create(SamName, aeAccessAllowed, EX_MASK_ALL, EX_FILE_All);
ACL.AddElement(ACE);
FO.SetDiscretionaryAccessList(
ACL);
AR := True;
end;
finally
ACL.Free;
end;
finally
FO.Free;
end;
end;
if (Memo <>
nil)
and not FD
then Memo.Lines.Add('
Error ForceDirectories: ' + Path);
if (Memo <>
nil)
and not AR
then Memo.Lines.Add('
Error FileObjectAccessRights: ' + Path + '
<' + SamName + '
>');
Result := FD
and AR;
end;
Mein Problem hierbei ist nun, das der Benutzer nicht in der erwarteten Reihenfolge in der DACL steht.
Kann jemand mal ein kurzen Hinweis geben in welcher Reihenfolge die Einträge sein sollten.
Danke