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;

2012-01-26T23:14:50 +0100, mail[at]michael[Bindestrich]puff.de