Операционные системы - статьи

Редактирование системного реестра в автономном режиме


Существует еще один способ решения проблем, связанных с загрузкой служб или драйверов. Это редактирование системного реестра с целью отключения неисправного драйвера или службы. Но как можно редактировать реестр, не загрузившись в NT? Имея альтернативный путь доступа к тому с первоначальной системой, можно редактировать реестр. Для получения доступа к данным реестра со стороны используется параллельная установка системы NT на том же компьютере либо подключение диска с системным разделом NT (содержащим системный каталог NT и файлы ветвей реестра) к компьютеру с другой системой NT.

Получить доступ к системному реестру через параллельно установленную на этом же компьютере систему NT гораздо проще, чем подключать диск к другому компьютеру, так как в данном случае можно избежать проблем, возникающих при физическом перемещении диска из одной системы в другую. Однако вне зависимости от типа файловой системы (FAT или NTFS), на которой размещается системный раздел, необходимо загрузить NT. Редактирование данных реестра осуществляется через редактор реестра NT Registry Editor, а он не может быть запущен вне системы NT. К сожалению, еще никто не придумал такого редактора реестра NT, который бы работал в другой операционной системе, например в DOS.

После того как доступ к файлам системного реестра первоначальной системы получен, можно начинать редактирование в автономном режиме. И хотя многие пользователи хорошо знакомы с редактором реестра NT Registry Editor, вероятно, не все знают о возможности открывать файлы реестра других установленных на этом компьютере NT-систем или создавать дополнительные ветви реестра с помощью редактора реестра системы. Для редактирования реестра в автономном режиме запускают regedt32.exe (утилита regedit.exe не поддерживает такой способ редактирования реестра), указывают ключ HKEY_LOCAL_MACHINE, затем вариант Load Hive в меню Registry редактора реестра и выбирают файл ветви реестра, который необходимо редактировать. Требуется изменить параметры запуска драйвера/службы; эта информация хранится системой NT в ветви реестра SYSTEM.
После выбора нужного файла система попросит указать имя подключа, под которым будет храниться содержимое выбранного файла (cм. Экран 2). Эти действия не изменяют имя указанного файла ветви реестра и не оказывают никакого влияния на системный реестр системы Windows NT, которая была загружена. Кроме того, не имеет никакого значения имя, присвоенное ветви, поскольку редактор реестра использует его только для временного обозначения данных, загруженных из ветви реестра первоначальной системы. После присвоения имени дополнительная ветвь появится в окне HKEY_LOCAL_MACHINE.



ЭКРАН 2. Загрузка внешнего файла куста реестра в редактор regedt32.exe.

С этого момента уже можно редактировать ветвь SYSTEM реестра первоначальной системы и, соответственно, попытаться решить проблему неудачного старта. Как и при любой другой операции с системным реестром, вначале следует сделать резервную копию. Однако содержимое нового ключа, SYSTEM2 в данном случае, будет немного отличаться от того, что обычно находится под ключом SYSTEM. Доступными подключами ключа ControlSet будут только подключи ControSetxxx, где xxx - число типа 001. На экране не будет ключа CurrentControlSet, который появляется при редактировании реестра загруженной системы. Ключ не виден, поскольку это только псевдоним того ключа, который был использован при загрузке системы Windows NT.



ЭКРАН 3. Определение значений для наборов Current, Default, Last Known Good и Failed.

Чтобы удостовериться в том, что редактируется нужный подключ, а не задаваемый по умолчанию для параллельной установки, выбирается подключ Select вновь созданного ключа. В правой панели редактора реестра будет выведено несколько значений (см. Экран 3). Система NT использует эти параметры и их значения для того, чтобы выяснить, какой именно набор данных будет задаваться по умолчанию при старте (DefaulControlSet), какой является текущим (CurrentControlSet), какой будет определять набор LastKnownGoodMenu и какой был задействован при загрузке, когда произошел сбой.


На Экране 3 значение параметра Current указывает на номер той конфигурации NT, которая была загружена при последней загрузке системы. Представленное этим параметром значение используется как номер набора данных CurrentControlSet. В большинстве случаев значения данного параметра и задаваемого по умолчанию одинаковы. В данном примере значение параметра Current равно 0x2. Это означает, что необходимо редактировать набор ControlSet002. После определения правильного набора данных можно изменить состояние службы или драйвера на момент загрузки системы.

ТАБЛИЦА 1: Значения параметров запуска для служб и драйверов устройств

Тип запуска Значение для устройства (шестнадцатеричное) Значение для службы (шестнадцатеричное)
Boot (загрузка) 0x0 N/A
System (система) 0x1 N/A
Automatic (автоматически) 0x2 0x2
Manual (ручное) 0x3 0x3
Disabled (отключено) 0x4 0x4
Значения параметров реестра, связанные с установленной службой или драйвером первоначальной системы, находятся в значениях ключа HKEY_LOCAL_MACHINE\SYSTEM2\ControSet00x\имя подозрительной службы или драйвера. В этом ключе SYSTEM2 ссылается на подключ в представленном примере, ControSet00x соответствует тому набору данных, который был определен по процедуре, приведенной выше, а имя подозрительной службы или драйвера - службе или драйверу, который предположительно вызывает сбой. Для каждой из перечисленных в подключе Services служб (или драйверов) хранится несколько значений. В их числе значение параметра Start (значение типа REG_DWORD). Значение этого параметра определяет текущее состояние данной службы или драйвера при старте системы. Присваивание параметру Start значения 0х4 деактивирует данную службу или драйвер, и NT не будет загружать его при старте системы. В Таблице 1 перечислены все возможные значения параметра Start для служб и драйверов устройств. После того как редактирование реестра в автономном режиме будет закончено, необходимо выгрузить импортированный ранее файл ветви реестра. Это делается указанием ветви с присвоенным ранее именем и выбором опции Unload Hive в меню Registry редактора реестра.

После деактивации старта службы или драйвера первоначальной установки системы NT можно успешно изолировать дефектный элемент системы, мешающий корректной загрузке. Определить, какая именно служба (или драйвер) вызвала сбой, можно экспериментально. Дополнительную информацию, которая поможет выявить проблемный компонент системы, можно почерпнуть из журналов регистрации событий и сообщений об ошибках.


Содержание раздела