![]() |
DACL und die Reihenfolge
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 ![]() 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:
Mein Problem hierbei ist nun, das der Benutzer nicht in der erwarteten Reihenfolge in der DACL steht.
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; Kann jemand mal ein kurzen Hinweis geben in welcher Reihenfolge die Einträge sein sollten. Danke |
Re: DACL und die Reihenfolge
*push*
|
Re: DACL und die Reihenfolge
Moin Alter Mann,
wozu soll den hier das xor dienen?
Delphi-Quellcode:
or bzw. and not kann ich mir ja noch vorstellen, aber xor :gruebel:
ACL.Element[I].Flags xor CONTAINER_INHERIT_ACE
|
Re: DACL und die Reihenfolge
Hi,
damit lösche ich den Wert 'CONTAINER_INHERIT_ACE'. Hat aber nichts mit der Reihenfolge zu tun. Gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz