Registriert seit: 6. Apr 2005
10.109 Beiträge
|
Re: AV bei LookupAccountSidW
4. Aug 2007, 20:05
Hallo,
ich kann leider momentan nicht testen, aber nach Aktenlage würde die Funktion bei mir etwa so aussehen:
Delphi-Quellcode:
function StrSIDToName(const StrSID: WideString; var Name: WideString; var SIDType: DWORD): Boolean;
var
SID: PSID;
bufName, bufDomain: PWideChar;
sizeName, sizeDomain: Cardinal;
begin
SID := nil;
if ConvertStringSidToSidW(PWideChar(StrSID), SID) then
begin
sizeName := 0;
sizeDomain := 0;
SetLastError(0);
Result := LookupAccountSidW(nil, SID, nil, sizeName, nil, sizeDomain, SIDType);
if not Result and (GetLastError() = ERROR_INSUFFICIENT_BUFFER) then
begin
GetMem(bufName, sizeName * SizeOf(WideChar));
GetMem(bufDomain, sizeDomain * SizeOf(WideChar));
SetLastError(0);
Result := LookupAccountSidW(nil, SID, bufName, sizeName, bufDomain, sizeDomain, SIDType);
if Result
then Name := WideString(bufName)
else Name := '';
FreeMem(bufName);
FreeMem(bufDomain);
end;
end;
LocalFree(HLOCAL(SID));
Result := True;
end;
GetLastError() würde ich außerhalb verwenden, sonst macht Result keinen Sinn mehr und man könnte gleich eine Prozedur verwenden.
Freundliche Grüße
|
|
Zitat
|