Архивы: по дате | по разделам | по авторам

Бухгалтерия от Microsoft

Архив
автор : ИГОРЬ КОВТУН    05.10.1998

- Товарищ прапорщик, а крокодилы летают?
- Ты что, сдурел?
- А товарищ полковник сказал, что летают...
- Так то ж аллигаторы!

Из армейских будней

Успокойтесь: детище Билли Гейтса не собирается осчастливить мир бухгалтерской программой - просто в операционных системах Windows 9х (и в NT тоже) есть одна вещь, которая очень сильно напоминает бухгалтерский баланс. И если этот баланс "не сойдется", то последствия будут не лучше, чем встреча с налоговой полицией для реальной бухгалтерии.

Ниже пойдет речь о реестре (Registry) Windows 9х. Возможно, вы впервые сталкиваетесь с таким понятием, как реестр операционной системы, - это заслуга корпорации Microsoft, которая постаралась максимально оградить пользователей от конфигурирования компьютера, предложив взамен спецификацию plug and play, основой которой и является реестр.

Итак, что же такое реестр Windows 9х? Это своего рода централизованная база данных, в которой хранятся все параметры и настройки операционной системы и установленных пользователем приложений. Здесь же содержится информация об аппаратной части машины. При каждой загрузке ОС "просматривает" файлы реестра и считывает оттуда необходимую информацию. (Сюда же немедленно заносятся все данные об обнаруженных новых устройствах и произошедших с момента последнего старта изменениях в конфигурации.) Фактически, говоря о реестре, имеют в виду два файла: SYSTEM.DAT и USER.DAT, которые помещаются в каталоге с Windows. Там же находятся их одноименные резервные копии с расширениями .DA0. И если что-то случается с вашим основным реестром, то система пытается загрузить конфигурационную информацию из резервных копий (которые также обновляются при каждом старте). Ели ей это не удается, ждите "жизнерадостную" надпись типа "реестр системы поврежден" и немного отдохните от надоевших "виндов". А если серьезно, то лучше создайте резервную копию реестра. Как это делается, я расскажу немного позже. В противном случае придется переустанавливать систему и все свои любимые программы. На моей памяти подобные обвалы случались редко, но, в случае чего, статистика для вас не станет утешением.

Первые попытки Microsoft использовать реестр относятся к моменту выхода Windows 3.х. В этой системе существовал файл REG.DAT, однако выполняемые им функции носили весьма облегченный характер - этот реестр отвечал, в основном, за ассоциации файлов с определенными приложениями и поведение объектов OLE. Основными средствами конфигурирования системы являлись файлы с расширениями .INI. С течением времени таких файлов становилось все больше, а найти их - все труднее.

С появлением Windows 9х исчезла необходимость в INI-файлах, хотя при апгрейде системы, скажем, от Windows 3.11 до Windows 98 реестр последней просмотрит старые INI-файлы и перепишет информацию из них уже в своем формате. Примерно то же получится и с 16-разрядными приложениями, если вы по каким-либо причинам захотите их использовать в системе Windows 9х.

"Полномочия" каждого из двух файлов реестра легко понять из схемы.

А теперь поговорим непосредственно о "бухгалтерии". Архитектура реестра включает в себя шесть основных разделов-ключей (директории), в которых содержатся значения (файлы), состоящие из данных (содержимое файлов). Данные могут иметь три формата: строковый (string - наиболее понятный), двоичный (binary - набор шестнадцатеричных цифр произвольной длины) и, наконец, состоящий из двух слов (DWORD - восьмизначное шестнадцатеричное число). Как видно из картинки, очень похоже на панель "Проводника". Редактор реестра запускается командой REGEDIT.EXE (Пуск/Выполнить).

Каждый ключ имеет определенные функции.

HKEY_CLASSES_ROOT

Обеспечивает обратную совместимость с Windows 3.х в целях поддержки OLE и DDE. Все подключи, за исключением самого первого, показывают ассоциации расширений файлов с установленными приложениями. Поиск информации, ассоциированной с типом документа, Windows 9х начинает с поиска имени подключа, совпадающего с расширением имени файла.

HKEY_CURRENT_USER

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

HKEY_LOCAL_MACHINE

