Bsod какие драйвера нужны на компьютер. Использование Driver Verifier для выявления проблемного драйвера. Чтение файла дампа

Причин возникновения BSOD много, но мы в этой статье будем рассматривать проблему, возникающую из-за конфликта установленных драйверов. Это может быть только что установленный драйвер или поврежденный. Устранить проблему BSOD можно довольно просто, если дело всего лишь в драйвере, и вы знаете, в каком именно. Драйвер можно переустановить или обновить его, сделать откат к старой версии или избавиться от приложения, установившее драйвер на ваш компьютер, путем его физического удаления. Проблема в том, что не всегда можно узнать, какой именно драйвер является «виновником», даже изучив все данные с синего экрана. Но выход есть. Если вы не обладаете большими знаниями и опытом, а необходимость в проверке драйверов есть, можно воспользоваться специальным, встроенным в ОС для таких случаев, проверочным средством Verifier.exe. Имеющееся описание в базе знаний Microsoft изложено с использованием сложных технических терминов, которые не всегда известны даже опытным пользователям. Поэтому в этой статье преподнесен краткий список манипуляций, необходимых для выполнения поставленной задачи. Запуск средства проверки драйверов Открыв меню «Пуск», вводим в поисковом поле запрос «Выполнить» и кликаем на появившемся сверху результате. В появившемся окне необходимо ввести команду «verifier » (без кавычек) и подтвердить нажатием «Ок».
Появится диалоговое окно Диспетчера проверки файлов. В первом диалоге нужно выбрать пункт «Создать нестандартные параметры (для кода программ)». Нажимаем «Далее».
Следующим шагом будет выбор отдельных параметров для тестирования драйвера. Для этого проведем следующие манипуляции: «Выбрать отдельные параметры из полного списка» - «Далее».
После проведенных действий вы должны получить диалоговое окно со списком параметров тестирования. Поставьте галочки везде, кроме пункта «Имитация нехватки ресурсов». Нажмите «Далее».
Последним шагом в этой части дадим диспетчеру команду для автоматического выбора неподписанных драйверов. Выберите «Автоматически выбирать неподписанные драйверы». Нажмите «Далее».
Случается, что диспетчер не обнаружил неподписанные драйверы. Тогда пользуйтесь функцией выборочной проверки драйверов, о которой будет рассказано далее. Работа с неподписанными драйверами При обнаружении неподписанных драйверов, диспетчер выведет их в виде списка.
Это могут быть драйверы для устройств или для приложений. После того, как были обнаружены неподписанные драйверы, не нужно закрывать диспетчер и нажимать кнопку «Готово». Сначала проведем проверку наличия обновленных драйверов. Поиск обновленных драйверов Для проверки необходимо выполнить следующие действия: 1. В списке есть драйвер приложения. В этом случае нужно посетить сайт производителя приложения для проверки наличия обновленных драйверов. В случае, когда обновленная версия драйвера отсутствует, попробуйте удалить приложение. Не бойтесь, всегда можно установить его после снова. Зато это будет отличной проверкой: если критических ошибок больше не возникает – причина была в данном приложении. 2. В списке есть драйвер устройства. В этом случае, (если у вас Windows Vista), запустите центр обновлений и включите функцию поиска нового драйвера. Если отыщется новый драйвер, запустите его установку. 3. В случае, когда центр обновлений не нашел новый драйвер, загляните на сайт производителей, вероятно, что новый драйвер окажется там. Обновив драйвер или приложение, закройте диспетчер проверки (кнопка «Отмена»), запустите перезагрузку и дождитесь загрузки ОС. Если критические ошибки прекратились – обновление драйверов или приложений устранило их. Удаление драйверов В случае, если новые драйвера не получилось найти, можно попробовать удалить драйвер. ВНИМАНИЕ! При удалении драйвера работа устройства будет прекращена. Перезагрузившись, ОС предпримет попытку установить драйвер из хранилища, но не факт, что стандартный драйвер подойдет. Если у вас нет уверенности в необходимости удаления какого-либо драйвера – не стоит его удалять. Запустите диспетчер устройств, для чего совершите следующие манипуляции: Пуск – Выполнить – devmgmt.msc – Enter. Найдя нужное устройство, кликните по нему правой кнопкой мыши и нажмите Свойства – Драйвер – Удалить. Проверка неподписанных драйверов ВНИМАНИЕ! По окончании проверки неподписанных драйверов, может случиться так, что система не будет загружаться. Ниже идет описание действий, совершаемых в этой ситуации. Если вы не уверены в том, что хотите удалить драйвер и все-таки продолжите проверку, нажмите кнопку «Готово» в диспетчере проверки. При запросе выбора физического диска выберите тот, на который установлена ОС, после чего снова нажмите кнопку «Готово». Вы увидите сообщение с текстом: «Для того, чтобы изменения вступили в силу, необходимо перезагрузить компьютер». Спокойно закройте все приложения и запустите перезагрузку. В случае, если система не загрузилась и появился синий экран с описанием ошибки – значит, драйвер, вызывающий проблемы найден. Снова перезагрузив компьютер, перед загрузкой ОС нажмите F8 verifier.exe/reset verifier.exe
Выборочная проверка драйверов Заново запустите диспетчер проверки драйверов и проведите предыдущие манипуляция до момента, изображенного ниже.
Выберите пункт «Выбрать имя драйвера из списка». Следующим шагом будет окно выбора драйверов для проверки. Не стоит выбирать все драйверы сразу, потому, что ОС зарезервирует под проверку достаточно большое количество ресурсов и потратит на это много времени. Лучше повторить процедуру проверки несколько раз, но с малым количеством драйверов. Это сэкономит вам время и ресурсы. В первую очередь проверим драйверы, которые были обновлены недавно или просто проблемные драйверы (драйвер антивирусной программы, сетевого экрана, виртуального диска или машины). Следующим этапом пусть будет проверка драйверов, которые выпускает не Microsoft. Остальные драйверы проверяйте по 10-15 штук за раз.
Выберите нужные драйверы и нажмите кнопку «Готово». При запросе выбора физического диска выберите тот, на который установлена ОС, после чего снова нажмите кнопку «Готово». Появится сообщение о запросе перезагрузки. Перезагрузите компьютер. Если после перезагрузки появился синий экран с сообщением об ошибке – значит, драйвер, вызывающий проблемы найден. Снова перезагрузив компьютер, перед загрузкой ОС нажмитеF8 и выберите «Запуск в безопасном режиме». Войдя в систему, нажмите кнопку «Пуск» и введите в окно Выполнить/Поиск verifier.exe/reset . Если же проблем не возникло и система запустилась в стандартном режиме, значит, неподписанные драйверы не вызывают проблем и необходимо проверить другие драйверы. Вновь запустите диспетчер проверки драйверов (verifier.exe ) и выберите пункт «Вывести сведения о текущих проверенных драйверах».
Повторите проверку всех оставшихся драйверов. Окончание проверки драйверов В случае, когда проверка всех драйверов не выявила причин критических ошибок, скорее всего, дело не в драйверах. Проблемной может быть не программная, а аппаратная часть вашего компьютера. Скорее всего, это проблемы с жестким диском или оперативной памятью. Также может быть, что блоку питания не хватает мощности, чтобы обеспечить работу всех устройств или еще какая-то проблема в «железе», которую нельзя определить путем проверки драйверов. Продиагностируйте оперативную память и жесткий диск.

