中断对象:
内核提供了一种可移植的机制使得使得设备驱动程序可以为他们的设备注册ISR,是一个称为中断对象的内核控制对象。中断对象包含了所有“供内核将一个设备的ISR与一个特定级别的中断关联起来而需要的信息。”包括ISR地址,该设备中断时所在的IRQL以及域该ISR相关联的IDT。
调试器可以查看中断对象的细节:
!idt打开中断描述符表信息
lkd> dt nt!_kinterrupt 89c97918
nt!_KINTERRUPT
+0x000 Type : 22
+0x002 Size : 484
+0x004 InterruptListEntry : _LIST_ENTRY [ 0x89c9791c - 0x89c9791c ]
+0x00c ServiceRoutine : 0xba6105e0 unsigned char +ffffffffba6105e0 ;指向服务例程
+0x010 ServiceContext : 0x89c99030
+0x014 SpinLock : 0
+0x018 TickCount : 0xffffffff
+0x01c ActualLock : 0x89c97b7c -> 0
+0x020 DispatchAddress : 0x805459e0 void nt!KiInterruptDispatch+0
+0x024 Vector : 0x162
+0x028 Irql : 0x5 '' ; IRQL=27-0x5,x86单处理器从27减去IRQ得到
+0x029 SynchronizeIrql : 0x5 ''
+0x02a FloatingSave : 0 ''
+0x02b Connected : 0x1 ''
+0x02c Number : 0 ''
+0x02d ShareVector : 0 ''
+0x030 Mode : 1 ( Latched )
+0x034 ServiceCount : 0
+0x038 DispatchCount : 0xffffffff
+0x03c DispatchCode : [106] 0x56535554 ;存放实际执行中断代码