Кто сталкивался с драйверами тоже интересна эта мысль. Мой драйвер иногда выдает BSOD из-за ошибок, я их исправляю, но только после перезагрузки. Может есть какой-то вариант просто перехватывать KeBugCheck или KeBugCheckEx с тем, чтобы вернуть нормальную работу ведь это просто мой драйвер глюканул, зачем Винду рушить ? Если не ошибаюсь, эти ф-ции вызываются когда Винда предпологает потерю данных или критическая ошибка, а я точно знаю, что из-за моего драйвера этого небудет... Если идея не новая киньте линком
Айс по умолчанию хучит KeBugCheckEx. Так что ты должен сначала оказаться в айсе. После этого появится возможность откатиться назад. Проблема в том, что очень часто это (откат) настолько сложно, что проще просто поребутиться. В KeBugCheckEx обычно оказываешься из-за того, что произошло какое-то исключение и его обработчик явно вызвал BSOD. Восстановить eip,esp,ebp,esi,edi,ebx сложно, т.к. команда stack мало что дает в этом случае. Если же KeBugCheckEx вызывается какой-то функцией про проверке параметров, тогда можно сделать откат. Но в любом случае ребут быстрее
Four-F, Айс по умолчанию хучит KeBugCheckEx. Так что ты должен сначала оказаться в айсе. по идее это действитель так, но я сталкивался с тем, что прои загруженном айсе сходу вылетал BDS SteelRat, пробовал ставить обработчик SEH?
Проще конечно ребутить, но есть огромная вероятность потери исходников, кэш не сбросила винда на диск и каюк... у меня уже такое было Где можно почитать про это процесс ? Может какая мысль придет Есть конечно KeRegisterBugCheckCallback но кажется она встраивает Callback в цепочку обработчиков...
не понял... а что мешает перехватить эту самую KeBugCheckEx? дело 5и секунд... я серьезно. Перехватил и делай че хочешь т.к. именно из этой функции система стопорицца...
[ SteelRat: <font color="indigo]кэш не сбросила винда на диск и каюк...</font><!--color--> ] А sync для чего? KmdKit\tools\Sync или на sysinternals.com тоже лежит. Если проблема только в этом, то пущай каждый раз sync, а если что ребуться и всё... ну там на бумажку перепиши, что надо Ещё обязательно в Settings от айса в строку инициализации пропиши faults on. Хотя оно, вроде, по умолчанию стоит. Вот фаулты элементарно откатываются.
Код (Text): xor eax, eax mov [eax], eax Кто обрабатывает, а затем вызывает KeBugCheckEx ? Пробовал Айсом трассировать, на второй строке получил BSOD
не понял... а что мешает перехватить эту самую KeBugCheckEx? дело 5и секунд... я серьезно. Перехватил и делай че хочешь т.к. именно из этой функции система стопорицца... NeuronViking, сможеши вручную востановить всё неоходимое? И сколько это займёт времени?
Задача конечно сложная, но решить можно если взять на себя обработку исключений http://dims.karelia.ru/x86/intr_2.shtml Просто я думал, что уже есть готовые решения...
[ SteelRat: Кто обрабатывает, а затем вызывает KeBugCheckEx ] _KiTrap0D или _KiTrap0E, в зависимости от того, выделена ли страница по адресу 0. Под w2k она read-only, под ХР не выделена, хотя могу попутать. Набери в айсе idt. Только учти, что айс хучит IDT, но показывает старые адреса. Действительное положение дел можно посмотреть запустив KmdKit\tools\IdtDump\IdtDump.exe
ProgramMan что такое "все необходимое"? сам перехват этой функции у меня например займет 5 секунд т.к. шаблоны уже есть и когда-то эту й-цию я уже перехватывал.
NeuronViking, я имел в иду востановление системы, выгрузка/патченье сбойного доайвера, востановление регистров флогов и т.п.
ProgramMan эт смотря што конкретно делать надо... тут общего решения не могет быть. например если системные структуры и данные не были затронуты то вообще можно все это просто игнорировать... например выгрузить сбойный драйвер нах ну а вообще по хорошему автору сабжа надо применять обработку исключений ибо KeBugCheckEx вызываеца тока тогда когда в цепочку обработчиков исключений уже идти некуда, т.е. типо на самом "дне" цепочки... пусть ставит експешн хендлеры и KeBugCheckEx не будет вызываца в большинстве случаефф
NeuronViking Ну, собственно так оно и есть... Никто этим не занимался ? Ведь проблема серьёзная... P.S. Вот засада, sync.exe тоже не помог Сейчас чуть не потерял исходник, благо бацкап делаю.
NeuronViking "эт смотря што конкретно делать надо... тут общего решения не могет быть" в том-то и дело либо прога будет очень узконаправленная, либо с очень навороченной логикой. "применять обработку исключений" SEH фрейм, это я уже предлогал.