Click here download IsUserAdmin.asm
;###############################################################################################
; IsUserAdmin()
;   - Port of MSDN's Code to assembly. Should work on 2000 and above. As the shell API wrapper IsUserAdmin()
;      does not work with Windows 2000.
;
;   Example:
;    invoke IsUserAdmin
;    test eax, eax
;    jz @@not_admin
;
;   August 3rd, 2010
;   Phr0stic
;###############################################################################################
IsUserAdmin PROC
   LOCAL NtAuthority:SID_IDENTIFIER_AUTHORITY
   LOCAL AdministratorsGroup:SID
   LOCAL fAdmin:BOOL

   invoke RtlZeroMemory, addr NtAuthority, sizeof SID_IDENTIFIER_AUTHORITY
   mov NtAuthority.Value[5], 5
   mov fAdmin, FALSE

   invoke AllocateAndInitializeSid, addr NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, addr AdministratorsGroup
   test eax, eax
   jz short @@admin_end
   lea eax, AdministratorsGroup
   mov eax, [eax]
   xchg ebx, eax
   invoke CheckTokenMembership, 0, ebx, addr fAdmin
   invoke FreeSid, addr AdministratorsGroup
   mov eax, fAdmin
   ret

@@admin_end:
   xor eax, eax
   ret
IsUserAdmin END