Сейчас на форуме: tyns777 (+4 невидимых) |
eXeL@B —› Программирование —› Асинхронный вызов VEH. |
Посл.ответ | Сообщение |
|
Создано: 24 сентября 2010 23:53 · Поправил: Clerk · Личное сообщение · #1 Здрасте. VEH вызывается синхронно, тоесть остальные потоки будут ждать возврат текущего потока из хэндлера. Это реализовано посредством критической секции RtlpCalloutEntryLock. Необходимо выполнить такую манипуляцию, дабы потоки входящие в эту кс не ожидали на ней, тоесть открыть возможность параллельной обработки исключений. Вход в кс посредством RtlEnterCriticalSection(). Главное требование - недетект антируткитами. Тоесть патч юзать нельзя. |
|
Создано: 25 сентября 2010 00:27 · Личное сообщение · #2 Может лучше в нужном нам обработчике скопировать EXCEPTION_POINTERS, поправить eip на адрес асинхронного обработчика и обрабатывать исключение там? Если обработчики лочатся критической секцией, то это явно не зря сделано, а значит не нужно это ломать. ----- PGP key |
|
Создано: 25 сентября 2010 08:27 · Личное сообщение · #3 |
|
Создано: 25 сентября 2010 09:43 · Личное сообщение · #4 Clerk Не знаю с чего ты взял, что VEH вызываются синхронно, простейший тест показывает, что это не так. Code:
Эта программа выводит 100 сообщений, а не одно, как ожидалось бы при последовательной обработке исключений. ----- PGP key |
|
Создано: 25 сентября 2010 12:14 · Личное сообщение · #5 |
|
Создано: 25 сентября 2010 17:17 · Поправил: asd · Личное сообщение · #6 |
|
Создано: 25 сентября 2010 17:42 · Личное сообщение · #7 Clerk пишет: ntldrУправление до нашего хэндлера не дойдёт, так как остальные потоки будут ждать на кс. Допустим будут ждать. Ну так VectoredHandler не будет там долго задерживаться, читай мой пост. ----- PGP key |
|
Создано: 25 сентября 2010 18:14 · Личное сообщение · #8 |
|
Создано: 25 сентября 2010 18:21 · Личное сообщение · #9 Code:
Вот что я имел ввиду. Всю долгую обработку помещаем в async_handler, который будет работать асинхронно. ----- PGP key |
|
Создано: 25 сентября 2010 18:54 · Поправил: Clerk · Личное сообщение · #10 |
eXeL@B —› Программирование —› Асинхронный вызов VEH. |