Get User SID - Delphi

DarkCoderSc
Jean-Pierre LESUEUR
uses
System.SysUtils, Winapi.Windows;
// ...
type
TSidNameUse = (
SidTypeUser,
SidTypeGroup,
SidTypeDomain,
SidTypeAlias,
SidTypeWellKnownGroup,
SidTypeDeletedAccount,
SidTypeInvalid,
SidTypeUnknown,
SidTypeComputer,
SidTypeLabel,
SidTypeLogonSession
);
// ...
function GetUserSidByType(const AUserName : String; ASidType : TSidNameUse = SidTypeUser) : String;
begin
result := '';
///
var ASidSize := DWORD(0);
var ARefDomainSize := DWORD(0);
var ASidNameUse := Cardinal(ASidType);
if not LookupAccountNameW(nil, PWideChar(AUserName), nil, ASidSize, nil, ARefDomainSize, ASidNameUse) then
if GetLastError <> 122 (* Buffer Too Small *) then
raise EWindowsException.Create('LookupAccountNameW(1)');
var ptrSID : PSID;
GetMem(ptrSID, ASidSize);
try
var ARefDomain : String;
SetLength(ARefDomain, ARefDomainSize);
var ARet := LookupAccountNameW(
nil,
PWideChar(AUserName),
ptrSID,
ASidSize,
PWideChar(ARefDomain),
ARefDomainSize,
ASidNameUse
);
if not ARet then
raise EWindowsException.Create('LookupAccountNameW(2)');
var ASid : PWideChar;
ConvertSidToStringSidW(ptrSID, ASid);
try
result := String(ASid);
finally
LocalFree(ASid);
end;
finally
FreeMem(ptrSID, ASidSize);
end;
end;
// ...
WriteLn(GetUserSidByType('darkcodersc'));
Implemented By Technique
Featured Windows API
Created
April 13, 2025
Last Revised
April 13, 2025