Ich bin am verzweifeln. Folgender Code:
Delphi-Quellcode:
function StrSIDToName(const StrSID: Widestring; var Name: WideString; var SIDType: DWORD): Boolean;
var
SID : PSID;
Buffer : PWideChar;
NameLen, TempLen : Cardinal;
succes : Boolean;
begin
SID := nil;
succes := ConvertStringSIDToSID(PWideChar(StrSID), SID);
if succes then
begin
NameLen := 0;
TempLen := 0;
LookupAccountSidW(nil, SID, nil, NameLen, nil, TempLen, SIDType);
GetMem(Buffer, NameLen * sizeOf(WideChar));
try
succes := LookupAccountSidW(nil, SID, Buffer, NameLen, nil, TempLen, SIDType);
if succes then
SetString(Name, Buffer, Namelen);
finally
FreeMem(Buffer);
end;
end;
if Assigned(SID) then
LocalFree(Cardinal(SID));
result := succes;
end;
Ich bekomme beim zweiten Aufruf von LookupAccountSidW eine
AV. Das verrückte ist, in einem anderen Projekt benutze ich exakt den selben Code und da funktioniert er.
Nehme ich LookupAccountSID
A geht alles. Ich will aber die
Unicode Version nutzen.
Im Anhang mal beide Projekte. Ich weiß nicht, was ich in dem einen Projekt anders mache.