windows线程切换之一个线程的Quantum: -93都是在处理KDPC----线程切换和KDPC没有关系
hal!HalRequestSoftwareInterrupt虽然运行了,但是没有激发nt!KiDispatchInterrupt
为什么?因为当前是处理kdpc的时候DISPATCH_LEVEL,irql=2,不能激发nt!KiDispatchInterrupt!!!和下文说的情况是一个意思。
KiExitDispatcher为什么要判断Prcb->DpcRoutineActive == FALSE和KiRetireDpcList设置Prcb->DpcRoutineActive有关--重要
https://chenghao.blog.csdn.net/article/details/156086387
1: kd> g
Breakpoint 16 hit
eax=ffdff000 ebx=895f2a78 ecx=00000002 edx=000013ea esi=00002707 edi=e73f7530
eip=804ee4f8 esp=f789e820 ebp=f789e838 iopl=0 nv up ei pl nz na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000206
hal!HalRequestSoftwareInterrupt:
804ee4f8 643a0d95000000 cmp cl,byte ptr fs:[95h] fs:0030:00000095=00
0: kd> x nt!*tickcount
80b16f80 nt!KeTickCount = struct _KSYSTEM_TIME
80b16f80 nt!_KeTickCount = 0x105ee872
80a30bac nt!KeQueryTickCount (union _LARGE_INTEGER *)
80afc19a nt!_KiGetTickCount (void)
0: kd> dx -id 0,0,8954e020 -r1 ((ntkrnlmp!_KPRCB *)0xffdff120)
((ntkrnlmp!_KPRCB *)0xffdff120) : 0xffdff120 [Type: _KPRCB *]
+0x000\] MinorVersion : 0x1 \[Type: unsigned short
+0x002\] MajorVersion : 0x1 \[Type: unsigned short
+0x004\] CurrentThread : 0x895f2a78 \[Type: _KTHREAD \*
+0x008\] NextThread : 0x89555268 \[Type: _KTHREAD \*
+0x928\] ReadySummary : 0x1000 \[Type: unsigned long
0: kd> dx -id 0,0,8954e020 -r1 ((ntkrnlmp!_KTHREAD *)0x895f2a78)
((ntkrnlmp!_KTHREAD *)0x895f2a78) : 0x895f2a78 [Type: _KTHREAD *]
+0x000\] Header \[Type: _DISPATCHER_HEADER
+0x010\] MutantListHead \[Type: _LIST_ENTRY
+0x018\] InitialStack : 0xba1b1000 \[Type: void \*
+0x01c\] StackLimit : 0xba1ad000 \[Type: void \*
+0x020\] KernelStack : 0xba1b0c5c \[Type: void \*
+0x024\] ThreadLock : 0x0 \[Type: unsigned long
+0x028\] ContextSwitches : 0x470 \[Type: unsigned long
+0x02c\] State : 0x2 \[Type: unsigned char
+0x02d\] NpxState : 0xa \[Type: unsigned char
+0x02e\] WaitIrql : 0x0 \[Type: unsigned char
+0x02f\] WaitMode : 1 \[Type: char
+0x030\] Teb : 0x7ffd5000 \[Type: void \*
+0x034\] ApcState \[Type: _KAPC_STATE
+0x04c\] ApcQueueLock : 0x0 \[Type: unsigned long
+0x050\] WaitStatus : 258 \[Type: long
+0x054\] WaitBlockList : 0x895f2b18 \[Type: _KWAIT_BLOCK \*
+0x058\] Alertable : 0x0 \[Type: unsigned char
+0x059\] WaitNext : 0x0 \[Type: unsigned char
+0x05a\] WaitReason : 0x6 \[Type: unsigned char
+0x05b\] Priority : 13 '\\r' \[Type: char
+0x05c\] EnableStackSwap : 0x1 \[Type: unsigned char
+0x05d\] SwapBusy : 0x0 \[Type: unsigned char
+0x05e\] Alerted \[Type: unsigned char \[2\]
+0x060\] WaitListEntry \[Type: _LIST_ENTRY
+0x060\] SwapListEntry \[Type: _SINGLE_LIST_ENTRY
+0x068\] Queue : 0x0 \[Type: _KQUEUE \*
+0x06c\] WaitTime : 0x105ee7d7 \[Type: unsigned long
+0x070\] KernelApcDisable : 0 \[Type: short
+0x072\] SpecialApcDisable : 0 \[Type: short
+0x070\] CombinedApcDisable : 0x0 \[Type: unsigned long
+0x078\] Timer \[Type: _KTIMER
+0x0a0\] WaitBlock \[Type: _KWAIT_BLOCK \[4\]
+0x100\] QueueListEntry \[Type: _LIST_ENTRY
+0x108\] ApcStateIndex : 0x0 \[Type: unsigned char
+0x109\] ApcQueueable : 0x1 \[Type: unsigned char
+0x10a\] Preempted : 0x1 \[Type: unsigned char
+0x10b\] ProcessReadyQueue : 0x0 \[Type: unsigned char
+0x10c\] KernelStackResident : 0x1 \[Type: unsigned char
+0x10d\] Saturation : 0 \[Type: char
+0x10e\] IdealProcessor : 0x0 \[Type: unsigned char
+0x10f\] NextProcessor : 0x0 \[Type: unsigned char
+0x110\] BasePriority : 13 '\\r' \[Type: char
+0x111\] Spare4 : 0x0 \[Type: unsigned char
+0x112\] PriorityDecrement : 0 \[Type: char
+0x113\] Quantum : -93 \[Type: char
+0x114\] SystemAffinityActive : 0x0 \[Type: unsigned char
+0x115\] PreviousMode : 1 \[Type: char
+0x116\] ResourceIndex : 0x1 \[Type: unsigned char
+0x117\] DisableBoost : 0x0 \[Type: unsigned char
+0x118\] UserAffinity : 0x3 \[Type: unsigned long
+0x11c\] Process : 0x8954e020 \[Type: _KPROCESS \*
+0x120\] Affinity : 0x3 \[Type: unsigned long
+0x124\] ServiceTable : 0x80b207a0 \[Type: void \*
+0x128\] ApcStatePointer \[Type: _KAPC_STATE \* \[2\]
+0x130\] SavedApcState \[Type: _KAPC_STATE
+0x148\] CallbackStack : 0x0 \[Type: void \*
+0x14c\] Win32Thread : 0xe17c0d18 \[Type: void \*
+0x150\] TrapFrame : 0xba1b0d64 \[Type: _KTRAP_FRAME \*
+0x154\] KernelTime : 0x12 \[Type: unsigned long
+0x158\] UserTime : 0x4 \[Type: unsigned long
+0x15c\] StackBase : 0xba1b1000 \[Type: void \*
+0x160\] SuspendApc \[Type: _KAPC
+0x190\] SuspendSemaphore \[Type: _KSEMAPHORE
+0x1a4\] TlsArray : 0x0 \[Type: void \*
+0x1a8\] LegoData : 0x0 \[Type: void \*
+0x1ac\] ThreadListEntry \[Type: _LIST_ENTRY
+0x1b4\] LargeStack : 0x1 \[Type: unsigned char
+0x1b5\] PowerState : 0x0 \[Type: unsigned char
+0x1b6\] NpxIrql : 0x0 \[Type: unsigned char
+0x1b7\] Spare5 : 0x0 \[Type: unsigned char
+0x1b8\] AutoAlignment : 0x0 \[Type: unsigned char
+0x1b9\] Iopl : 0x0 \[Type: unsigned char
+0x1ba\] FreezeCount : 0 \[Type: char
+0x1bb\] SuspendCount : 0 \[Type: char
+0x1bc\] Spare0 \[Type: unsigned char \[1\]
+0x1bd\] UserIdealProcessor : 0x0 \[Type: unsigned char
+0x1be\] DeferredProcessor : 0x0 \[Type: unsigned char
+0x1bf\] AdjustReason : 0x0 \[Type: unsigned char
+0x1c0\] AdjustIncrement : 0 \[Type: char
+0x1c1\] Spare2 \[Type: unsigned char \[3\]
0: kd> g
Breakpoint 49 hit
eax=0000001b ebx=804edc6c ecx=80b16802 edx=00000000 esi=00000000 edi=f7737120
eip=80a4002e esp=f78aed64 ebp=f78aed80 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000246
nt!KiExitDispatcher+0x42:
80a4002e 807dfc02 cmp byte ptr [ebp-4],2 ss:0010:f78aed7c=02
1: kd> g
Breakpoint 16 hit
eax=ffdff000 ebx=895f2a78 ecx=00000002 edx=000013ea esi=00002707 edi=e741d78a
eip=804ee4f8 esp=f789e818 ebp=f789e830 iopl=0 nv up ei pl nz na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000206
hal!HalRequestSoftwareInterrupt:
804ee4f8 643a0d95000000 cmp cl,byte ptr fs:[95h] fs:0030:00000095=00
0: kd> g
Breakpoint 49 hit
eax=0000001b ebx=804edc6c ecx=80b16802 edx=00000000 esi=00000000 edi=ffdff120
eip=80a4002e esp=f789ed88 ebp=f789eda4 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000246
nt!KiExitDispatcher+0x42:
80a4002e 807dfc02 cmp byte ptr [ebp-4],2 ss:0010:f789eda0=02
0: kd> g
Breakpoint 49 hit
eax=0000001b ebx=804edc6c ecx=80b16802 edx=00000000 esi=00000000 edi=ffdff120
eip=80a4002e esp=f789ed88 ebp=f789eda4 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000246
nt!KiExitDispatcher+0x42:
80a4002e 807dfc02 cmp byte ptr [ebp-4],2 ss:0010:f789eda0=02
0: kd> kc
00 nt!KiExitDispatcher
01 nt!KeSetEvent
02 HIDCLASS!HidpSubmitInterruptRead
03 HIDCLASS!HidpInterruptReadComplete
04 nt!IopfCompleteRequest
05 USBPORT!USBPORT_CompleteTransfer
06 USBPORT!USBPORT_DoneTransfer
07 USBPORT!USBPORT_FlushDoneTransferList
08 USBPORT!USBPORT_DpcWorker
09 USBPORT!USBPORT_IsrDpcWorker
0a USBPORT!USBPORT_IsrDpc
0b nt!KiRetireDpcList
0c nt!KiDispatchInterrupt
WARNING: Frame IP not in any known module. Following frames may be wrong.
0d 0x0