Как отделаться от BSOD

Тема в разделе "WASM.WIN32", создана пользователем SteelRat, 8 дек 2004.

  1. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    Кто сталкивался с драйверами тоже интересна эта мысль. Мой драйвер иногда выдает BSOD из-за ошибок, я их исправляю, но только после перезагрузки. Может есть какой-то вариант просто перехватывать KeBugCheck или KeBugCheckEx с тем, чтобы вернуть нормальную работу ведь это просто мой драйвер глюканул, зачем Винду рушить ? Если не ошибаюсь, эти ф-ции вызываются когда Винда предпологает потерю данных или критическая ошибка, а я точно знаю, что из-за моего драйвера этого небудет... Если идея не новая киньте линком :)
     
  2. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Айс по умолчанию хучит KeBugCheckEx. Так что ты должен сначала оказаться в айсе. После этого появится возможность откатиться назад. Проблема в том, что очень часто это (откат) настолько сложно, что проще просто поребутиться. В KeBugCheckEx обычно оказываешься из-за того, что произошло какое-то исключение и его обработчик явно вызвал BSOD. Восстановить eip,esp,ebp,esi,edi,ebx сложно, т.к. команда stack мало что дает в этом случае. Если же KeBugCheckEx вызывается какой-то функцией про проверке параметров, тогда можно сделать откат. Но в любом случае ребут быстрее :)
     
  3. ProgramMan

    ProgramMan New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2004
    Сообщения:
    263
    Four-F, Айс по умолчанию хучит KeBugCheckEx. Так что ты должен сначала оказаться в айсе.

    по идее это действитель так, но я сталкивался с тем, что прои загруженном айсе сходу вылетал BDS :dntknw:

    SteelRat, пробовал ставить обработчик SEH?
     
  4. ProgramMan

    ProgramMan New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2004
    Сообщения:
    263
    Сам попробовал установить обработчик, и записать регистр в ds:[0]... и всё равно получил BDS
     
  5. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    Проще конечно ребутить, но есть огромная вероятность потери исходников, кэш не сбросила винда на диск и каюк... у меня уже такое было :dntknw: Где можно почитать про это процесс ? Может какая мысль придет :) Есть конечно KeRegisterBugCheckCallback но кажется она встраивает Callback в цепочку обработчиков...
     
  6. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    не понял... а что мешает перехватить эту самую KeBugCheckEx? дело 5и секунд... я серьезно.

    Перехватил и делай че хочешь т.к. именно из этой функции система стопорицца...
     
  7. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    [ SteelRat: <font color="indigo]кэш не сбросила винда на диск и каюк...</font><!--color--> ]



    А sync для чего? KmdKit\tools\Sync или на sysinternals.com тоже лежит. Если проблема только в этом, то пущай каждый раз sync, а если что ребуться и всё... ну там на бумажку перепиши, что надо ;) Ещё обязательно в Settings от айса в строку инициализации пропиши faults on. Хотя оно, вроде, по умолчанию стоит. Вот фаулты элементарно откатываются.
     
  8. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    Код (Text):
    1.  
    2.   xor eax, eax
    3.   mov [eax], eax
    4.  


    Кто обрабатывает, а затем вызывает KeBugCheckEx ? Пробовал Айсом трассировать, на второй строке получил BSOD :dntknw:
     
  9. ProgramMan

    ProgramMan New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2004
    Сообщения:
    263
    не понял... а что мешает перехватить эту самую KeBugCheckEx? дело 5и секунд... я серьезно.

    Перехватил и делай че хочешь т.к. именно из этой функции система стопорицца...


    NeuronViking, сможеши вручную востановить всё неоходимое?

    И сколько это займёт времени?
     
  10. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    Задача конечно сложная, но решить можно если взять на себя обработку исключений ;) http://dims.karelia.ru/x86/intr_2.shtml Просто я думал, что уже есть готовые решения...
     
  11. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    [ SteelRat: Кто обрабатывает, а затем вызывает KeBugCheckEx ]



    _KiTrap0D или _KiTrap0E, в зависимости от того, выделена ли страница по адресу 0. Под w2k она read-only, под ХР не выделена, хотя могу попутать. Набери в айсе idt. Только учти, что айс хучит IDT, но показывает старые адреса. Действительное положение дел можно посмотреть запустив KmdKit\tools\IdtDump\IdtDump.exe
     
  12. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    ProgramMan

    что такое "все необходимое"? сам перехват этой функции у меня например займет 5 секунд т.к. шаблоны уже есть и когда-то эту й-цию я уже перехватывал.
     
  13. ProgramMan

    ProgramMan New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2004
    Сообщения:
    263
    NeuronViking, я имел в иду востановление системы, выгрузка/патченье сбойного доайвера, востановление регистров флогов и т.п.
     
  14. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    ProgramMan

    эт смотря што конкретно делать надо... тут общего решения не могет быть. например если системные структуры и данные не были затронуты то вообще можно все это просто игнорировать... например выгрузить сбойный драйвер нах

    ну а вообще по хорошему автору сабжа надо применять обработку исключений ибо KeBugCheckEx вызываеца тока тогда когда в цепочку обработчиков исключений уже идти некуда, т.е. типо на самом "дне" цепочки... пусть ставит експешн хендлеры и KeBugCheckEx не будет вызываца в большинстве случаефф
     
  15. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    NeuronViking

    Ну, собственно так оно и есть... Никто этим не занимался ? Ведь проблема серьёзная...



    P.S. Вот засада, sync.exe тоже не помог :dntknw: Сейчас чуть не потерял исходник, благо бацкап делаю.
     
  16. ProgramMan

    ProgramMan New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2004
    Сообщения:
    263
    NeuronViking "эт смотря што конкретно делать надо... тут общего решения не могет быть" в том-то и дело либо прога будет очень узконаправленная, либо с очень навороченной логикой.

    "применять обработку исключений" SEH фрейм, это я уже предлогал.