KernelMode:KiSwapХХХ

Discussion in 'WASM.WIN32' started by PavPS, Apr 18, 2005.

  1. Ms Rem

    Ms Rem New Member

    Blog Posts:
    0
    Неувязочка вышла, KeWaitForSingleObject нельзя вызывать на IRQL=APC_LEVEL.

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

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

    [​IMG] 1177600832__StopProcess.rar
     
  2. rav

    rav New Member

    Blog Posts:
    0
    Можно сделать через спинлоки. Создаёшь его и лочишь, а потом вешаешь APC с ожиданием по спинлоку. До тех пор, пока сам не разлочишь- потоки не разблокируются.
     
  3. Ms Rem

    Ms Rem New Member

    Blog Posts:
    0
    Спинлок - ресурс глобальный, когда он залочен, то его могут ожидать и другие потоки в драйверах, такое использование спинлоков быстро повесит систему.

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

    PavPS New Member

    Blog Posts:
    0
    Заметь, что система останавливает нить тоже на IRQL=APC_LEVEL вызывая KiSuspendThread а в ней и WaitForSingleObject. И остановка нити происходит при DeluverApc, если туда в очередь постьавлен АПЦ с KiSuspendThread. Проблем вроде не должно быть.