Hello, NEON!
Отвлекся на некоторое время от форума, sorry.
> Так вот на эти исключения и надо поставить хук. Только как?
Чтобы не было недоразумений, сначала уточним терминологию.
Под hook в Windows подразумевается вполне определенная вещь.
Цитирую Microsoft Platform SDK (User Interface Services ->
Windows User Interface -> Windowing -> Hooks):
"A hook is a point in the system message-handling mechanism
where an application can install a subroutine to monitor
the message traffic in the system and process certain types of
messages before they reach the target window procedure."
Таким образом, hook - это не просто обобщённая ловушка,
а ловушка, предназначенная для перехвата определенных
сообщений перед тем как они попадут в оконную процедуру.
Можно ставить как локальные хуки, нацеленные на конкретную
оконную процедуру, так и глобальные.
Хукинг, конечно, достаточно мощная техника, но к перехвату
необработанных исключений (unhandled exceptions) имеет,
увы, отдаленное отношение.
В этом случае, скорее всего, прийдется осуществить перехват
вызовов функции UnhandledExceptionFilter в kernel32.dll.
Существует различные способы сделать это (и один из них
использует глобальный хукинг, для того чтобы спроецировать
свою dll на все процессы, имеющие оконные процедуры), но ни один
не является универсальным и зависит от используемой ОС
(подробная информация о перехвате вызовов функций в dll
есть в сети, но все что попадалось - с примерами на C или
Asm'е; если не пугает перспектива копаться в низкоуровневом
коде - могу кинуть ссылки).
Перехват unhandled exception в этом месте позволит произвести
регистрацию исключительного события в процессе уровня ring-3 перед
тем как система прибьет этот процесс или передаст его JIT-отладчику,
но если требуется более серьёзно вмешиваться в работу ОС -
прийдется всерьез подружиться с отладчиком уровня ядра.
Кроме того, если произойдет ошибка во время работы в ring-0,
управление никогда не будет передано обратно в ring-3,
система просто остановит свою работу, покажет BSOD и
сделает crash-dump (упрощенно, конечно).
Так ли уж необходимы все эти мучения?
P.S. Я вел к тому, что, может быть, есть готовые
разработки для Delphi, ведь перехват вызовов довольно широко
используется - стоит поискать/поспрашивать в сети.