Что нового

Как скрипту получить системные права на работу с реестром?

chaos-13

Новичок
Сообщения
34
Репутация
0
Всем привет! Ребят, у меня такая проблема. Написал скрипт, по очистке компа от флешек и usb устройств. Но вот беда в том, что ветки HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USB, HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\WpdBusEnumRoot\UMB, HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices не могу редактировать. Как скрипту получить полные права? Есть вариант с утилитой psexec.exe, но как её правильно встроить в скрипт? Приведу фрагмент своего кода:
Код:
For $i= 1 to 500

    $var = RegEnumKey("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\DeviceClasses\{53f56307-b6bf-11d0-94f2-00a0c91efb8b}", $i)
    If @error <> 0 Then ExitLoop ;проверка условия на оконченность списка ключей
	$result = StringInStr($var,"##?#USBSTOR#Disk",1) ;проверяем соответствие ветки реестра с параметром функции StringInStr
       GUICtrlCreateLabel("Всего: " & $j, 20,380)
	  If $result == 0 Then ContinueLoop
		 $j= $j+1
		 GUICtrlSetData($edit,$var & @CRLF,1)
         GUICtrlCreateLabel("Всего: " & $j, 20,380)

Next

Do
    $msg = GUIGetMsg()
   Select
	Case $msg = $GUI_EVENT_CLOSE
	   ExitLoop
    Case $msg = $cancel
	   ExitLoop
    Case $msg = $del
	   Run(@ComSpec & " /c psexec.exe -s -i regedit.exe")
	   RunWait(@ComSpec & " /c" & "regsaver.exe C:\regbackup") ;создаём резервную копию реестр
	   For $i= 1 to 500
           $var = RegEnumKey("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\DeviceClasses\{53f56307-b6bf-11d0-94f2-00a0c91efb8b}", $i)
           If @error <> 0 Then ExitLoop ;проверка условия на оконченность списка ключей
	          $result = StringInStr($var,"##?#USBSTOR#Disk",1) ;проверяем соответствие ветки реестра с параметром функции StringInStr
                If $result == 0 Then ContinueLoop
				   RegDelete('HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\DeviceClasses\{53f56307-b6bf-11d0-94f2-00a0c91efb8b}\'&$var) ;удаляем найденные устройства
				   $i=$i-2

Next
 

ildar

Осваивающий
Сообщения
252
Репутация
29
1. Запустить от имени администратора
Код:
#RequireAdmin
2. Правой кнопкой по скрипту, запустить от имени...
3. Если речь идет о запуске
Код:
Run(@ComSpec & " /c psexec.exe -s -i regedit.exe")
то нужно использовать
Код:
Runas
 
Автор
C

chaos-13

Новичок
Сообщения
34
Репутация
0
Код:
Run(@ComSpec & " /c psexec.exe -s -i regedit.exe")

Ну при такой команде запускается реестр с полными правами, но ведь он запускается для пользователя, а не для скрипта. Как, скажем так, функции RegDelete теперь объяснить, что она работает с системными правами??
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
chaos-13
как её правильно встроить в скрипт
psexec не нужно встраивать в скрипт. С её помощью нужно запустить сам скрипт. Тогда все действия скрипта, а также программ, запускаемых скриптом, будут выполняться от имени системы
Код:
d:\PsExec.exe -s -i d:\test.exe
где test.exe - это ваш скрипт.

Вот ещё посмотрите: _RunAsSystem() - Запуск процесса под учётной записью SYSTEM
 

ildar

Осваивающий
Сообщения
252
Репутация
29
Код:
2. Правой кнопкой по скрипту, запустить от имени...
не катит?
 
Автор
C

chaos-13

Новичок
Сообщения
34
Репутация
0
InnI спасибо за совет, попробую обязательно.
 
Автор
C

chaos-13

Новичок
Сообщения
34
Репутация
0
Решил оживить тему таким вопросом. А каким образом вообще без psexec можно получить системные права на работу с реестром? Просто psexec редко, но бывает что не стартует на какой-то конкретной машине.
 

Skif_off

Знающий
Сообщения
173
Репутация
12
chaos-13 сказал(а):
Просто psexec редко, но бывает что не стартует на какой-то конкретной машине.
Несколько раз сталкивался, обычно дело было в настройках стороннего файервола.
Если ОС Vista и выше, можно попробовать NirCmd:
Код:
nircmd.exe elevatecmd runassystem c:\windows\regedit.exe
 
Автор
C

chaos-13

Новичок
Сообщения
34
Репутация
0
Skif_off сказал(а):
chaos-13 сказал(а):
Просто psexec редко, но бывает что не стартует на какой-то конкретной машине.
Несколько раз сталкивался, обычно дело было в настройках стороннего файервола.
Если ОС Vista и выше, можно попробовать NirCmd:
Код:
nircmd.exe elevatecmd runassystem c:\windows\regedit.exe
Ок, надо попробывать тогда.
 
Автор
C

chaos-13

Новичок
Сообщения
34
Репутация
0
Чем ещё можно запустить скрипт от имени системы. PsExec не всегда работает, иногда ошибку выдаёт. Devxexec на XP SP3 ошибку по дескриптору выдаёт. Nircmd на XP не запускает. Что ещё можно попробывать???
 
Верх