Евгений Войнов (tritankista) wrote in lj_live,
Евгений Войнов
tritankista
lj_live

  • Mood:

READ_PORT_ работает по-разному в разных местах драйвера

Имеется драйвер для ISAшной платы. Драйвер ловит 10е прерывание и по нему принимает данные.
Прерывание (сигнал INT) сбрасывается несколькими способами:
- автоматически (платой)
- драйвером в обработчике прерывания (по чтению определенного порта платы прерывание сбрасывается)
- вручную (чтение порта происходит по нажатию кнопки в программе)
При этом второй способ упорно не срабатывает. В чем разница?

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

В доках по DDK пишут, что READ_PORT_ должен работать на любом IRQL.

Кто-нибудь знает, в чем может быть дело?
Subscribe

Comments for this post were disabled by the author