So hatte ich es ja auch. Aber marabu meinte hier:
http://www.delphipraxis.net/internal...=691800#691800 , dass ich eine falsche Fehlermeldung bekäme, weil ich beim Ermitteln der nötigen Buffergröße den Rückgabewert der Funktion nicht auswerten würde.
Ich habe es jetzt also so:
Delphi-Quellcode:
function StrSIDToName(const StrSID: Widestring; var Name: WideString; var SIDType: DWORD): DWORD;
var
SID : PSID;
Buffer : PWideChar;
NameLen, TempLen : Cardinal;
err : Boolean;
begin
SID := nil;
err := ConvertStringSIDToSID(PWideChar(StrSID), SID);
if err then
begin
NameLen := 0;
TempLen := 0;
LookupAccountSidW(nil, SID, nil, NameLen, nil, TempLen, SIDType);
NameLen := NameLen * 2 + 1;
GetMem(Buffer, NameLen);
try
err := LookupAccountSidW(nil, SID, Buffer, NameLen, nil, TempLen, SIDType);
if err then
begin
SetString(Name, Buffer, Namelen);
SetLastError(0);
end;
finally
FreeMem(Buffer);
end;
end;
if Assigned(SID) then
LocalFree(Cardinal(SID));
result := GetLastError;
end;
Aber jetzt fliege ich beim zweiten Aufruf raus und zwar ganz. Das Programm beendet sich im Debugger. Nehme ich die
Ansi-Version der Funktion geht es.