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 | System::Store 'r3 r2 r1 r0' | ||
Goto `${_f}` | Goto `${_f}` | ||
## User is not an Admin | ## User is not an Admin | ||
System::Store 'r0 | 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