Неисправный драйвер может вызвать много проблем в работе компьютера. Главный признак того, что на вашем компьютере есть неисправный драйвер – это синий экран смерти, которые часто вызван отключением драйвера.

В этой статье мы расскажем, как можно найти неисправный драйвер, после чего обновить его или полностью удалить.

Иногда Windows уведомляет пользователя о том, что один из драйверов вышел из строя. Однако, бывает, что система не может обнаружить в чем проблема, поэтому не выдает сообщений об ошибке, из-за чего работает медленнее или не так как требуется. В этом случае Диспетчер проверки драйверов (Driver Verifier) создает дополнительную нагрузку на системные драйверы, тем самым пытается вызвать сбой. Если сбой одного из драйверов произойдет, тогда Диспетчер проверки драйверов сообщит о проблеме с помощью синего экрана.

Предупреждение

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

Если у вас не будет возможности попасть в Windows, чтобы отключить тестирование драйверов, компьютер будет работать в цикле «boot -> load -> crash» из которого довольно сложно выйти. Функция Automatic Repair является одним из немногих вариантов получить доступ к Windows, но лучше не допускать такой ситуации.

Перед использованием Driver Verifier убедитесь, что у вас есть хотя бы один из следующих аварийных выходов:

  • Вы можете перейти в безопасный режим. Переход в безопасный режим до начала загрузки Windows обычно выполняется путем многократного нажатия F8 во время загрузки компьютера. Однако, новые компьютеры загружаются так быстро, что вы просто не успеете нажать F8 в нужный момент.
  • Вы создали точку восстановления системы перед использованием Диспетчер проверки драйверов . Также желательно иметь установочный диск Windows, чтобы вы могли восстановить компьютер к заводским настройкам.

