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 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:
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 07:40 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