naja ich hab einfach den Quelltext von unitNTSecurity.pas geändert :
Zeile 95:
Delphi-Quellcode:
TAccessControlList = class
...
public
...
property ElementList : TObjectList read fElementList;
end;
(das geht auch mit Vererbung!)
Jetzt kannst du ganz einfach ein Deny ACE ganz nach oben in die Liste einfügen.
acl.ElementList.Insert(0,TAccessControlElement.Create(userName, aeAccessDenied, OBJECT_INHERIT_ACE or CONTAINER_INHERIT_ACE , FILE_ALL_ACCESS));
Das Problem bei der Reihenfolge Allow dann Deny ist, dass das System die
ACL durchgeht und beim ersten Treffer (gleiche SID), abbricht. Daher müssen
Deny ACEs ganz oben stehen, weil diese ja Vorrang haben.