Как запустить Диспетчер проверки драйверов

Прежде чем начать инструкцию по использованию Диспетчера проверки драйверов , убедитесь, что вы прочитали раздел «Предупреждение» выше. Там написано как избежать бесконечной загрузки Windows.

Когда вы на сто процентов уверены, что у вас есть аварийный план выхода, нажмите «Windows Key + R » и введите cmd в диалоговом окне «Выполнить », затем нажмите «ОК ».

В командном окне введите:

verifier

Во всплывающем окне выберите «Создать нестандартные параметры (для кода программ) », затем нажмите «Далее ».

Вы увидите список всех тестов, которые вы можете выполнить для проверки драйверов. Выберите все тесты из списка, кроме «Симуляция случайно нехватки ресурсов» и «Дополнительная проверка соответствия требованиям DDI», затем нажмите «Далее ».

На следующем экране выберите «Выбрать названия драйверов из списка » и нажмите «Далее ».

Здесь вы можете выбрать драйверы, которые необходимо протестировать. Если вы не знаете, какой из драйверов работает неисправно, выберите все, кроме Microsoft, потому что они чаще всего работают без ошибок.

Когда вы нажмете «Готово », Windows предложит перезагрузить ПК. После того, как компьютер включится, продолжайте использовать его, как обычно. Если вы получите синий экран, обратите внимание на сообщение об ошибке, и перезагрузите компьютер.

Как только вы узнали неисправный драйвер, вы можете отключить Диспетчер проверки драйверов одним их двух способов. Вы можете заново открыть командную строку, ввести команду verifier , и выбрать «Удалить существующие параметры ».

Также вы можете открыть командную строку и ввести:

Verifier /bootmode resetonbootfail

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

Вывод

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

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

У вас когда-нибудь были проблемы с драйверами на компьютере? Как вам удалось найти неисправный драйвер? Расскажите нам в комментариях ниже!

Утилита Driver Verifier (verifier.exe) предназначена для анализа проблемных драйверов, когда анализ дампов памяти после BSOD не позволяет найти проблемный драйвер. Driver Verifier – это “палочка выручалочка” в наиболее проблемных ситуациях.

С помощью Driver Verifier можно выполнять:

    стресс тест драйвера (имитируются условия нехватки ресурсов);

    контроль переполнения буфера;

    контроль за ошибками, возникающими при неправильной работе при заданном IRQL;

    анализ ошибок ввода-вывода;

    детектирование ситуаций deadlock и т.д.

Утилита Driver Verifier бывает очень полезной когда:

    у администратора (пользователя) есть подозрения, что именно этот драйвер вызывает крах системы и он хочет дополнительно проверить так ли это на самом деле;

    разработчики драйвера, хотят протестировать свой драйвер;

    при анализе дампа после BSOD найти проблемный драйвер нельзя.

Одним из самых непростых случаев анализа дампов памяти является случай, когда драйвер ошибочно перезаписывает данные до начала или за концом буфера, выделенного им. В таких случаях, возникают ошибки в ядре ОС (например, анализ дампа после BSOD показывает, что ошибка возникла в ntoskrnl.exe).

Давайте посмотрим подобный случай на конкретном примере. С помощью утилиты NotMyfault вызываем BSOD — “Buffer overflow”.

Результат анализа дампа с помощью windbg во вложении ниже.

Согласно анализа дампа получаем.