Хранит информацию о конфигурации аппаратных средств и ПО компьютера. Данные в этом ключе не зависят от того, какой пользователь зарегистрировался для работы в системе. С точки зрения пользователя, этот ключ наиболее интересен и важен. Это ясно даже по названиям подключей:

\Config  Информация о конфигурации системы (можно создавать дополнительные конфигурации, используя "Панель Управления/Система/Конфигурации"). Имена, определяемые пользователем для новых конфигураций, помещаются под ключом HKEY_LOCAL_MASHINE\System\CurrentControlSet\ Control\IDConfigDB.

\Enum Цель данного подключа - построение дерева аппаратных средств, присвоение уникальной метки каждому устройству, извлечение конфигурационной информации о любом устройстве из реестра или самого устройства. Например, информация о PnP-устройствах содержится под ключом \Enum\Root.

\Hardware Здесь информация только о последовательных портах и модемах.

\Network Содержит данные о зарегистрировавшемся пользователе, которые помещаются сюда в момент входа в сеть.\Security Информация зависит от типа сети - возможности администрирования, ресурсы.

\Software В этом подключе описывается все программное обеспечение, установленное на компьютере. Названия главных подключей совпадают с именами производителей софта (например, Microsoft, Quarterdeck).

Подключ \Classes идентичен ключу HKEY_CLASSES_ROOT.

\System Данный подключ управляет большей частью действий по загрузке системы. Содержит, в числе прочих, несколько интересных подключей:

\CurrentControlSet\Control\SessionManager\ WarnVerDLLs
Здесь содержится список подозрительных библиотек, которые могут неправильно работать.

\CurrentControlSet\Control\SessionManager\ CheckBadApps
Список приложений, которые работают плохо либо никак.

HKEY_USERS

Хранит всю информацию о профилях пользователей.

HKEY_CURRENT_CONFIG

Указывает на подключ HKEY_LOCAL_MACHINE\Config, где содержится информация, характеризующая компьютер.

HKEY_DYN_DATA

Постоянно поддерживает информацию, которая должна находиться в оперативной памяти. Несмотря на то, что информация в реестре обновляется через определенные интервалы времени, или приложениями, устанавливаемыми в системе, какая-то часть информации должна быть доступна немедленно - именно она и находится под этим ключом.

Любая программа, инсталлируемая под Windows 9х, равно как и удаляемая, редактирует реестр. Если она действительно на 100% совместима с системой (лейбл "Designed for Windows 95" - необходимое, но не достаточное условие), то проблем возникнуть не должно, однако в жизни так получается далеко не всегда. Особенно это касается деинсталляции: иногда при попытке удалить программу стандартными средствами (Панель Управления\Установка и удаление программ) выдается сообщение, смысл которого сводится к невозможности данной операции. И даже если вы вручную удалите все файлы, относящиеся, по вашему мнению, к ненужной программе - информация о ней в реестре все равно останется. Иногда это вас ни к чему не обязывает, иногда, как недавно мне, - мешает. Мне требовалось установить на одной машине такую специфическую штуку, как Winmodem. После нескольких неудачных попыток установки и скачивания свежего драйвера, который вначале не помог, пришлось лезть в реестр и вычищать все, что относилось к этому модему, включая сэмулированный порт. Дальше все прошло как по маслу: модем обнаружился, распознался и установился при моем минимальном участии. В любом случае, ненужный мусор "давно минувших дней" еще никому не помогал. (Однако имейте в виду, что в редакторе нет команды "отменить" - удаления необратимы.)

При написании данного материала я столкнулся с неожиданной проблемой: Word 7.0 ни в какую не желал импортировать картинки .JPG, хотя все настройки были в порядке. Можно, конечно, было конвертировать файлы в .BMP, против которых Word не возражал, однако я пошел иным путем - запустил REGEDIT и задал ключом для поиска (Ctrl+F) слово "JPEG". Редактор открыл длиннющий адрес: HKEY_LOCAL_MASHINE/Software/Microsoft/ Shared Tools/Graphics Filters/Import/JPEG. По параметру "Path" не трудно было догадаться, какой фильтр импортирует .JPEG и где он "лежит".

