среда, 16 апреля 2014 г.

VBScript: реализация повышения уровня привилегий при запуске скрипта

При написании vbs-скрипта для повседневного использования часто возникает необходимость в выполнении команд с повышенным уровнем привилегий. В самом простом варианте можно запускать скрипт с помощью "runas" или из другой программы, которая, в свою очередь, уже была выполнена с повышением привилегий. Но лучше пойти другим путём.
Ниже приведен пример реализации обработки контроля учётных записей в коде самого скрипта:

Const DQ = """", HKLM = &H80000002, KQV = &H1, KSV = &H2
SET colOS = GetObject("winmgmts:\root\cimv2").ExecQuery("Select * from Win32_OperatingSystem")
FOR EACH oOS IN colOS
 strOSLong = oOS.Version
NEXT
IF Left(strOSLong, 1) > "5" THEN
    IF NOT isAdminRights THEN
  SET oShellApp = CreateObject("Shell.Application")
  oShellApp.ShellExecute WScript.FullName, DQ & WScript.ScriptFullName & DQ, "", "runas", 1
  WScript.Quit
    END IF
END IF
''''''''''Begin of code''''''''''''''''''''''''''''''
'
'
'
''''''''''End of code''''''''''''''''''''''''''''''''
FUNCTION isAdminRights()
 SET oReg = GetObject("winmgmts:root\default:StdRegProv")
 strKey = "System\CurrentControlSet\Control\Session Manager"
 intErrNum = oReg.CheckAccess(HKLM, strKey, KQV + KSV, flagAccess)
 isAdminRights = flagAccess
END FUNCTION

В данном примере происходит проверка на наличие необходимых прав доступа к ветке реестра "System\CurrentControlSet\Control\Session Manager". В случае их отсутствия, скрипт сам себя перезапускает с уже повышенными привилегиями. Вам остаётся лишь добавить код в обозначенном месте.

Комментариев нет:

Отправить комментарий