mece
asked on
Detect PowerUser or Admin
How can i detect the user type (poweruser or administrator or normal user)
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
TTriBool = (tbUnknown, tbTrue, tbFalse);
var
USER_ADMIN: TTriBool = tbUnknown;
function IsUserAdministrator: Boolean;
const
DOMAIN_ALIAS_RID_ADMINS = $220;
SECURITY_BUILTIN_DOMAIN_RI
var
i: Integer;
hProcess, hAccessToken: THandle;
InfoBuffer: array[0..1023] of UCHAR;
dwInfoBufferSize: DWORD;
siaNtAuthority: TSIDIdentifierAuthority;
psidAdministrators: Pointer;
ptgGroups: PTokenGroups;
begin
if USER_ADMIN = tbUnknown then begin
result := False;
USER_ADMIN := tbFalse;
FillChar(ptgGroups, sizeof(ptgGroups), 0);
FillChar(siaNtAuthority, sizeof(siaNtAuthority), 0);
siaNtAuthority.Value[5] := 5;
hProcess := GetCurrentProcess;
if not OpenProcessToken(hProcess,
if not GetTokenInformation(hAcces
AllocateAndInitializeSid(s
SECURITY_BUILTIN_DOMAIN_RI
DOMAIN_ALIAS_RID_ADMINS,
0, 0, 0, 0, 0, 0,
psidAdministrators);
ptgGroups := PTokenGroups(@InfoBuffer);
for i := 0 to ptgGroups^.GroupCount - 1 do begin
if EqualSid(psidAdministrator
USER_ADMIN := tbTrue;
Break;
end;
end;
FreeSid(psidAdministrators
end;
result := USER_ADMIN = tbTrue;
end;
Hope this helps,
Rob