1. Arg1: 00000007, Attempt to free pool which was already freed (была попытка освобождения уже освобожденного пула)

2. IMAGE_NAME: ntkrpamp.exe (отношение к этому имеет само ядро системы)

Именно при подобных ошибках, на помощь приходит verifier.

Запускаем verifier.

Выбираем “Создать не стандартные параметры”. Далее выбираем “Выбрать параметры из списка”.

Выбираем все кроме “Имитация нехватки ресурсов”.

После чего выбираем “Выбрать незагруженные драйверы к этому списку” и указываем путь к драйверу myfault.sys, который находится в том же каталоге, что и программа NotMyfault.exe.

После чего отмечаем драйвер и нажимаем “Готово”. После этого, нам необходимо перегрузить компьютер.

Выполняем все те же действия, что и в начале. Запускаем NotMyfault.exe, выбираем “Buffer overflow” и нажимаем “Crash”. Как вы заметили крах может произойти не сразу, поскольку кто и когда будет пытаться работать с этой памятью неизвестно заранее. Как видим на изображении ниже, благодаря verifier система может определить проблемный драйвер.

Приведу анализ с помощью!analyze –v в windbg.exe дампа памяти после BSOD.

Программа verifier делает так, что проверяемый драйвер вместо обыкновенной памяти доступной в ядре использует специальный пул, предназначенный для определения подобной ошибки. Благодаря этому, можно найти драйвер, который приводит к BSOD.

Если посмотреть результаты анализа то мы видим следующее.

1. DRIVER_PAGE_FAULT_BEYOND_END_OF_ALLOCATION (d6) – это одна из ошибок, которая генерируется verifier

2. IMAGE_NAME: myfault.sys – драйвер, который привел к проблеме.

Таким образом, если анализ дампа памяти после BSOD не позволяет найти “виновный драйвер” воспользуйтесь программой verifier.exe (установите все проверки, кроме нехватки памяти).

Наиболее простым вариантом использования Driver Verifier (verifier.exe) является его запуск со следующими параметрами:

verifier /standard /driver имя файла драйвера

Утилита Driver Verifier входит в состав всех версий Windows, начиная с Windows XP, и позволяет выполнять проверку драйверов, выявлять проблемные драйвера, являющиеся причиной синего экрана смерти (BSOD — Blue Screen of Death) и записывать подробную информацию о проблемном драйвере в дамп памяти для дальнейшего анализа. Утилита подвергает проверяемые драйвера различным «стресс-тестам », имитируя различные экстремальные условия: нехватка памяти, контроль I/O, IRQL, взаимные блокировки, проверки DMA, IRP и пр. Т.е. имитируются ситуации, которые на продуктивных системах случаются нечасто, и отслеживается поведения драйвера в них. Цель работы утилиты – выявить ситуации, при которых драйвер может привести к аварийному завершению работы системы с BSOD.

Исполняемый файл утилиты Driver Verifier называется Verifier. exe и находится в каталоге %windir%\system32. Есть два варианта использования утилиты: из командой строки или с помощью графического интерфейса.

Чтобы включить режим проверки драйверов в Windows 8, запустите утилиту Driver Verifier, набрав

Verifier

В списке задач выберите Create custom settings (for code developers) и нажмите Next .

Убедитесь, что выбраны опции Standard settings , Force pending I/O requests и IRP Logging . Нажмите Next .

Далее выберите .

Отсортируйте содержимое таблицы, щелкнув по заголовку столбца «Provider» и в списке драйверов выберите те, которые необходимо протестировать. В нашем примере мы запустим проверку для всех драйверов, разработчиком которых не является Microsoft Corporation . Мы выбрали драйвера: e1g6032e.sys (Intel) и lsi_sas.sys (LSI).

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

Осталось нажать Finish и появится информационно окно о том, что для вступления изменений в силу нужно перезагрузить систему.

Совет . Режим проверки для драйвера можно включить и из командной строки. Например, чтобы запустить Driver Verifier со стандартными настройками для драйвера myPCDriver.sys, команда будет выглядеть так: verifier /standard /driver myPCDriver.sys

