Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Как внести данные в системную ветку реестра?

Ответить
Настройки темы
CMD/BAT - Как внести данные в системную ветку реестра?

Аватара для Nun-Nun

Ветеран


Сообщения: 2158
Благодарности: 294


Конфигурация

Профиль | Отправить PM | Цитировать


Как в ветку реестра [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root] добавить данные? Пробовал с помощью батника и inf-файла - не вышло, получаю ошибку. Кто-нибудь может подсказать, как это делается (если, конечно, такое в принципе возможно)?

Отправлено: 02:13, 18-02-2012

 

Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Дело в том, что разрешение на запись в раздел реестра:
Код: Выделить весь код
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum
имеет только системная учётная запись (справедливо для Windows XP; под Vista/Windows 7 может быть ещё интереснее).

В случае XP можно попробовать создать задание на внесение изменений в реестр от имени SYSTEM в Планировщике заданий и выполнить его.
Это сообщение посчитали полезным следующие участники:

Отправлено: 04:43, 18-02-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Nun-Nun

Ветеран


Сообщения: 2158
Благодарности: 294

Профиль | Отправить PM | Цитировать


Цитата Iska:
В случае XP можно попробовать создать задание на внесение изменений в реестр от имени SYSTEM в Планировщике заданий и выполнить его. »
Мысль, безусловно, интересная, но применительно к моему случаю, интерес представляет, только если не подразумевает выполнять это вручную. С помощью батника или inf-файла это сделать возможно?

-------
Свобода не означает вседозволенность.


Отправлено: 12:23, 18-02-2012 | #3


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Попробуйте унаследованную команду «at.exe», создающую унаследованные задания, работающие от имени SYSTEM. Главная проблема будет в том, чтобы указать время в команде +1 минута от текущего (впрочем, примеры арифметических операций в пакетных файлах для времени на форуме, помнится, были).

Если по Вашим условиям допустимо использование WSH, и в момент исполнения скрипта существует Проводник, то вот (пример для Блокнота):
читать дальше »
Код: Выделить весь код
Option Explicit

Const strPath2Tasks = "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\::{D6277990-4C6A-11CF-8D87-00AA0060F5BF}"

Dim strComputer

Dim objSWbemServicesEx
Dim objSWbemObjectEx
Dim objSWbemDateTime

Dim dtNow, intInterval
Dim lngJobID

Dim objShell, objFolder, objFolderItem, objVerb


' Задаём время выполнения минуту назад, в результате задание будет намечено
' на следующий день
intInterval = -1

Set objSWbemServicesEx = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

With CreateObject("WbemScripting.SWbemDateTime")
    ' Вычисляем время задания, отталкиваясь от текущей даты
    dtNow       = DateAdd("n", intInterval, Now())
    
    .Hours      = Hour(dtNow)
    .Minutes    = Minute(dtNow)
    .Seconds    = Second(dtNow)
    
    ' Получаем разницу между временем UTC и текущим поясным временем
    For Each objSWbemObjectEx In objSWbemServicesEx.InstancesOf("Win32_TimeZone")
        .UTC    = objSWbemObjectEx.Bias
        
        Exit For
    Next
    
    ' 6-й параметр метода .Create() управляет разрешением взаимодействовать с рабочим столом
    ' текущего пользователя, в данном случае — True, т.е. — разрешено.
    If objSWbemServicesEx.Get("Win32_ScheduledJob").Create( _
        "Notepad.exe", String(8, "*") & Mid(.Value, 9), , , , True, lngJobID) = 0 Then
        WScript.Echo "Создано запланированное задание #" & lngJobID & "."

        Set objShell  = WScript.CreateObject("Shell.Application")
        ' Подключаемся к виртуальной папке «Назначенные задания»
        Set objFolder = objShell.NameSpace(strPath2Tasks)
        
        If Not (objFolder Is Nothing) Then
            ' Перебираем все пункты…
            For Each objFolderItem In objFolder.Items
                ' …пока не дойдём до трубуемого нам «At…»
                If objFolderItem.Name = "At" & CStr(lngJobID) Then
                    ' Перебираем глаголы…
                    For Each objVerb In objFolderItem.Verbs
                        ' …пока не дойдём до трубуемого нам «В&ыполнить»
                        If objVerb.Name = "В&ыполнить" Then
                            ' Исполняем этот глагол
                            objVerb.DoIt
                            
                            ' Величина времени задержки подбирается опытным путём
                            ' и зависит от запускаемого заданием приложения
                            WScript.Sleep 1000
                            WScript.Echo "Запущено задание #" & lngJobID & "."
                            
                            Exit For
                        End If
                    Next
                    
                    Exit For
                End If
            Next
        End If
        
        Set objFolder = Nothing
        Set objShell  = Nothing
        
        ' Удаляем задание
        If objSWbemServicesEx.Get("Win32_ScheduledJob.JobId=" & lngJobID & "").Delete() = 0 Then
            WScript.Echo "Удалено задание #" & lngJobID & "."
        Else
            WScript.Echo "Не удалось удалить задание #" & lngJobID & "."
        End If
    Else
        WScript.Echo "Не удалось создать запланированное задание."
    End If
