Soweit ich dich verstanden habe, ist das definitiv falsch.
Das Problem beim Beenden des Dialogs ist ja, dass die DACL Variable/Pointer von SD und MergedSD beide auf das selbe Objekt im
Ram verweisen, was ja mit Christians Lösung nun nicht mehr passiert. (Beim Freigeben wird sonst das Objekt im
Ram 2x gelöscht, das gibt Probleme).
Mit deinem Quelltext tritt das Problem zwar "nur dann" auf, wenn DACL <> NIL ist (was zwar nicht immer, aber meistenst und auch speziell in dieser Prozedur der Fall ist!), aber es bietet keine Lösung dafür?
Wenn dann könnte man sagen MergedSD.DACL.Assign(SD.DACL) (falls das mit DACL geht), dann wäre einfach nur rüberkopiert und alles wäre gut...