После перезагрузки система загружается в режиме проверки драйверов. Driver Verifier работает в фоновом режиме, выполняя различные виды тестирования выбранных драйверов на предмет выявления ошибок. Используйте компьютер как обычно и дождитесь появления BSOD. Если вы знаете, какие действия приводили ранее к аварийному завершению работы системы, повторите их. В случае появления BSOD необходимо скопировать файл дампа памяти (по умолчанию сохраняются в каталоге C:\Windows\Minidump\*.dmp) и проанализировать его с помощью Windbg или аналога.

Важно! После активации режима отладки драйверов с помощью Driver Verifier, этот режим будет работать до тех пор, пока не будет отключен принудительно.

В том случае, если в течении 1-2 дней проблема не повторилась, то с определенной степенью достоверности можно сделать вывод, что проверяемые драйвера не являются причиной падения системы и режим проверки для них можно отключить.

Совет . Использование средства проверки драйверов Windows существенно замедляет работу Windows, поэтому не рекомендуется постоянно работать в таком режиме.

Отключить проверку Driver Verifier можно из командной строки:

Verifier /reset

Или из графического интерфейса, выбрав пункт Delete existing settings .

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

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

  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\VerifyDrivers
  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\VerifyDriverLevel

Проверить текущий статус утилиты Driver Verifier можно так.

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

И как только не ругают Windows от Microsoft , называя бедняжку одновременно и тормозной, и глючной и даже нестабильной. Только вот отказываться от нее никто не спешит, да и вообще вряд ли уже когда-нибудь откажется. Поэтому, вместо того чтобы ругать бедных разработчиков и разводить бессмысленный флейм, хорошо бы разобраться: а почему, собственно, система глючит? Открою тебе небольшой секрет. В пресловутых экранах смерти и нестабильной работе Windows в подавляющем большинстве случаев виноваты драйверы сторонних производителей, а сама операционка здесь абсолютно не при чем. Сейчас мы расскажем, как такие драйверы обнаружить и из системы удалить.

Дефекты проектирования драйверов могут носить самый разный характер: от выпадений в голубой экран смерти (BSOD – Blue Screen of Death) и до замедления работы компьютера и странностей поведения некоторых совсем не связанных с драйвером прикладных приложений.

Голубой экран смерти замечателен (без всякой иронии!) тем, что явным образом сигнализирует о наличие серьезной проблемы и дает наводку, откуда рыть. Зачастую (но далеко не всегда) имя «провинившегося» драйвера высвечивается непосредственно в правом верхнем углу голубого экрана смерти. Однако там его может и не быть или, что еще хуже, там может стоять имя совершенно постороннего драйвера.

Так, например, один довольно распространенный драйвер от видеокарты Matrox G450 имеет тенденцию разрушать базовые структуры графической подсистемы Windows 2000 , в результате чего в BSOD’е отображается имя системного драйвера win32k.sys , в котором реализована значительная часть функций USER и GDI и который, естественно, тут совсем ни при чем. Так что интерпретация показаний голубого экраном смерти – это и магия, и интуиция, и наука, и искусство - всего понемножку.

Помимо дефектов драйверов, голубые экраны смерти могут также вызываться отказами железа, например разогнанным процессором, неисправной оперативной памятью, кривым контроллером жесткого диска, не до конца воткнутой в слот PCI-картой, неконтактом в одном из разъемов, плохим блоком питания, вздутым электролитическим конденсатором на материнской плате. А дуются последние по разным причинам: из-за перегрева от рядом расположенного процессора, недостатка керамических конденсаторов, «недоложенных» производителем (в результате чего ВЧ-составляющая идет через электролит и сильно его разогревает), наконец, из-за утечки ключевых транзисторов в узле стабилизатора. Поэтому, прежде чем колоть дрова, необходимо убедиться, что железо, на котором мы сидим, полностью исправно. А как это можно сделать?

Разборки с железом

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

Чтобы снять с железа все подозрения, достаточно подключить к системе еще один жесткий диск, установить на него девственно чистую Windows и поработать на ней некоторое время. Если голубые экраны смерти не исчезнут, значит, действительно, виновато железо и его пришла пора менять. Поиск дефективных компонентов - тема для отдельного разговора, который мы оставим на следующий раз, а пока, засучив рукава, вплотную возьмемся за эти коварные драйверы.

