Blame | Last modification | View Log | Download
#include <Security.au3>; #FUNCTION# ====================================================================================================================; Name ..........: _IsUACAdmin; Description ...: Determines if process has Admin privileges and whether running under UAC.; Syntax ........: _IsUACAdmin(); Parameters ....: None; Return values .: Success - 1 - User has full Admin rights (Elevated Admin w/ UAC); Failure - 0 - User is not an Admin, sets @extended:; | 0 - User cannot elevate; | 1 - User can elevate; Author ........: Erik Pilsits; Modified ......:; Remarks .......: THE GOOD STUFF: returns 0 w/ @extended = 1 > UAC Protected Admin; Related .......:; Link ..........:; Example .......: No; ===============================================================================================================================Func _IsUACAdmin(); check elevationIf StringRegExp(@OSVersion, "_(XP|20(0|3))") Or (Not _IsUACEnabled()) Then ; XP, XPe, 2000, 2003 > no UAC; no UAC available or turned offIf IsAdmin() ThenReturn SetExtended(0, 1)ElseReturn SetExtended(0, 0)EndIfElse; check UAC elevation;; get process token groups informationLocal $hToken = _Security__OpenProcessToken(_WinAPI_GetCurrentProcess(), $TOKEN_QUERY)Local $tTI = _Security__GetTokenInformation($hToken, $TOKENGROUPS)_WinAPI_CloseHandle($hToken);Local $pTI = DllStructGetPtr($tTI)Local $cbSIDATTR = DllStructGetSize(DllStructCreate("ptr;dword"))Local $count = DllStructGetData(DllStructCreate("dword", $pTI), 1)Local $pGROUP1 = DllStructGetPtr(DllStructCreate("dword;STRUCT;ptr;dword;ENDSTRUCT", $pTI), 2)Local $tGROUP, $sGROUP = "";; S-1-5-32-544 > BUILTINAdministrators > $SID_ADMINISTRATORS; S-1-16-8192 > Mandatory LabelMedium Mandatory Level (Protected Admin) > $SID_MEDIUM_MANDATORY_LEVEL; S-1-16-12288 > Mandatory LabelHigh Mandatory Level (Elevated Admin) > $SID_HIGH_MANDATORY_LEVEL; SE_GROUP_USE_FOR_DENY_ONLY = 0x10;; check SIDsLocal $inAdminGrp = False, $denyAdmin = False, $elevatedAdmin = False, $sSIDFor $i = 0 To $count - 1$tGROUP = DllStructCreate("ptr;dword", $pGROUP1 + ($cbSIDATTR * $i))$sSID = _Security__SidToStringSid(DllStructGetData($tGROUP, 1))If StringInStr($sSID, "S-1-5-32-544") Then; member of Administrators group$inAdminGrp = True; check for deny attributeIf (BitAND(DllStructGetData($tGROUP, 2), 0x10) = 0x10) Then $denyAdmin = TrueElseIf StringInStr($sSID, "S-1-16-12288") Then$elevatedAdmin = TrueEndIfNext;If $inAdminGrp Then; check elevatedIf $elevatedAdmin Then; check deny statusIf $denyAdmin Then; protected Admin CANNOT elevateReturn SetExtended(0, 0)Else; elevated AdminReturn SetExtended(1, 1)EndIfElse; protected AdminReturn SetExtended(1, 0)EndIfElse; not an AdminReturn SetExtended(0, 0)EndIfEndIfEndFunc ;==>_IsUACAdminFunc _IsUACEnabled()Return (RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System", "EnableLUA") = 1)EndFunc ;==>_IsUACEnabled