Вызов KeSetEvent в процедуре обработки прерывания

Тема в разделе "WASM.NT.KERNEL", создана пользователем SergeiS, 22 окт 2009.

  1. SergeiS

    SergeiS New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2009
    Сообщения:
    7
    Здравствуйте! У меня есть драйвер для обслуживания устройства ввода цифрового сигнала. Я передаю в него события и затем, по прерыванию от устройства, взвожу эти события для пользовательского процесса чтобы он обработал информацию в отображенном на его пространство совместном с драйвером разделе памяти. Проблема в том что сегодня вдруг система "зависла" без синего экрана но не реагируя ни на какие раздражители. Я подумал что это повышение IRQL. Дело в том что я набираюсь наглости и вызываю KeSetEvent для совместных с пользовательским приложением событий прямо в процедуре обработки аппаратного прерывания от устройства. Может быть так что внтури KeSetEvent временно повысится IRQL (как написано в документации) а в это время происходит переключение ? и после переключения идет мертвая петля с ожиданием понижения IRQL ? Или же взведенное событие взывает переключение прямо при обработке прерывания ? Но это по идее невозможно. Обязательно ли в этом случае использовать DPC процедуру в драйвере для окончательной обработки поступившего прерывания и в частности взведения события ? Буду очень признателен за замечания и рекомендации!
     
  2. Forever

    Forever Виталий

    Публикаций:
    0
    Регистрация:
    12 апр 2008
    Сообщения:
    244
    Как правило процедуры обработки прерываний сами выполняются на высоких IRQL.
     
  3. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    Interrupt handlers выполняются на IRQL_HIGH который выше DISPATCH. Насколько я знаю KeSetEvent() оттуда вызывать нельзя. Используй DPCs (Deferred Procedure Calls)
     
  4. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    я что-то не понимаю, а как же DPC будет выполняться если IRQL выше DPC ?
     
  5. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    Deferred Procedure Calls он... отложенный - deferred :) То есть выполнится при DISPATCH чуть позже. Почитай доки в DDK.