Исколючения в хуках и константа LLKHF_INJECTED

Тема в разделе "WASM.WIN32", создана пользователем zStorm, 30 янв 2010.

  1. zStorm

    zStorm New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2005
    Сообщения:
    44
    Адрес:
    Ukraine
    Софт: Visual Studio 2008 без сервис пака, Windows7

    При написании низкоуровневого клавиатурного глобального хука (тип WH_KEYBOARD_LL) столкнулся со следущей непоняткой:

    Любые исключения, которые возникают внутри процедуры хука просто глотаются системой, хотя хук не удалается из очереди и при новых событиях вызывается как обычно. В системных журналах тоже никаких записей о таких событиях не нашел. При отладке из VS тоже все спокойно. Може кто-то объяснит почему так?
     
  2. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    А свой обработчик исключений Вы устанавливаете?
     
  3. zStorm

    zStorm New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2005
    Сообщения:
    44
    Адрес:
    Ukraine
    нет
     
  4. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Думаю логично было бы предположить, что раз процедура хука вызывается из ядра, вызывается с помощью KeUserModeCallback, то ядро ожидает возвращения управления к нему. А раз так, то оно перед прыжком в UserMode просто обязано установить обработчик исключений, чтобы в случае ошибки управление не уплыло неизвестно куда. См. wrk\ntos\ke\[i386/amd64]\callback.c и wrk\ntos\ke\[i386/amd64]\callout.asm
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    В начале доставки сообщений устанавливается сех в CallHookWithSEH(). Приложение тихо завершается - стек потока разрушается, либо NtTerminateProcess юзается(в юзермоде).