End With

Set objSWbemServicesEx = Nothing

WScript.Quit 0


Наконец, возможно, самым простым для Вас будет использовать стороннее средство — «psexec.exe» из комплекта PsTools.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:20, 18-02-2012 | #4


Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


Что-то похожее
http://forum.oszone.net/thread-182296.html

Отправлено: 15:14, 07-05-2013 | #5


Пользователь


Сообщения: 92
Благодарности: 30

Профиль | Отправить PM | Цитировать


Nun-Nun, если коротко, это одна из специально защищённых веток. Редактировать возможно, но непросто, для этого понадобится:
  1. Скачать и распаковать в отдельную папку SetACL
  2. В той же папке создать CMD файл:
    Код: Выделить весь код
    CD /d %~dp0
    IF %PROCESSOR_ARCHITECTURE% == AMD64 (set exec="SetACL (executable version)\64 bit\setacl.exe") ELSE (set exec="SetACL (executable version)\32 bit\setacl.exe")
    set KEY=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root
    %exec% -on "%KEY%" -ot reg -actn list -lst "f:sddl;w:d,s,o" -bckp "Enum.bkp"
    %exec% -on "%KEY%" -ot reg -actn setowner -ownr "n:%USERDOMAIN%\%USERNAME%"
    %exec% -on "%KEY%" -ot reg -actn ace -ace "n:%USERDOMAIN%\%USERNAME%;p:full"
  3. Выполнить скрипт CMD от имени Администратора.
  4. Пробуйте свой bat/inf снова!
Для возврата прав:
Код: Выделить весь код
CD /d %~dp0
IF %PROCESSOR_ARCHITECTURE% == AMD64 (set exec="SetACL (executable version)\64 bit\setacl.exe") ELSE (set exec="SetACL (executable version)\32 bit\setacl.exe")
set KEY=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root
%exec% -on "%KEY%" -ot reg -actn restore -bckp "Enum.bkp"
Цитата Iska:
имеет только системная учётная запись (справедливо для Windows XP; под Vista/Windows 7 может быть ещё интереснее). »
Действительно, на новых системах Владелец - группа Администраторы, а вот уровень доступа владельца минимальный - Чтение разрешений

Последний раз редактировалось Ксеноинженер, 10-05-2013 в 00:46.


Отправлено: 00:06, 10-05-2013 | #6


Пользователь


Сообщения: 78
Благодарности: 14

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
schtasks /create /tn MyTask /tr "reg add "HKLM\SYSTEM\CurrentControlSet\Enum" /v "Test" /t REG_DWORD /d 0 /f" /sc ONSTART /ru "system"
schtasks /run /tn MyTask
pause
schtasks /delete /tn MyTask /f
exit
Соответственно, служба "Планировщик заданий" должна быть включена.

Последний раз редактировалось DesmondTruman, 10-05-2013 в 16:59.

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:52, 10-05-2013 | #7


Пользователь


Сообщения: 92
Благодарности: 30

Профиль | Отправить PM | Цитировать


DesmondTruman, хороший пример. Планировщик может запустить команду с правами SYSTEM, возможностей Windows для решения предостаточно и без сторонних утилит.

Отправлено: 22:25, 10-05-2013 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Как внести данные в системную ветку реестра?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Как достать ветку реестра? oleg777f Microsoft Windows 2000/XP 3 17-04-2010 02:17
CMD/BAT - Как на 64-разрядной системе внести данные из reg файла? SvoiLudi Скриптовые языки администрирования Windows 8 10-04-2010 12:56
Доступ - [решено] как удалить неудаляющуюся ветку из реестра A-Style Microsoft Windows 7 2 07-10-2009 07:13
Как внести данные на Web страницу которая отурывается по ссылке? olehis AutoIt 2 17-03-2009 06:34
Как прописать ветку реестра через GPO? MTA Microsoft Windows NT/2000/2003 3 13-07-2007 10:51




 
Переход