Софт: Visual Studio 2008 без сервис пака, Windows7 При написании низкоуровневого клавиатурного глобального хука (тип WH_KEYBOARD_LL) столкнулся со следущей непоняткой: Любые исключения, которые возникают внутри процедуры хука просто глотаются системой, хотя хук не удалается из очереди и при новых событиях вызывается как обычно. В системных журналах тоже никаких записей о таких событиях не нашел. При отладке из VS тоже все спокойно. Може кто-то объяснит почему так?
Думаю логично было бы предположить, что раз процедура хука вызывается из ядра, вызывается с помощью KeUserModeCallback, то ядро ожидает возвращения управления к нему. А раз так, то оно перед прыжком в UserMode просто обязано установить обработчик исключений, чтобы в случае ошибки управление не уплыло неизвестно куда. См. wrk\ntos\ke\[i386/amd64]\callback.c и wrk\ntos\ke\[i386/amd64]\callout.asm
В начале доставки сообщений устанавливается сех в CallHookWithSEH(). Приложение тихо завершается - стек потока разрушается, либо NtTerminateProcess юзается(в юзермоде).