中斷對象:
內核提供了一種可移植的機制使得使得設備驅動程序可以爲他們的設備註冊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 ;存放實際執行中斷代碼