Also ich habe es mal getestet.
Delphi-Quellcode:
BOOL
WINAPI LookupAccountSid(
LPCTSTR lpSystemName,
PSID lpSid,
LPTSTR lpName,
LPDWORD cchName,
LPTSTR lpReferencedDomainName,
LPDWORD cchReferencedDomainName,
PSID_NAME_USE peUse
);
Der Parameter darf wirklich NIL sein, jedoch nur dann, wenn folgende Vorbedingung erfüllt ist :
- Der Parameter cchName muss kleiner sein, als die tatsächliche Länge des SID-Namens.
ODER
- (
Der Parameter cchReferencedDomainName muss kleiner sein, als die tatsächliche Länge des Domainnamens.
UND
Der Parameter cchName muss größer oder größer gleich sein, als die tatsächliche Länge des SID-Namens.
)
@Luckie: Dein Quellcode wäre demnach semantisch inkorrekt.
Warum es mal so funktioniert und mal anders nicht, kann ich dir nicht sagen. Zumindest auf meinem XP SP2 ergibt der obige Quellcode immer eine
Exception in "ntdll.dll".
Ich habe mal dein "WindowsStations.dpr" Programm ausprobiert und musste feststellen, dass StrSIDToName funktioniert, weil die Variable TempLen immer 0 war. Ich habe garkein SID Name bekommen. Dann isses auch kein Wunder, dass es funktioniert
Die
Ansi Variante funktionier übrigens immer. Vermutlich ein Bug in der W-Variante? Oder Kompatibilitätsgründe?