Дрова без сертификата сразу в топку

Весь комплект инструментария, необходимый для разработки драйверов (DDK – Driver Development Kit), Microsoft распространяет бесплатно вместе с сопутствующей ему документацией. Драйверов, подчас очень глючных и нестабильных.

Чтобы такого беспредела не происходило, Microsoft еще в стародавние времена ввела процедуру сертификации драйверов на соответствие предъявляемым к ним требованиям, после которой драйверу выдается цифровая подпись. Или… не выдается, и он отправлялся на доработку. И хотя сертификация - всего лишь формальная процедура, не гарантирующая отсутствие фатальных ошибок и дефектов разработки, часть откровенно «пионерских» драйверов она все-таки отсеивает.

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

В этом нам поможет утилита sigverif.exe , входящая в штатный комплект поставки операционной системы и располагающаяся в каталоге WINNT\System32. Запускаем ее и видим диалоговое окно. Нажимаем кнопку «Дополнительно» и во вкладке «Поиск» настраиваем критерии отбора, перемещая радиокнопку из положения «Уведомлять о неподписанных системных файлах» (где она и прозябала по умолчанию) в положение «Искать другие файлы, не подписанные цифровой подписью». После этого в «Параметрах поиска» открываем бокс «Искать файлы следующего типа» и выбираем «*.sys», а ниже указываем папку для поиска «C:\WINNT», обязательно отметив галочку «Включая подпапки».

Вообще-то, строго говоря, драйверы не обязаны иметь расширение sys и далеко не всегда ограничиваются каталогом WINNT, находясь в каталогах «своих» приложений, а некоторые приложения и вовсе хранят драйверы… внутри себя! Сразу же после запуска (или в любое другое время) они сохраняют файл на диск в текущую или временную директорию, загружают драйвер в память и… тут же удаляют его с диска! Так поступают не только зловредные вирусы, но и вполне респектабельные программы, вроде некоторых утилит известного исследователя недр Windows Марка Руссиновича.

Поэтому для чистоты эксперимента нам совсем не помешает получить список драйверов, находящихся в данный момент в памяти, и сравнить их с драйверами, расположенными на диске. Слова «в данный момент» – ключевые, поскольку загрузка/выгрузка драйверов может происходить бесплатно без перезагрузки операционной системы. Эту операцию желательно выполнить несколько раз, запуская утилиту командной строки drivers.exe, входящую в состав DDK, который можно скачать с сервера копании Microsoft. Запущенная без каких-либо ключей командой строки, утилита drives.exe вываливает всю информацию на экран, что не есть хорошо, поскольку драйверов в системе обычно присутствует очень много и на экран они не помещаются. Однако религия нам позволяет перенаправить поток вывода в текстовой файл (drivers.exe >file-name.txt ), открываемый любым текстовым редактором - хоть Word’ом, хоть блокнотом. Затем остается только выделить вертикальный блок (чего блокнот не позволяет) и получить список драйверов. Прямо из ядра операционной системы!

Если хотя бы один из этих драйверов отсутствует в каталоге C:\WINNT\, то его цифровая подпись проверена не будет! Естественно, такой драйвер сразу же привлекает к себе внимание, и у нас появляется резонный вопрос: откуда он берется? Сначала сканируем все каталоги на диске; если его там нет, устанавливаем точку останова на функцию CreateFileW в Soft-Ice и смотрим на передаваемые ей аргументы. Рано или поздно мы встретим наш глючный драйвер, после чего останется только взглянуть в правый нижний угол экрана Soft-Ice, где высвечивается имя процесса, породившего его. Более подробно – в книге «Техника отладки программ без исходных текстов», электронную копию которой можно найти на ftp- или http-сервере nezumi.org.ru , а также на нашем диске. А мы продолжаем терзать утилиту sigverif.exe .

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

Некоторые горячие головы предлагают, в порядке очищения системы от ереси, удалить все неподписанные драйверы – тогда, мол, все проблемы как хвостом снимет. А как это можно сделать? Самое грубое решение - просто взять и удалить их с диска через FAR или проводник (естественно, обладая правами администратора!). Но последствия такой операции могут оказаться весьма плачевными, и лучше, кликнув правой клавишей мыши на иконку драйвера в проводнике, найти в «Свойствах» имя производителя, по которому можно определить, что за приложение/железка установила этот драйвер, и деинсталлировать ее цивилизованным путем. Правда, здесь есть одно «но».

