Опасный драйв...

15 октябрь, 2002 - 23:00Игорь Дериев
Когда с появлением каждой новой версии Windows представители Microsoft рапортуют об очередных достижениях в области надежности, слово "драйвер" упоминается одним из первых. Так постепенно внедрялись (не только в систему, но и в умы разработчиков аппаратных средств) WDM-модель, WHQL-сертификация и прочие технологии и требования к качеству кода...
Не следует думать, что все это делается лишь в угоду совместимости, хотя данный показатель, безусловно, является одним из ключевых аспектов успеха ОС от Microsoft. И уж совсем здесь ни при чем лишние "эфпээсы" в суперсовременных 3D-играх -- как правило, тщательно выверенные (и только потом сертифицированные) драйверы обеспечивают несколько худшую производительность, чем их очередные бета-релизы. В первую очередь все упирается именно в надежность.

Дело в том, что драйверы устройств (в широком понимании последнего термина -- это вовсе не обязательно реальные аппаратные устройства) играют в Windows особую роль, поскольку функционируют в режиме ядра и вместе с ним разделяют единое виртуальное адресное пространство, причем никакие дополнительные защитные и контрольные меры при этом фактически не применяются. Как говорится -- одно неловкое движение, и... случается именно то, что принято определять неблагозвучным, труднопроизносимым и весьма устрашающим для новичков термином BSOD (Blue Screen Of Death). Поэтому совершенно не случайно в Windows появляются механизмы вроде Driver Protection.

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

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

Приведенная ниже информация ориентирована на Windows XP, однако большая ее часть окажется справедливой и для Windows 2000.


От простого...

Как известно, основное средство Windows для контроля за аппаратным обеспечением -- Device Manager (кстати, чтобы обеспечить максимально быстрый запуск, стоит создать ярлык для файла devmgmt.msc). Его применение для установки нового оборудования и разрешения конфликтов (необходимость в чем возникает все реже) достаточно очевидно. Наибольшую функциональность этот модуль приобрел именно в Windows XP. Так, кроме деинсталляции драйверов, появилась возможность их "отката", т. е. восстановления предыдущей конфигурации.

Гораздо менее известна и популярна способность Device Manager работать с не-аппаратными драйверами (хотя кое-что "железное" в данную категорию все же попадает). Для этого достаточно в меню View выбрать пункт Show hidden devices, а после заглянуть в раздел Non-plug and Play Drivers. Здесь действительно много интересного: от стандартных системных компонентов до резидентных модулей антивирусов, персональных брандмауэров и прочего стороннего ПО. Здесь же подозрительный драйвер ("вычисляется" либо эмпирическим путем, либо с помощью информации BSOD) можно попытаться запретить или деинсталлировать (не факт, что получится), а также изменить способ его загрузки.

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

set DEVMGR_SHOW_NONPRESENT_DEVICES=1
devmgmt.msc

и, опять же, углубившись в изучение "скрытых" устройств. Данная настройка будет актуальна только для текущей копии Device Manager. Если же она понадобится на более продолжительное время -- переменную окружения нужно указать в соответствующей вкладке окна свойств системы.

Кстати, вполне допустимо запускать несколько копий Device Manager, что удобно именно для выявления "лишних" драйверов (хотя они дополнительно помечаются "блеклыми" пиктограммами). В большинстве случаев таким образом вы обнаружите только "рудименты" в реестре, даже без привязки к реальным файлам. Однако и их иногда бывает полезно вычистить -- естественно, со знанием дела.

Существует еще один аналогичный трюк с Device Manager -- для отображения расширенной информации. За него отвечает переменная окружения, устанавливаемая следующей командой:

set DEVMGR_SHOW_DETAILS=1

При этом в свойствах драйвера появляется дополнительная вкладка, данные которой ориентированы в основном на разработчиков. Рядовой пользователь вряд ли почерпнет из нее что-то полезное для себя.


...через тернии...

