Ранг: 255.8 (наставник), 19thx Активность: 0.15↘0.01 Статус: Участник vx
Создано: 24 сентября 2010 23:53 · Поправил: Clerk · Личное сообщение · #1
Здрасте. VEH вызывается синхронно, тоесть остальные потоки будут ждать возврат текущего потока из хэндлера. Это реализовано посредством критической секции RtlpCalloutEntryLock. Необходимо выполнить такую манипуляцию, дабы потоки входящие в эту кс не ожидали на ней, тоесть открыть возможность параллельной обработки исключений. Вход в кс посредством RtlEnterCriticalSection().
Может лучше в нужном нам обработчике скопировать EXCEPTION_POINTERS, поправить eip на адрес асинхронного обработчика и обрабатывать исключение там? Если обработчики лочатся критической секцией, то это явно не зря сделано, а значит не нужно это ломать.
Clerk пишет: ntldrУправление до нашего хэндлера не дойдёт, так как остальные потоки будут ждать на кс. Допустим будут ждать. Ну так VectoredHandler не будет там долго задерживаться, читай мой пост.
ntldr > в нужном нам обработчике скопировать EXCEPTION_POINTERS, поправить eip на адрес асинхронного обработчика и обрабатывать исключение там Не понятно. Хэндлер только один, но вызывается он из разных потоков.