На приведенном рисунке выделен драйвер g400m.sys , идущий вместе с картой Matrox G450, и хотя Matrox совсем не хилая компания, цифровую подпись она не получила (то ли Microsoft не дала, то ли сама Matrox не захотела заморачиваться). Естественно, после удаления его из системы, о SVGA-режиме придется забыть. Можно, правда, сходить на сайт Matrox, скачав самую последнюю версию драйвера (она уже снабжена цифровой подписью). Только вот… и подписанная, и неподписанная версии содержат множество фатальных ошибок, в частности, в результате стечения определенных обстоятельствах при попытке перейти в overlay mode, система падает в BSOD, поскольку драйвер пытается освободить уже освобожденную память.

Таким образом, наличие/отсутствие цифровой подписи само по себе еще ни о чем не говорит, и, даже если мы используем только подписанные драйверы, никаких гарантий стабильности это нам не дает.

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

Устраиваем дровам настоящее испытание

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

Важно отметить, что Driver Verifier - это не лекарство, а только средство диагностики. От сбоев оно все равно не спасет (напротив, увеличит их интенсивность на пару порядков), но зато поможет выявить «подлый» драйвер с достаточной степенью достоверности.

Итак, запускаем verifier.exe, видим окно Driver Verifier Manager , идем в закладку Setting и переводим радиокнопку в положение Verify all drivers, после чего давим кнопку «Preferred Setting», устанавливающую следующие типы проверок (verification type):

  • Special pool – проверяемым драйверам будет отведена специальная область памяти для выделения, не очень быстро работающая, зато способная обнаруживать большинство типов разрушений своих и чужих данных.
  • Force IRQL checking. IRQL – это уровень запроса прерываний (Interrupt Request Level). Наиболее частой ошибкой разработчиков драйверов является попытка обратиться к памяти на таком уровне IRQL, на котором менеджер подкачки не работает. И если требуемая страница вдруг окажется вытесненной на диск, система обернется в голубой экран с надписью «IRQL_LESS_OR_EQULAR». Форсирование этого режима принудительно вытесняет страницы драйвера на диск, чтобы дефект разработки проявлялся в 100% случаев.
  • Low resource simulation полезно установить, чтобы посмотреть, как драйвер будет вести себя при катастрофической нехватке системных ресурсов, однако этого можно и не делать, а вот галочку Pool tracking (отслеживание корректности обращения с пулом памяти) лучше оставить. Ошибки ввода/вывода (I/O verification) составляют ничтожную часть всех ошибок, поэтому положение этой галки в общем-то совершенно некритично.

Покончив с выбором настроек, нажимаем кнопку «Apply» (применить) и, как нам и предлагают, перезагружаемся.

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

Узнать статус проверки можно в любой момент запуском verifier.exe. В закладке Driver Status перечислены статусы всех обнаруженных драйверов с пояснением текущей ситуации. Статус Loaded означает, что данный драйвер был загружен и проверен, по крайней мере, один раз (но, возможно, не полностью, то есть не все участки драйвера успели отработать). Статус Unloaded готовит о том, что драйвер был загружен, проверен (возможно, частично) и выгружен использующей его системой/программой или по своему собственному желанию. Последнее особенно характерно для драйверов, оставшихся от оборудования, которое было удалено путем варварского выдергивая платы расширения из слота, то есть без выполнения деинсталляции. Оставшийся в живых драйвер сканирует шину, пытаясь нащупать «свое» оборудование, обламывается с поиском, после чего выгружает себя из памяти, кстати говоря, замедляя загрузку системы (иногда очень значительно) и конфликтуя с другими драйверами. Мораль: оборудование из системы нужно удалять по всем правилам! Однако не всякий статус Unloaded -признак ненормальности ситуации, и, прежде чем удалять драйвер с таким статусом, нужно разобраться, что это за северный олень такой и откуда он вообще тут взялся.

