Прерывание (сигнал INT) сбрасывается несколькими способами:
- автоматически (платой)
- драйвером в обработчике прерывания (по чтению определенного порта платы прерывание сбрасывается)
- вручную (чтение порта происходит по нажатию кнопки в программе)
При этом второй способ упорно не срабатывает. В чем разница?
При ручном сбросе прерывания чтение порта выполняется в обработчике DeviceIoControl - все работает.
При сбросе прерывания драйвером я пробовал 2 способа: чтение порта непосредственно из обработчика прерывания (перед выходом из него) либо порт читается из процедуры отложенной обработки, которая вызывается опять же перед выходом из обработчика прерывания - ни один способ не работает. То есть, в DebugView я вижу, что чтение порта произошло, но на анализаторе тишина...
В доках по DDK пишут, что READ_PORT_ должен работать на любом IRQL.
Кто-нибудь знает, в чем может быть дело?