NtWaitForXXXObject

Тема в разделе "WASM.WIN32", создана пользователем gilg, 26 сен 2006.

  1. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    Обнаружил интересное поведение функций WaitFor...Object(). Если при вызове указано состояние Alertable = FALSE, то вызывающий поток не будет обрабатывать user-mode APC и будет ждать либо истечения тайм-аута, либо активации переданных хендлов. Посылаю такому потоку user-mode APC с помощью драйвера (сначала user-apc, затем kernel-mode APC). После того, как поток обработает kernel-mode APC он переводится ядром в alertable state и обрабатывает user-mode APCs. В результате WaitForxxxObject() выходит из состояния ожидания со статусом STATUS_ALERTED, как будто Alertable было FALSE.
    Таким способом, например, убивается система, если послать apc to smss.exe, который как раз находится в таком состоянии.
    Собс-но вопрос в следующем: можно ли в описанной ситуации выполнить APC, не прерывая ожидания у потока?
     
  2. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    Вопрос по-прежнему акутален. Есть ли у кого-нибудь любые *безумные* идеи как можно отправить user-mode APC максимальному числу потоков в системе без прерывания non-alertable ожидания?

    Пример безумства (к сожалению не рабочий :dntknw: ):
    захукать все функции ожидания (KeWaitForSingleObject(), KeWaitForMultipleObjects() и KeDelayExecutionThread()) и возобновляю прерванное приходом APC ожидание. Не работает из-за того, что user-mode APC выполняются как ни странно в юзер-моде. Т.е. ожидание-то возобновляется, но APC не доставляется.