Я проверил этот путь и, естественно, не обнаружил ни директории, ни такого файла с расширением .FLT. Дальнейшее было делом техники: переписать нужный файл с другого компьютера не составило большого труда. Все заработало сразу же. Конечно, не всегда все может получиться так гладко - поиск в реестре обычно выдает множество ссылок (они листаются по F3), и не факт, что одним махом удастся все исправить, однако в предыдущем примере я руководствовался только интуицией, и результат превзошел ожидания.

Или вот еще такой случай, он касается мультиконфигурационной настройки системы: один "несознательный" ноутбук, будучи включенным в офисную сеть, переписал из нее чужие юзеровские настройки, с корнем удалив старые. Это удалось исправить, но при входе в сеть для ввода пароля невозможно было переключиться с русской раскладки клавиатуры на английскую. Произошла какая-то тотальная локализация операционной системы. Данные о раскладке клавиатуры хранятся под ключом HKEY_CURRENT_USER\ \Keyboard Layout\Preload, и дальше есть две папочки: в одной стоит цифра 00000409, в другой - 00000419. Когда эти цифры поменяли местами, то все стало нормально.

Можно с помощью редактора реестра сделать несколько мелких, но приятных усовершенствований. (Можно, в принципе, их сделать много, но я расскажу лишь о проверенных лично.) Как известно, "Проводник" позволяет открывать папки либо все в одном окне, либо - каждую в своем. Путем нехитрой манипуляции можно при настройке "открывать все папки в одном окне" правой кнопкой мыши открыть какую-нибудь незнакомую папку в новом. Для этого нужно создать по адресу HKEY_CLASSES_ROOT\Directory\Shell новый подключ (раздел) "opennew" и присвоить ему значение "open new & window". В этом новом разделе создаем еще один подключ - "command" и присваиваем ему значение "C:\Windows\Explorer.exe %1". Разумеется, если у вас системная директория - Windows, а не WIN’95 или MS-WIN.95, иначе - укажите правильный путь. Теперь, заходя в панель "Проводника", можно, как и раньше, открывать папку двумя щелчками мыши, а можно, если выбрать в меню по правой кнопке мыши пункт "open new window", любую из них открыть в новом окне, сохранив предыдущее.

Если у вас не самый быстрый компьютер, то можно значительно ускорить работу за счет более быстрого появления "всплывающих" меню. Для этого по адресу HKEY_CURRENT_USER\Control Panel\Desktop надо добавить (в правом окне) строковое значение MenuShowDelay и присвоить ему значение "1". (диапазон значений 1-10). На 486-х машинах ускорение видно невооруженным глазом.

Для автоматического обновления экрана в "Проводнике" или "Моем компьютере" нужно по адресу HKEY_LOCAL_MASHINE\System\CurrentControlSet\ Control\Update изменить двоичное значение параметра UpdateMode с "0000 01" на "0000 07".

Наконец, если на вашем компьютере много файлов с расширением .BMP, можно просматривать их содержимое в виде иконок непосредственно в "Проводнике". Для этого по адресу HKEY_CLASSES_ROOT\Paint.Picture\DefaultIcon измените значение последнего подключа с "default" на "%1". Если подключа "DefaultIcon" у вас нет, то самое время его создать. Теперь заходите "Проводником" в директорию WINDOWS и ныряйте в самый конец: вот они, узоры для экрана, в лучшем, чем раньше, виде.

Однако с реестром нужно обращаться крайне осторожно. Если вы там что-то испортите (например, изменяя шестнадцатеричные значения), то не надейтесь на службу технической поддержки Microsoft - на вопросы о реестре здесь не отвечают (зачем же тогда в комплекте поставки утилита REGEDIT? Видимо, опять аллигаторы. См. эпиграф). Собственно, для того и придумали PnP, чтобы поменьше пользователей копалось в системных файлах.

Теперь о важном: для штатного копирования системного реестра существует утилита CFGBACK (ее можно найти по адресу www.microsoft.com/Softlib/MSLfiles/cfgbk.exe).

Однако наилучшим мне представляется другой способ. Перезагрузитесь в режиме Command Prompt Only (в момент появления надписи "Starting Windows 95" нажмите F8 и выберите указанный режим; кажется, это пункт 6), затем наберите команду REGEDIT /E C:\COPYREG.REG.

