LogicLib - UserIsAdmin: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
(→‎About: Reemphasized Pre-Windows 200 Limitations)
(Change the wrong order in System::Store commands)
Line 46: Line 46:
         StrCmp $3 0 0 +3
         StrCmp $3 0 0 +3
         ## User is an Admin
         ## User is an Admin
             System::Store 'r0 r1 r2 r3'
             System::Store 'r3 r2 r1 r0'
             Goto `${_f}`
             Goto `${_f}`
              
              
         ## User is not an Admin
         ## User is not an Admin
             System::Store 'r0 r1 r2 r3'
             System::Store 'r3 r2 r1 r0'
             Goto `${_t}`
             Goto `${_t}`



Revision as of 06:03, 2 November 2009

Author: Zinthose (talk, contrib)


About

Library to extend the LogicLib library to allow for testing if the current security context has Administrative rights.

This code is based on the IsUserAdmin macros done by Lilla.

NOTE This code will only work on windows 2000 and later!

Source

; ----------------------------
;       LogicLib_Ext.nsh
; ----------------------------
;
; Library to extend the 'LogicLib' library's existing functions.
;
 
 
!ifndef ___LOGICLIB_EXT__NSH___
!define ___LOGICLIB_EXT__NSH___
 
!include 'LogicLib.nsh'
 
; -----------------------
;       UserIsAdmin
; -----------------------
;
;   Example:
;       ${If} ${UserIsAdmin}
;           DetailPrint "Current user security context has local administrative rights."
;       ${Else}
;           DetailPrint "Current user security context dose NOT have local administrative rights."
;       ${EndIf}
;
    !macro _UserIsAdmin _a _b _t _f
        System::Store 'p0 p1 p2 p3'
        System::Call '*(&i1 0,&i4 0,&i1 5)i.r0'
        System::Call 'advapi32::AllocateAndInitializeSid(i r0,i 2,i 32,i 544,i 0,i 0,i 0,i 0,i 0,i 0,*i .r1)i.r2'
        System::Free $0
        System::Call 'advapi32::CheckTokenMembership(i n,i r1,*i .r2)i.r3'
        System::Call 'advapi32::FreeSid(i r1)i.r2'
 
        StrCmp $3 0 0 +3
        ## User is an Admin
            System::Store 'r3 r2 r1 r0'
            Goto `${_f}`
 
        ## User is not an Admin
            System::Store 'r3 r2 r1 r0'
            Goto `${_t}`
 
    !macroend
    !define UserIsAdmin `"" UserIsAdmin ""`
 
!endif