реализована следующая схема:
1. происходит прерывание --> в функции обработки прерывания в драйвере если оно разрешено то происходит запрет прерывания и ставица в очередь DCP функция отложеной обработки прерывания
2. далее эта DCP функция сигналит эвантом(KePulseEvent(SharedEvent, 16, false)
3. в приложении в юзер моде запущен поток с ожиданием на этот эвант
while true do
begin
WaitForSingleObject(Hevent, INFINITE);
1. тут обработка прерывания в юзермоде
2. а тут шлём драйверу через DeviceIoControl сигнал о том что прерывание обработано и разрешаем приём нового прерывания
end;
4. возвращаемся к пункту 1
эта схема прекрасно работает при относительно больших промежутках между прерываниями.
При интервале между прерываниями примерно в 1 мили секунду происходит сбой: драйвер выставляет эвант в сигнальное состояние (KePulseEvent) но WaitForSingleObject в юзер моде его не улавливает. в итоге прерывания остаюца запрещёными и весь процесс отсанавливаеца.
Подскажите в чом тут дело и как это иправить =)