Роман Клименко - Недокументированные и малоизвестные возможности Windows XP
- Название:Недокументированные и малоизвестные возможности Windows XP
- Автор:
- Жанр:
- Издательство:Питер
- Год:2006
- ISBN:5-469-01562-9
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Роман Клименко - Недокументированные и малоизвестные возможности Windows XP краткое содержание
Книга содержит подробные сведения о таких недокументированных или малоизвестных возможностях Windows XP, как принципы работы с программами rundll32.exe и regsvr32.exe, написание скриптов сервера сценариев Windows и создание INF-файлов. В ней приведено описание оснасток, изложены принципы работы с консолью управления mmc.exe и параметрами реестра, которые изменяются с ее помощью. Кроме того, рассмотрено большое количество средств, позволяющих выполнить тонкую настройку Windows XP.
Эта книга предназначена для опытных пользователей и администраторов, которым интересно узнать о нестандартных возможностях Windows. Тем более что довольно часто эти возможности позволяют обойти ограничения на те или иные функции Windows, установленные администратором. Издание также может быть интересно и обычным пользователям
Недокументированные и малоизвестные возможности Windows XP - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
'читателю большинство возможностей сервера сценариев 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 на всех дисках была отключена"
exit sub
else
'Для облегчения читаемости приведенного кода вместо условных конструкций
'if … else используются конструкции select case. В остальном дальше
'код довольно простой, поэтому описывать его мы не будем.
select case StopSR
case "N"
If (obj.Disable(Drive)) = 0 Then
objTextFile.WriteLine " : SystemRestore для диска " & Drive & " успешно остановлена"
Else
objTextFile.WriteLine " : Внимание!!! SystemRestore для диска " & Drive & " остановить не удалось"
End If
case "Y"
If (obj.Enable(Drive)) = 0 Then
objTextFile.WriteLine " : SystemRestore для диска " & Drive & " успешно запущена"
Else
objTextFile.WriteLine " : Внимание!!! SystemRestore для диска " & Drive & " запустить не удалось"
End If
End Select
End if
'Считается хорошим тоном закрывать в сценариях текстовые файлы, открытые
'до этого. Именно этим и занимается приведенная ниже строка.
objTextFile.Close
end sub
Вот, в принципе, и все. Приведенный в листинге сценарий очень подробно изложен, поэтому больше он описан не будет. Для запуска данного сценария необходимо иметь права администратора на локальном компьютере, иначе вы не сможете получить доступ к WMI. Если немножко изменить этот сценарий, то можно будет подключиться не к локальному компьютеру, а к любому другому компьютеру сети. Для этого нужно строку
Set obj = GetObject("winmgmts:{impersonationLevel=impersonate}!root/ default:SystemRestore")
заменить строкой
Set obj = GetObject("winmgmts:{impersonationLevel=impersonate}!\\«имякомпьютера»\root\default:SystemRestore")
При этом вместо имени компьютера можно использовать точку. В этом случае вы опять будете подключаться к локальному компьютеру.
Напоследок несколько возможных команд запуска приведенного сценария:
■ cscript d: \sr.vbs — полностью отключить возможность восстановления системы (если диск C: является системным);
■ cscript d:\sr.vbs c:\ Y — полностью включить возможность восстановления системы (если диск C: является системным);
Читать дальшеИнтервал:
Закладка: