Централизованная обработка исключений
Категория реферата: Рефераты по информатике, программированию
Теги реферата: семейные реферат, ответы по тетради
Добавил(а) на сайт: Berkov.
Предыдущая страница реферата | 1 2 3 4 5 6 7 8 9 10 11 | Следующая страница реферата
bool CatUnhandledExceptionFilter::HookUpUnhandledFilter() { if ( m_oldSystemUnhandledFilter == 0 ) return false; DWORD addr = m_oldSystemUnhandledFilter; DWORD old = 0; if ( TRUE == VirtualProtect((LPVOID)addr, 5, PAGE_READWRITE, &old) ) { unsigned char *p = (unsigned char*)addr; *p = 0xE9; UINT_PTR ehFilter = (UINT_PTR)myUnhandledExceptionFilter; addr += 5; ehFilter = ehFilter - addr; p++; DWORD *pp = (DWORD*)p; *pp = ehFilter; m_oldSystemUnhandledFilter += 5; VirtualProtect((LPVOID)addr, 5, old, &old); return true; } return false; } |
ПРИМЕЧАНИЕ Этот код будет работать только в семействе ОС Windows NT. Дело в том, что 2 верхних гигабайта, где размещены системные библиотеки, в Windows 9х недоступны на запись из пользовательского (user) режима. – прим.ред. |
Сначала функция проверяет, был ли найден системный обработчик UnhandledExceptionFilter. Если он не найден, функция возвращает false и завершает свою работу. Затем, поскольку необходимо писать в системную область памяти, изменяются атрибуты доступа к ней, что делает ее доступной для чтений/записи, и записывается инструкция безусловного перехода на функцию-переходник myUnhandledExceptionFilter. Функция-переходник имеет две цели – это вызвать фильтр и вернуть управление системной функции.
Рекомендуем скачать другие рефераты по теме: онегин сочинение, реферат підприємство.
Предыдущая страница реферата | 1 2 3 4 5 6 7 8 9 10 11 | Следующая страница реферата