перехват голубого экрана командой bpm "KeBugCheckEx X" в soft-ice
Прокручивая окно дизассемблера вниз, находим первую инструкцию "RET 14h" (в нашем случае она располагается по адресу 8042C1E9h). Это и есть команда выхода из функции на которую нужно сделать jmp. Для быстрого поиска можно попросить soft-ice сделать search ("s eip l -1 C2,14,00").
Говорим отладчику "r eip = 8042C1E9" (у вас адрес скорее всего будет другим) и давим на <Ctrl-D> для выхода. Отладчик всплывает повторно, в той же самой функции. У нас ничего не получилось?! Не торопитесь с выводами! Все идет по плану! Игнорирование критических ошибок вызывает целый каскад вторичных исключений, что в данном случае и происходит. Повторяем нашу команду "r eip = 8042C1E9" (для этого достаточно нажать стрелку вверх/<ENTER>) и… система возвращается в нормальный режим! Третий раз отладчик уже не всплывает. Мышь немного тормозит, однако, гонять ее по коврику вполне возможно.
Приступаем к созданию драйвера, который будет все это делать за нас. Для начала нам понадобится скелет. Выглядит он так:
.386 ; использовать команды .386 ЦП
.model flat, stdcall ; плоская модель памяти, stdcall-вызовы по умолчанию
.code ; секция кода
DriverEntry proc ; точка входа в драйвер
; код "драйвера"
;
…
…
…
; возвращаем ошибку конфигурации
mov eax, 0C0000182h; STATUS_DEVICE_CONFIGURATION_ERROR
ret ; выходим
DriverEntry endp
end DriverEntry