KernelMode:KiSwapХХХ

Тема в разделе "WASM.WIN32", создана пользователем PavPS, 18 апр 2005.

  1. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    Неувязочка вышла, KeWaitForSingleObject нельзя вызывать на IRQL=APC_LEVEL.

    Процесс останавливается, но не запускается.

    Что получилось - смотри в аттаче.

    [​IMG] 1177600832__StopProcess.rar
     
  2. rav

    rav New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2004
    Сообщения:
    159
    Адрес:
    Москва
    Можно сделать через спинлоки. Создаёшь его и лочишь, а потом вешаешь APC с ожиданием по спинлоку. До тех пор, пока сам не разлочишь- потоки не разблокируются.
     
  3. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    Спинлок - ресурс глобальный, когда он залочен, то его могут ожидать и другие потоки в драйверах, такое использование спинлоков быстро повесит систему.

    Есть вариант - циклически проверять в APC какой-нибудь флаг, и продолжать выполнение при его установке, но это бесполезная трата процессорного времени.
     
  4. PavPS

    PavPS New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2004
    Сообщения:
    109
    Адрес:
    Russia
    Заметь, что система останавливает нить тоже на IRQL=APC_LEVEL вызывая KiSuspendThread а в ней и WaitForSingleObject. И остановка нити происходит при DeluverApc, если туда в очередь постьавлен АПЦ с KiSuspendThread. Проблем вроде не должно быть.