从nt!KiInterruptDispatch到i8042prt!I8042KeyboardInterruptService看键盘中断
;
; Check for an interrupt storm on this interrupt object
;
CHECK_INT_STORM kid
if DBG
mov ebx, _KeTickCount
endif
mov eax, InServiceContext[edi] ; set parameter value
push eax 第二个参数
push edi ; pointer to interrupt object 第一个参数
CAPSTART <_KiInterruptDispatch,InServiceRoutine[edi]>
call InServiceRoutine[edi] ; call specified routine
CAPEND <_KiInterruptDispatch>
0: kd> g
Breakpoint 18 hit
eax=898ac508 ebx=105ee5d4 ecx=ffdff000 edx=ffffffff esi=898ac5c8 edi=894fe978
eip=bafe5052 esp=f789ee08 ebp=f789ee28 iopl=0 nv up ei pl nz na po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000202
i8042prt!I8042KeyboardInterruptService:
bafe5052 6a18 push 18h
0: kd> kc
00 i8042prt!I8042KeyboardInterruptService
01 nt!KiInterruptDispatch
02 nt!KeSetTimerEx
03 nt!KeSetTimer
04 USBPORT!USBPORT_DM_TimerDpc
05 nt!KiTimerExpiration
06 nt!KiRetireDpcList
07 nt!KiDispatchInterrupt
WARNING: Frame IP not in any known module. Following frames may be wrong.
08 0x0
0: kd> kv
ChildEBP RetAddr Args to Child
00 f789ee04 80b003ed 894fe978 898ac508 00010009 i8042prt!I8042KeyboardInterruptService (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\drivers\input\pnpi8042\kbddep.c @ 82]
01 f789ee04 80a33b04 894fe978 898ac508 00010009 nt!KiInterruptDispatch+0x8d (FPO: [0,2] TrapFrame @ f789ee28) [d:\srv03rtm\base\ntos\ke\i386\intsup.asm @ 777]
02 f789ee98 80a33ce8 898d46c8 ffb15267 ffffffff nt!KeSetTimerEx (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\ntos\ke\timerobj.c @ 320]
03 f789eeb4 bae8aa1e 898d46c8 ffb15267 ffffffff nt!KeSetTimer+0x16 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\ntos\ke\timerobj.c @ 282]
04 f789eee8 80a40e6b 898d46a8 898d4030 c33df065 USBPORT!USBPORT_DM_TimerDpc+0x404 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\drivers\wdm\usb\hcd\usbport\dmtimer.c @ 157]
05 f789ef9c 80a413bc 00000000 00000000 025ee59f nt!KiTimerExpiration+0x26d (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\ntos\ke\dpcsup.c @ 705]
06 f789eff4 80b00756 ba1b0bf8 00000000 00000000 nt!KiRetireDpcList+0x60 (FPO: [Non-Fpo]) (CONV: fastcall) [d:\srv03rtm\base\ntos\ke\dpcsup.c @ 1018]
07 f789eff8 ba1b0bf8 00000000 00000000 00000000 nt!KiDispatchInterrupt+0x36 (FPO: [Uses EBP] [0,0,1]) [d:\srv03rtm\base\ntos\ke\i386\ctxswap.asm @ 226]
WARNING: Frame IP not in any known module. Following frames may be wrong.
08 80b00756 00000000 00000009 bb837775 00000128 0xba1b0bf8
0: kd> !idt
Dumping IDT: 8003f400
37: 804ed194 hal!PicSpuriousService37
3d: 804ee7d8 hal!HalpApcInterrupt
41: 804ee618 hal!HalpDispatchInterrupt
50: 804ed26c hal!HalpApicRebootService
62: 8949d58c atapi!IdePortInterrupt (KINTERRUPT 8949d550)
63: 895eb044 NDIS!ndisMIsr (KINTERRUPT 895eb008)
73: 896048d4 USBPORT!USBPORT_InterruptService (KINTERRUPT 89604898)
82: 894e9214 atapi!IdePortInterrupt (KINTERRUPT 894e91d8)
83: 89620bec USBPORT!USBPORT_InterruptService (KINTERRUPT 89620bb0)
93: 894fe9b4 i8042prt!I8042KeyboardInterruptService (KINTERRUPT 894fe978)
a3: 89564bbc i8042prt!I8042MouseInterruptService (KINTERRUPT 89564b80)
b1: 899069a4 ACPI!ACPIInterruptServiceRoutine (KINTERRUPT 89906968)
c1: 804ed408 hal!HalpBroadcastCallService
d1: 804ec714 hal!HalpClockInterrupt
e1: 804ed83c hal!HalpIpiHandler
e3: 804ed650 hal!HalpLocalApicErrorService
fd: 804edde8 hal!HalpProfileInterrupt
fe: 804edfa0 hal!HalpPerfInterrupt
0: kd> dt nt!_KINTERRUPT 894fe978
+0x000 Type : 0n22
+0x002 Size : 0n484
+0x004 InterruptListEntry : _LIST_ENTRY [ 0x894fe97c - 0x894fe97c ]
+0x00c ServiceRoutine : 0xbafe5052 unsigned char i8042prt!I8042KeyboardInterruptService+0
+0x010 ServiceContext : 0x898ac508 Void
+0x014 SpinLock : 0
+0x018 TickCount : 0x105ee5c0
+0x01c ActualLock : 0x898ac5c8 -> 0x895f2a79
+0x020 DispatchAddress : 0x80b00360 void nt!KiInterruptDispatch+0
+0x024 Vector : 0x193
+0x028 Irql : 0x8 ''
+0x029 SynchronizeIrql : 0x9 ''
+0x02a FloatingSave : 0 ''
+0x02b Connected : 0x1 ''
+0x02c Number : 0 ''
+0x02d ShareVector : 0 ''
+0x030 Mode : 1 ( Latched )
+0x034 ServiceCount : 0
+0x038 DispatchCount : 0x407529
+0x03c DispatchCode : [106] 0x56535554