Hallo,
ich möchte gerne die NTFS-Rechte von Verzeichnissen ändern, was so weit auch klappt.
Delphi-Quellcode:
...
ACL := TAccessControlList.Create;
try
FO := TNTFileObject.Create(Folders.Strings[FI]);
try
if FO.GetDiscretionaryAccessList(
ACL)
then
begin
ACLC :=
ACL.ElementCount - 1;
ASL := TAccessControlList.Create;
try
ASL.AddElement(ACE);
for ACLI := 0
to ACLC
do
begin
FNP :=
ACL.Element[ACLI].
Name;
if POS(User.memberOf, FNP) = 0
then
ASL.AddElement(
ACL.Element[ACLI]);
end;
FO.SetDiscretionaryAccessList(ASL);
Result := True;
finally
ASL.Free;
end;
end;
finally
FO.Free;
end;
finally
ACL.Free;
// <- entfällt und damit der try finally - Block
end;
...
Rufe ich jedoch
ACL.Free auf kommt es zur Schutzverletzung.
Eine Überprüfung der NTFS-Rechte ergibt dann, das nocht nicht alle Rechte gesetzt wurden.
Ein Sleep(10000) vor
ACL.Free bewirkt das alle Rechte gesetzt sind, daher die Frage:
Wie kann ich feststellen ob 'SetSecurity' ordnungsgemäß beendet ist?
Gruss
Antwort: Garnicht,
ACL darf nur nicht mit
ACL.Free freigegeben werden, da es von FO freigegeben wird.