Редактор реестра при этом скопирует информацию из системной директории в указанный файл по предложенному пути. В данном примере по ключу /E(XPORT) создается файл COPYREG.REG в корневом каталоге диска С. Разумеется, название файла и путь можно изменить.

Восстановление происходит аналогично, только без ключа /Е.

Существует утилита, предназначенная непосредственно для очистки реестра от мусора и освобождения его от ошибок, - Microsoft RegClean, у меня стоит версия 4.1 (находится там же, где и предыдущая, файл REGCLEAN.EXE). Из ее описания легко проследить стратегию Microsoft, которая предусматривает в будущем объединение операционных систем Windows 9х и NT: там четко указано, что утилита подходит для использования с Windows 95 и более поздними версиями, а также с NT 4.0 и выше, и даже с NT 3.51. Так что Windows 98 - скорее всего, последняя ОС этой серии.

Существует немало программ, специально предназначенных для правки реестра. Например, Winhacker запросто переименует вашу "Корзину" в "Мусорку" или еще как захотите. Это все-таки лучше, чем лезть в реестр непосредственно. Tweak UI вместо здоровых стрелок на стандартных ярлыках сделает вам маленькие и аккуратные. Она же будет по вашей просьбе автоматически вводить параметры для входа в сеть. Продолжать можно долго. Обе эти программы, как и многие другие, весьма полезные, можно найти по адресу castle.sonnet.ru/~romix/ww95utl.htm.

Если с вашим реестром случилось непоправимое, могу посоветовать лишь загрузиться с резервной дискеты, которую предлагается создать при инсталляции системы, и попытаться восстановить реестр, как описано выше, из резервной копии. Если вы не успели сделать копию - попробуйте поменять расширения копий файлов реестра .DA0 в .DAT и перегрузиться. (Пытаться нужно после первой же неудачной загрузки!)

Может возникнуть ситуация, когда после вроде бы успешной установки Windows не грузится. Есть еще один файл, который можно отнести к реестру, помимо двух вышеупомянутых, - SYSTEM.1st. Он создается при первом запуске программы setup для Windows 9х. Замените им файл SYSTEM.DAT и перезагрузитесь.

Наконец, если система выдает сообщение, что невозможно обнаружить файлы реестра, хотя они вроде бы на месте и в порядке, попробуйте отредактировать файл MSDOS.SYS, чтобы его содержимое выглядело следующим образом:

[Paths]
WinDir=C:\Windows

указываем системный каталог

WinBootDir=C:\Windows
указываем местонахождение файлов для загрузки

HostWinBootDrv=C
указываем корневой каталог

[Options]
BootMulti=1

разрешаем загрузку второй ОС, помимо Windows
BootGui=1
разрешаем графический пользовательский интерфейс
Network=1
разрешаем работу в сети

Размер файла не должен быть меньше 1024 байт, иначе антивирусные программы могут его удалить.

Напоследок хочу посоветовать в своей повседневной работе использовать все возможности стандартных средств конфигурирования системы (иногда бывает достаточно прочитать файл READ.ME, перед тем как начинать инсталляцию) и открывать редактор реестра только в случае, когда это действительно необходимо. Тогда "аварийная" часть данной статьи вам вряд ли когда-нибудь пригодится. (Не стоит также щелкать мышкой по незнакомым файлам с расширением .REG - их содержимое будет импортировано в реестр без всяких дополнительных расспросов и может заменить уже имеющуюся информацию на неверную.)

 

В то время как реестр является своеобразным хранилищем информации о системе и оборудовании, поиском и изменением уже имеющихся данных занимаются другие компоненты системы. К ним относятся диспетчер виртуальных машин, диспетчер файловой системы и диспетчер конфигурации.

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

Наиболее интересен и важен для нас, юзеров, диспетчер конфигурации. Именно он является основным средством конфигурирования аппаратной части компьютера. Главная задача диспетчера конфигурации заключается в том, чтобы гарантированно обнаружить все установленные устройства, обеспечить их ресурсами и отразить все изменения в реестре, причем динамически (это и есть задача стандарта PnP).

