Aber das stimmt immernoch nicht so:
Du verwendest : Value.SID hier.
D.h. wenn die Instanz (Parameter) Value zerstört wird, dann wird die Instanz Value.SID ungültig, aber nicht nil!
Wenn du TJwSecurityAccessControlEntry überall durch TJwDiscretionaryAccessControlEntryAllow ersetzt, dann compiliert es, oder willst du auch Zugriffsverweigerungen setzen?
Delphi-Quellcode:
procedure ..SetAccessControlEntry(Value : TJwSecurityAccessControlEntry);
begin
if FAccessControlEntry <> Value
then
begin
if Value
is TJwDiscretionaryAccessControlEntryDeny
then
FAccessControlEntry :=
TJwDiscretionaryAccessControlEntryDeny.Create(Value
as TJwDiscretionaryAccessControlEntryDeny)
else
if Value
is TJwDiscretionaryAccessControlEntryAllow
then
FAccessControlEntry :=
TJwDiscretionaryAccessControlEntryAllow.Create(Value
as TJwDiscretionaryAccessControlEntryAllow)
else
//gibt noch eine Vielzahl anderer
raise Exception.Create('
Unsupported ACE type: '+Value.ClassName);
FAccessControlEntry.Flags := [afObjectInheritAce, afContainerInheritAce];
end;
end;