Interactive User (MediumIL) Admin user(HighIL)
+++[Setup.exe]++++++++++++++ +++[Setup.exe]++++++++++++++
+ + + +
+ ***[.OnInit]************ + + ***[.OnInit]************ +
+ * UAC::RunElevated >---+-+------>+ * * +
+ * NSIS.Quit() * + + * * +
+ ************************ + + ***********||*********** +
+ + + || +
+ + + \/ +
+ ***[Sections]*********** + + ***[Sections]*********** +
+ * * + /--+-+-< UAC::Exec * +
+ ************************ + | + ************************ +
+ + | + +
+ Win32.CreateProcess() <-+----/ + +
+ + + +
++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++
Every function will try to emulate the basic NSIS instruction (of similar name) when UAC::RunElevated has not "succeeded" or running on a system that does not support elevation (Win9x/NT4)
| UAC::RunElevated | |||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Parameters: | |||||||||||||||||
| Returns: |
| ||||||||||||||||
| Description: | Allows non-admin/UAC.LUA users to re-spawn the installer as another user and UAC.Admin users to elevate. | ||||||||||||||||
| UAC::Unload | |
|---|---|
| Parameters: | |
| Returns: | |
| Description: | Cleanup, you must call this function in .OnInstFailed, .onUserAbort and .OnInstSuccess |
| UAC::Exec | |||
|---|---|---|---|
| Parameters: | <INT:ShowWindow> <STR:App> <STR:Parameters> <STR:WorkingDir> | ||
| Returns: |
| ||
| UAC::ExecWait | |||||
|---|---|---|---|---|---|
| Parameters: | <INT:ShowWindow> <STR:App> <STR:Parameters> <STR:WorkingDir> | ||||
| Returns: |
| ||||
| UAC::ShellExec | |||
|---|---|---|---|
| Parameters: | <STR:Verb> <INT:ShowWindow> <STR:App> <STR:Parameters> <STR:WorkingDir> | ||
| Returns: |
| ||
| UAC::ShellExecWait | |||||
|---|---|---|---|---|---|
| Parameters: | <STR:Verb> <INT:ShowWindow> <STR:App> <STR:Parameters> <STR:WorkingDir> | ||||
| Returns: |
| ||||
| UAC::IsAdmin | |
|---|---|
| Parameters: | |
| Returns: | $0 (BOOL) result |
| Description: | Check current thread/process token for a non-deny admin group SID entry |
| UAC::ExecCodeSegment | |
|---|---|
| Parameters: | <INT:NSISFunctionAddress> |
| Returns: | [None] (ErrorFlag is set on error) |
| Description: | Calls NSIS function in LUA/outer instance (If you use instructions that alter the UI or the stack/variables in the code segment (StrCpy,Push/Pop/Exch,DetailPrint etc.) they will affect the hidden wrapper installer and not "your" installer instance) |
| UAC::StackPush | |
|---|---|
| Parameters: | <STR:String> |
| Returns: | [None] (ErrorFlag is set on error) |
| Description: | Push to outer instance stack (For use with UAC::ExecCodeSegment) |
| UAC::GetOuterHwnd | |
|---|---|
| Parameters: | |
| Returns: | $0 HWNDPARENT of outer instance |
| Description: | For use with ${UAC.RunElevatedAndProcessMessages} |
| UAC::SupportsUAC | |
|---|---|
| Parameters: | |
| Returns: | $0 !=0 if supported |
| Description: | Check if the OS supports UAC (And the user has UAC turned on) This function only tests if UAC is active, will return 0 on NT5 even though runas is implemented on those platforms, will also return 0 on NT6+ if UAC is off. You should only call this function during testing, NOT to determine if you can call UAC::RunElevated |
| UAC::GetElevationType | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Parameters: | |||||||||||
| Returns: |
| ||||||||||
If the plugin is built with FEAT_CUSTOMRUNASDLG_TRANSLATE (Enabled by default), you can extract a file named UAC.LNG to $pluginsdir. It is a ini file with the following sections:
[MyRunAsCfg] ;Set to 1 to disable the radio button DisableCurrUserOpt= ;Set to 1 to hide the radio button HideCurrUserOpt= [MyRunAsStrings] DlgTitle=Hello There! HelpText=Just do your thing! ;Label for current user radio button, %s is replaced with result of GetUserNameEx(NameSamCompatible,...) OptCurrUser=Self service (%s) OptOtherUser=Run as someone: UserName=Who: Pwd=PIN: OK=Okey! Cancel=No Way