Ближе познакомиться с установленными драйверами можно и с помощью еще одной стандартной утилиты -- System Information (msinfo32). Вся нужная информация находится в разделе System drivers группы Software Environment. Скажем, одна из доступных граф дает представление о том, какие драйверы могут динамически запускаться и останавливаться. Впрочем, эта программа именно информационная, внести какие-либо корректировки в конфигурацию системы с ее помощью не удастся. Device Manager также не слишком удобен для поиска информации о конкретном драйвере. В некоторых случаях лучше воспользоваться утилитами командной строки.

К таковым относятся driverquery, позволяющая получить общую информацию, сходную с предоставляемой System Information, и sc, обеспечивающая индивидуальную работу с драйверами (и системными службами): получение дополнительной информации, изменение типа активизации и пр. К примеру,

sc query cdrom

позволит узнать подробности о драйвере привода CD-ROM. Кроме query имеются команды start, stop, pause и другие, более полная информация о которых доступна по ключу /? или в справочном файле ntcmds.chm. Особую ценность представляет возможность обеих утилит работать с удаленными системами.

Если же все эксперименты сосредоточены исключительно на локальной машине, то есть еще более удобное средство -- бесплатная программа Driver Manager, функционально напоминающая стандартный системный апплет Services (кстати, у той же компании имеется и Service Manager). В вопросах поиска причины неисправности она одна способна заменить практически все названные утилиты.

Впрочем, все вышесказанное справедливо только для относительно благополучных ситуаций, когда компьютер загружается хотя бы в Safe Mode. Однако драйверы, особенно с типом активизации Boot или System (а к таковым относится в первую очередь большая часть аппаратных), весьма коварны. Если не помогает даже Last Known Good Configuration, придется воспользоваться аварийной консолью. Здесь, конечно же, особо не разгонишься, но некий "джентльменский набор" есть: listsvc (для получения списка установленных драйверов и служб), enable и disable (для управления ими).


...к победе

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

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

К счастью, существует несколько способов получения вспомогательной информации. Упоминавшаяся выше утилита driverquery имеет специальный ключ /si для проверки сигнатур. Правда, для не-аппаратных драйверов выдаются довольно противоречивые сведения, вплоть до отсутствия подписи даже у некоторых явно стандартных компонентов. Поэтому удобнее пользоваться более специализированным средством -- программой sigverif. После ее запуска рекомендуется перейти в окно настроек и выбрать дополнительную проверку всех файлов в папке \system32\drivers. В результате вы должны получить список модулей, не имеющих соответствующей сигнатуры.

Как с ними поступить -- зависит от ситуации. Если какой-то драйвер действительно вызывает подозрения, его можно запретить, деинсталлировать (с помощью одной из описанных выше методик), на худой конец -- попросту переименовать файл. Либо провести более тщательное "расследование" -- выяснить, к какому устройству или приложению он относится, попытаться его обновить, найти информацию о подобных проблемах и способах их преодоления в Microsoft Knowledge Base и пр.

В состав Windows XP входит еще одно даже более мощное средство, однако оно рассчитано в первую очередь на разработчиков и опытных системных администраторов. Утилита verifier позволяет не только обнаруживать неподписанные и устаревшие драйверы, но и выполнять достаточно подробный мониторинг их работы. Это пригодится в случае возникновения "плавающих" ошибок или невозможности (по тем или иным причинам) точной идентификации источника проблем. Однако перед началом работы с данным средством стоит разобраться с теорией (скажем, здесь: http://msdn.microsoft.com/library/en-us/ddtools/hh/ddtools/dv_7g8j.asp).

Изредка в данном контексте (если по какой-то невероятной причине повреждены именно стандартные системные файлы) может пригодиться утилита sfc, обеспечивающая интерфейс с Windows File Protection. Она позволяет проверить и восстановить все стандартные модули.

Напоследок, пожалуй, стоит еще раз напомнить о необходимости сбора как можно более подробной информации до применения описанных методик и средств, и да поможет вам Здравый Смысл.