Чтение онлайн

ЖАНРЫ

Недокументированные и малоизвестные возможности Windows XP

Клименко Роман

Шрифт:

'файл. Для этого мы используем метод Write, чтобы сервер сценариев

'не переходил на следующую строку файла журнала после занесения в него

'даты и времени.

objTextFile.Write Date & " в " & Time

'Сейчас мы вызываем главную функцию программы, описанную ниже в сценарии.

'Главный код программы был реализован в виде функции, чтобы показать

'читателю большинство возможностей сервера сценариев Windows.

call sronoff

вот и главная функция программы (которая будет называться sronoff).

'Именно эта функция отключает или включает SystemRestore на определенном

'диске. Реализация частей кода сценария в виде функций позволяет

'использовать его возможности по максимуму. Например, такой подход

'позволяет завершать работу сценария в любое время, независимо от

'оставшегося для обработки кода, или использовать для каждой части

'кода свои методы обработки ошибок.

private sub sronoff

 'Внимание, именно сейчас мы подключаемся к WMI с помощью моникера winmgmts.

 'Здесь мы подключаемся к пространству имен root/default локального

 'компьютера и объявляем класс SystemRestore этого пространства c имитацией

 'прав доступа (impersonate). Если вам запрещен доступ к пространству

 'имен root/default, то вы не сможете объявить класс SystemRestore

 'Помните, выше мы рассматривали параметры реестра, для определения порогов

 'передачи объектов от поставщиков WMI. Именно передачей объектов мы и

 'пользуемся в данный момент.

 Set obj = GetObject("winmgmts:{impersonationLevel=impersonate}!root/default:SystemRestore")

 'Чуть ниже мы считываем из реестра значение параметра. Особенность

 'сценария состоит в том, что он будет выдавать ошибку, если параметра,

 'значение которого мы считываем, не существует в реестре. Чтобы сценарий

 'не завершался ошибкой, мы подавляем возможность выдачи ошибок.

 'Иными словами, приведенная ниже строка говорит серверу сценариев о том,

 'что в случае возникновения ошибки он должен дальше обрабатывать сценарий,

 'не обращая внимания на возникшую ошибку.

 ON ERROR RESUME NEXT

 'Именно сейчас мы и работаем с реестром. Мы считываем значение

 'параметра DisableSR. Если значение данного параметра равно 1,

 'то SystemRestore полностью отключен на всех дисках и наш

 'сценарий в любом случае не будет работать со всеми дисками,

 'кроме системного.

 dasableSR = objREG.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore\DisableSR")

 'Если параметр, значение которого
мы считываем, не существует в

 'реестре, тогда компилятор запишет в специальный объект err

 'код ошибки, равный –2147024894 (именно ошибка с этим кодом и возникает

 'в том случае, если параметр реестра, к которому мы пытаемся

 'получить доступ, в реестре отсутствует) .Если действительно произошла

 'ошибка с данным кодом, то SystemRestore на компьютере отключена,

 'то есть все попытки включения/отключения дисков, отличных от системного

 '(ниже под С:\ понимается системный диск), будут неудачны.

 'Ниже в сценарии будет присутствовать еще одно условие, выполняющее те же

 'действия, что и это. Работа с объектом для хранения ошибок была описана

 'лишь для примера, таккак в сценариях сервера сценариев Windows это

 'единственный способ определить, присутствует ли в реестре конкретный

 'параметр.

 if (err.Number = –2147024894) and (Drive <> "c:\") then

objTextFile.WriteLine " : Параметр DisableSR отсутствует в реестре. Это значит, что SystemRestore отключена и вкладка для ее настройки отсутствует в диалоге Свойства системы"

'Выходим из функции, а поскольку эта функция главная, то завершается

'и работа сценария. Иными словами, дальнейший код сценария

'выполняться не будет, если мы пытаемся включить/отключить несистемный

'диск, если сама возможность SystemRestore отключена.

exit sub

 End if

 'Под диском C:\ понимается системный диск, поэтому если вашим системным

 'диском является не диск С:\, то букву нужно заменить. Особенность

 'работы SystemRestore заключается в том, что в случае остановки

 'SystemRestore на системном диске SystemRestore автоматически

 'останавливается на всех дисках компьютера и параметр DisableSR становится

 'равен 1. Именно поэтому запросы на включение/выключение System Restore

 'на отличных от системного диска дисках не обрабатываются при значении

 'параметра DisableSR, равном 1 (эти запросы работать не будут). При

 'этом системный диск запросы обрабатывать может – если SystemRestore на

 'нем будет включена, то параметр DisableSR станет равным 0, а значит,

 'будет включена и сама возможность автоматического восстановления.

 'Именно поэтому ниже системный диск исключается из условного выполнения.

 if (dasableSR > 0) and (Drive <> "c:\") then

objTextFile.WriteLine " : Возможность работы SystemRestore на всех дисках была отключена"

Поделиться с друзьями: