Um die echten Rechte im Stringformat zu ermitteln, gibt es aber tatsächlich seit Windows 2000 eine Methode.
Siehe:
ConvertSecurityDescriptorToStringSecurityDescripto r und
ConvertStringSecurityDescriptorToSecurityDescripto r (<--
noch'n Bug bei den
MSDN-Tags und den ersten hat noch nichtmal jemand angenommen, da sollte kein Leerzeichen vor'm letzten "r" sein)
Daß das Ermitteln nicht trivial ist, da kann ich mich nur anschließen. Um ehrlich zu sein, besteht, selbst wenn du es jetzt richtig hinbekämst aus den DACLs das effektive Recht zu ermitteln, noch immer die Gefahr, daß sich eben diese Regeln ändern, solltest du es selber basteln (home-made).
Es gäbe da noch
NtAccessCheck und Freunde, aber die sind native APIs und schlecht bis garnicht dokumentiert. Aber die kommen am nächsten an das was du vorzuhaben scheinst. Glücklicherweise gibt es dafür auch die
Win32-Funktion
AccessCheck
Das könntest du zusammen mit der von Christian empfohlenen Bibliothek ziemlich einfach implementieren.