Windows для профессионалов

       

Создание оболочки вокруг всех функций потоков


Функция SetUnhandledExceptionFilter позволяет включать все функции потоков в SEH фрейм:

PTOP_LEVEL_EXCEPTION_FILTER SetUnhandledExceptionFilter( PTOP_LEVEL_EXCEPTION_FILTER pTopLevelExceptionFilter);

После ее вызова необработанное исключение, возникшее в любом из потоков процесса, приведет к вызову Вашего фильтра исключений Адрес фильтра следует передать в единственном параметре функции SetUnhandledExceptionFilter. Прототип этой функции-фильтра должен выглядеть так:

LONG UnhandledExceptionFilter(PEXCEPTION_POINTCRS pExceptionInfo);

По форме она идентична функции UnhandledExceptionFilter Внутри фильтра мож но проводить любую обработку, а возвращаемым значением должен быть один из трех идентификаторов типа EXCEPTION_*. В следующей таблице описано, что происходит в случае возврата каждого из идентификаторов.

Идентификатор

Действие



EXCEPTION_EXECUTE_HANDLER

Процесс просто завершается, так как система не выполняет никаких операций в своем обработчи ке исключений

EXCEPTION_CONTINUE_EXECUTION

Выполнение продолжается с инструкции, выгнав шей исключение; Вы можете модифицировать ин формацию об исключении, па которую указывает параметр типа PEXCEPTION_POINTERS

EXCEPTION_CONTINUE_SEARCH

Выполняется обычная Windows-функция UnhandledExceptionFilter

Чтобы функция UnhandledExceptionFilter вновь стала фильтром по умолчанию, вызовите SetUnhandledExceptinnFilter со значением NULL, Заметьте также, что всякий раз, когда устанавливается новый фильтр для необработанных исключений, SetUnhandledExceptionFilter возвращает адрес ранее установленного фильтра. Если таким фильтром была UnhandledExceptionFilter, возвращается NULL. Если Ваш фильтр возвра щает EXCEPTION_CONTINUE_SEARCH, Вы должны вызывать ранее установленный фильтр, адрес которого вернула SetUnbandledExceptionFilter.



Содержание раздела