Вот я задался вопросом: "А что же такое этот IRQL? Какая-то софтварьная выдумка или что-то еще?" Отдизасмил KeRaiseIrql, что в hal.dll:
....
80012258 dword_80012258 dd 41413D00h, 81716151h, 0B1B1A191h, 3 dup(0B1B1B1B1h)
80012258 ; DATA XREF: KfRaiseIrql+3r
80012258 ; KfLowerIrql+6r ...
80012258 dd 0C1B1B1B1h, 0FFEFE1D1h
..........
KfRaiseIrql proc near ; CODE XREF: sub_800122F8+5p
80012278 ; .text:80014C75p ...
80012278 movzx edx, cl
8001227B movzx ecx, byte ptr ds:dword_80012258[edx]
80012282 mov eax, ds:0FFFE0080h
80012287 mov ds:0FFFE0080h, ecx
8001228D shr eax, 4
80012290 movzx eax, byte ptr ds:unk_8001D088[eax]
80012297 retn
80012297 KfRaiseIrql endp
...........
Почитав Pentium4 Software Developers Manual с intel.com понял, что FFFE0080 - это адрес Task Priority Register APIC, который оперделяет приоритет текущей задачи и может млужить отсеивателем ненужных событий, прерываний. Формат:
0-3 - Task Priority SubClass
4-7 - Task Priority Class
8-31 - Reserved
Из дизасма видно, что для PASSIVE_LEVEL в TPR пишется 0x00, те все прерывания разрешены (IntPrioirty>TaskPriority чтобы сработало), APC_LEVEL - 0x3D, DISPATCH_LEVEL - 0x41,.... HIGHEST_LEVEL - 0xFF - процессор мертв для прерываний (проверял в SoftIce).
Это я все к чему - прерывание Int1 по умолчанию может иметь такой приоритет (при трассировке Kernel Debugger-ом он наверно искусственно повышается), что скажем при IRQL >=APC_LEVEL проц его проигнорирует.
Я конечно не утверждаю точно, тем более что еще не разобрался как эти приоритеты устанавливаются.. Но все же это вполне возможно. Так и получится что в обработчике int1 всегда PASSIVE_LEVEL (в обработчике на который указывает адрес в IDT).