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

       

Явный вызов функции UnhandledExceptionFilter


Функция UnhandledExceptionFilter полностью задокументирована, и Вы можете сами вызывать ее в своих программах. Вот пример ее использования:

void Funcadelic()
{

__try
{

...

}

__except (ExpFltr(GetExceptionTnformation()))
{

...

}

}

LONG ExpFltr(PEXCEPTION_POINTERS pEP)
{

DWORD dwExceptionCode - pEP->ExceptionRecord.ExceptionCode;

if (dwExceptionCode == EXCEPTION_ACCESS_VIOLATION)
{

// что-то делаем здесь...
return(EXCEPTION_CONTINUE_EXFCUTION);

}

return(UnhandledExceptionFilter(pEP));

}

Исключение в блоке try функции Funcadelic приводит к вызову ExpFltr. Ей переда ется значение, возвращаемое GetExceptionlnformation. Внутри фильтра определяется код исключения и сравнивается с EXCEPTION_ACCESS_VIOLATION. Если было нару шение доступа, фильтр исправляет ситуацию и возвращает EXCEPTION_CONTI NUE_EXECUTION. Это значение заставляет систему возобновить выполнение програм мы с инструкции, вызвавшей исключение.

Если произошло какое-то другое исключение, ExpFltr вызывает UnhandledExcep tionFilter, передавая ей адрес структуры EXCEPTION_POINTERS. Функция Unhandled ExceptionFilter открывает окно, позволяющее завершить процесс или начать отладку. Ее возвращаемое значение становится и результатом функции ExpFltr.



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