Статус Never Loaded указывает на то, что данный драйвер еще не был загружен, а значит, не был и проверен, следовательно, надо подождать, запуская различные программы, которые могут быть с ним связаны. Впрочем, некоторые драйверы (особенно некорректно деинсталлированные) не загружаются и, соответственно, не проверяются никогда.

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

Вернуть систему в нормальный режим (то есть без дополнительных проверок, сжирающих производительность), можно с помощью все того же verifier’а. Возвращаемся к закладке Setting, переводим радиокнопку в положение Verify selected drivers (при этом никакой драйвер не должен быть выделен), давим на «Reset All», затем на «Apply» и перезагружаемся. Все! Теперь система работает с нормальной скоростью, но без проверок.

Что делать с сырыми дровами?

А действительно, что можно сделать с дефектным драйвером? Хакеры, умеющие держать отладчик в руках, при наличии достаточного количества свободного времени, могут его дизассемблировать (благо по объему драйверы обычно небольшие), найти ошибку, и придумать способ ее исправления, но… это слишком трудоемкий путь.

Выбрасывать драйвер (вместе с тем железом/программой, что его использует) тоже не вариант. Хотя если известно, что в голубых экранах смерти виновата звуковая карта незнакомого китайского производителя стоимостью $20, то у нас появляется вполне весомая мотивация ее заменить чем-нибудь более достойным. Но это, собственно говоря, всем и так понятно и в дополнительных комментариях не нуждается.

Зато далеко не каждый знает, что огромное количество сбоев и голубых экранов смерти связано с тем, что драйвер, разработанный (и протестированный) в однопроцессорной среде, ставят на двухпроцессорную машину. Под «двухпроцессорностью» здесь имеется ввиду как реальная платформа с двумя камнями, так и Hyper-Threading/многоядерные процессоры. Известно (и подтверждено большим количеством тестов), что домашнему компьютеру два процессора совершенно ни к чему, так как на подавляющем большинстве приложений увеличение производительности при этом практически не наблюдается.

Поэтому если система работает нестабильно, а избавиться от дефектного драйвера по тем или иным обстоятельствам никак не удается, можно попробовать залезть в BIOS Setup, превратив свою «виртуальную двухпроцессорную» машину в однопроцессорную. Аналогичного эффекта можно добиться, открыв файл boot.ini (на компьютерах с Windows NT/2000/XP он расположен в корневом каталоге логического диска, на котором установлена система) и добавив к нему ключ /ONECPU, после чего перезагрузиться в надежде, что ошибки исчезнут.

Листинг 1

Пример типичного файла boot.ini


timeout=30

multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows 2000 Pro" /fastdetect /SOS

Листинг 2

Настраиваем систему на использование только одного процессора из всех имеющихся


timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINNT
multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows 2000 Pro" /fastdetect /SOS /ONECPU

А вот на Windows Vista файла boot.ini нет, и, хотя существует (временная) возможность сконфигурировать ее загрузочные настройки с помощью специальной утилиты, Microsoft планирует полностью отказаться от этой лазейки, так что останется только BIOS Setup. Впрочем, что касается Vista , то к моменту перехода на нее разработчики драйверов, наверняка, обзаведутся многопроцессорными машинами (поскольку других просто не останется в продаже) и будут тестировать свои творения в многопроцессорном окружении.

Еще один тонкий момент. Помнишь, мы выше говорили, что наиболее часто встречающаяся ошибка разработчиков драйверов - обращение к вытесняемой памяти на том уровне IRQL, на котором менеджер подкачки не работает, и если запрашиваемая страница отсутствует в памяти, наступает крах? Очевидным решением здесь будет увеличение оперативной памяти до того объема, при котором вытеснение страниц на диск практически не происходит. При нынешних ценах на память прикупить пару новых «плашек» может позволить себе практически каждый. Но существует и более доступное (и более элегантное) решение проблемы. Если параметр DisablePagingExecutive , находящийся в следующей ветке реестра HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\MemoryManagement , равен единице (по умолчанию нулю), ядерные компоненты вытесняться не будут. Поэтому просто запускаем «Редактор реестра», меняем этот заветный параметр и перезагружаемся (изменения вступают в силу только после перезагрузки), надеясь, что это поможет решить проблему сбоев.