Delphi - StrSIDToName
{
Author : http://www.michael-puff.de
Date : 2006-03-01
License : PUBLIC DOMAIN
}
function ConvertStringSidToSid(StringSid: PWideChar; var Sid: PSID): Boolean; stdcall; external 'advapi32.dll' name
'ConvertStringSidToSidW';
function StrSIDToName(const StrSID: Widestring; var Name: string; var SIDType: DWORD): Boolean;
var
SID : PSID;
Buffer : PChar;
NameLen, TempLen : Cardinal;
err : Boolean;
begin
SID := nil;
err := ConvertStringSIDToSID(PWideChar(StrSID), SID);
if err then
begin
NameLen := 0;
TempLen := 0;
LookupAccountSidA(nil, SID, nil, NameLen, nil, TempLen, SIDType);
GetMem(Buffer, NameLen);
try
err := LookupAccountSidA(nil, SID, Buffer, NameLen, nil, TempLen, SIDType);
if err then
SetString(Name, Buffer, Namelen);
finally
FreeMem(Buffer);
end;
end;
if Assigned(SID) then
LocalFree(Cardinal(SID));
result := err;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Name : string;
SIDType: DWORD;
begin
if StrSIDToName('S-1-5-32-544', Name, SIDType) then
ShowMessage(Name)
else
ShowMessage(SysErrorMessage(GetLastError));
end;