В свою очередь, диспетчер конфигурации не выполняет все перечисленные функции "лично". Он вроде регулировщика на перекрестке. Ответственность за то, чтобы обнаружить и распознать устройство, несет энумератор шины. Он же выстраивает древовидную структуру шин и устройств на них. Информацию об PnP-устройствах энумератор получает непосредственно от устройств, а о прочих - из реестра, куда информация попадает на стадии загрузки стараниями диспетчера конфигурации, который взаимодействует с BIOS. Каждому устройству присваивается уникальный идентификатор, согласно правилам, принятым для конкретной шины или устройства. (Еще один плюс в плане совместимости.) Полученная информация передается энумератором диспетчеру конфигурации с "рекомендациями" относительно ресурсов. Диспетчер выделяет необходимые IRQ, диапазоны адресов ввода/вывода и т. д. Необходимую информацию о том, как это лучше сделать, предоставляет арбитр ресурсов. В случае конфликта арбитр попытается переназначить ресурс или выведет сообщение о необходимости ручной настройки. Арбитры специализированы: различают, например, арбитр портов ввода/вывода, арбитр каналов DMA. После того как устройство обнаружено и обеспечено ресурсами, диспетчер конфигурации начинает взаимодействовать с драйвером устройства.

Необходимо отметить, что в Windows 9x используется несколько типов драйверов: помимо привычных нам драйверов производителей оборудования (OEM-драйверы), в системе существуют универсальные драйверы классов устройств. Они описывают стандартные типы мониторов, модемов и т. д. То есть во многих случаях можно обойтись без ОЕМ-драйверов, хотя именно они обеспечивают максимальную эффективность используемого оборудования. Данный подход позволил Microsoft облегчить жизнь производителям оборудования, предназначенного для работы под Windows 9x. Фактически драйверы производителей представляют собой надстройку над стандартными драйверами системы, являясь при этом опциональными.

Еще один тип драйверов Windows 9x - виртуальные. Обозначаются как .VxD, где символ х заменяется на букву, соответствующую классу устройств, например VDD - виртуальные драйверы дисплеев. Виртуальные драйверы представляют собой драйверы защищенного режима, обеспечивающие доступ нескольких приложений к одному и тому же ресурсу. При переключении между приложениями виртуальные машины отслеживают изменение состояния устройства, а обработкой прерываний занимаются виртуальные драйверы. Говоря по-русски, если вы открыли сеанс MS DOS и надолго "ушли" обратно в Windows, то при возвращении в DOS виртуальная машина с помощью виртуального драйвера обеспечит вам именно то состояние сеанса, которое вы оставили. Виртуальные драйверы загружаются динамически, по мере необходимости (в отличие от Windows 3.х, где виртуальные драйверы нередко занимали память после освобождения устройства).

Распознанные устройства располагаются в реестре под ключом HKEY_LOCAL_MACHINE\Enum в зависимости от принадлежности какой-либо шине или классу устройств. К примеру, информация о жестких дисках располагается по адресу HKEY_LOCAL_MACHINE\Enum\ESDI.

Если вы работаете с системой, полностью соответствующей требованиям PnP, то проблем с распознаванием устройств и выделением ресурсов быть не должно. Однако для этого необходимо выполнение трех условий: во-первых, наличие на плате PnP-BIOS, во-вторых, соответствие всех устройств стандарту PnP и, в-третьих, наличие поддержки PnP в самой операционной системе. Последнее мы автоматически имеем. Первые два - реже. Как же настраиваются не PnP-устройства? При загрузке система определяет, какие устройства не являются автоматически конфигурируемыми, и назначает им ресурсы в первую очередь, пользуясь информацией BIOS. То, что осталось (PnP), конфигурируется автоматически (поскольку "умеет" динамически реагировать на изменение настроек). Обнаруженные устройства идентифицируются согласно схеме идентификационных номеров. Допустим, у нас есть системная плата с обычной BIOS и устройствами, как PnP, так и не PnP. При загрузке система обработает первыми, как сказано выше, устаревшие типы устройств. При этом энумератор шины воспользуется стандартными идентификаторами типов.

© ООО "Компьютерра-Онлайн", 1997-2019
При цитировании и использовании любых материалов ссылка на "Компьютерру" обязательна.