Жизнь после BSOD

Автоматизируем нашу работу


Способ "ручного" восстановления, только что описанный выше, хорошо сочетается с духом системных программистов, постоянно пасущих soft-ice и умеющих фехтовать регистрами как рапирой. А вот простым смертным такой подход смерти подобен. Но почему бы нам не написать утилиту, зацикливающую сбойный поток или накоротко замыкающую KeBugCheckEx?

Написать-то такую штуку несложно (и мы действительно напишем ее), но… это все равно, что подложить полено под аварийный клапан. Если система пойдет в разнос, ее уже ничего не остановит и… как рванет! Хвост даже по запчастям не соберешь! Может пострадать даже файловая система (пусть это будет хоть NTFS). Пускай вероятность такой трагедии крайне мала, она все-таки возможна— имейте это ввиду. Тем не менее, рискнуть все-таки стоит, особенно в тех случаях, когда вы уверены, что это можно сделать.

Вот, например, возник у меня как-то конфликт между криво написанным драйвером DSL-модема и драйвером видеокарты из-за чего при просмотре видео иногда выскакивает BSOD. Поскольку, нормальных дров найти не удалось, я временно ограничился тем, что "закоротил" KeBugCheckEx перемычкой, изготовленной из команды JMP и… это "прижилось"!

Проведем следующий эксперимент. Нажмем <Ctrl-D> для вызова soft-ice, установим точку останова на KeBugCheckEx и… запустим наш драйвер-убийцу. Причем, точка останова обязательно должна быть аппаратной ("bpm KeBugCheckEx X"), а не программной (bpх KeBugCheckEx) иначе ничего не получится.

На этот раз вместо сообщения о ошибке страничного доступа, soft-ice всплывает по срабатыванию точки останова, высвечивая курсором первую команду функции KeBugCheckEx, которая в нашем случае располагается по адресу 8042BF14h.



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