Nimm normal String und PChar.
Was ist eigentlich, wenn ein
Unicode-Dateiname kommt? PChar geht ja nicht, weil das bei 2009 ein WideChar ist.
Das ist in >=D2009 doch automatisch (P)WideChar also
Unicode. D.h. auch in Russland funktioniert es. Und SetNamedSecurityInfo wird in >=D2009 automatisch SetNamedSecurityInfoW.
Warum du SetNamedSecurityInfoA genommen hast, weiß ich allerdings nicht genau. Du hattest am Anfang einen Fehler mit Unicodestring gemacht und bist dann sofort auf AnsiString umgestiegen, weil das dir schneller ging. D.h. wenn du alle AnsiString Teile im Code durch Unicodeteile ersetzt, dann ist es
Unicode.
1. PChar = PWideChar in >=D2009, sonst PAnsiChar
2. Nutze solange es geht String/WideString/AnsiString, um Strings zu erzeugen und zu verändern in Delphi. Erst beim Aufruf einer
WinApi Funktion konvertiere es in den entsprechenden PointerTyp PChar/PWideChar/PAnsiChar. Delphi macht den Rest.