news 2026/4/18 15:52:01

nt!KiSwapThread函数调用的nt!KiFindReadyThread函数分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
nt!KiSwapThread函数调用的nt!KiFindReadyThread函数分析

nt!KiSwapThread函数调用的nt!KiFindReadyThread函数分析
0: kd> g
Breakpoint 13 hit
eax=ffdff120 ebx=f7737120 ecx=00000001 edx=ffdff120 esi=00000000 edi=80a059f8
eip=80a429d8 esp=b9ebf940 ebp=b9ebf974 iopl=0 nv up ei pl nz na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000206
nt!KiFindReadyThread:
80a429d8 55 push ebp
1: kd> kc
#
00 nt!KiFindReadyThread
01 nt!KiSwapThread
02 nt!KeWaitForMultipleObjects
03 nt!NtWaitForMultipleObjects
04 nt!_KiSystemService
05 SharedUserData!SystemCallStub
06 ntdll!ZwWaitForMultipleObjects
07 kernel32!WaitForMultipleObjectsEx
08 kernel32!WaitForMultipleObjects
09 srvsvc!SsScavengerThread
*** WARNING: symbols timestamp is wrong 0x66e5c17d 0x66e5bf0e for HelpSvc.exe
0a srvsvc!ServiceMain
0b HelpSvc!ServiceStarter
0c advapi32!ScSvcctrlThreadA
0d kernel32!BaseThreadStart


1: kd> kv
# ChildEBP RetAddr Args to Child
00 b9ebf93c 80a43dd9 f7737120 895f7228 895f7288 nt!KiFindReadyThread (FPO: [Non-Fpo]) (CONV: fastcall) [d:\srv03rtm\base\ntos\ke\thredsup.c @ 722]
01 b9ebf974 80a358c7 895f7228 00000000 00000005 nt!KiSwapThread+0x315 (FPO: [Non-Fpo]) (CONV: fastcall) [d:\srv03rtm\base\ntos\ke\thredsup.c @ 1854]
02 b9ebf9ac 80d1f5d4 00000005 b9ebfbe0 00000001 nt!KeWaitForMultipleObjects+0x3b5 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\ntos\ke\wait.c @ 816]
03 b9ebfd3c 80afbcb2 00000005 0193fe10 00000001 nt!NtWaitForMultipleObjects+0x354 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\ntos\ob\obwait.c @ 747]
04 b9ebfd3c 7ffe0304 00000005 0193fe10 00000001 nt!_KiSystemService+0x13f (FPO: [0,3] TrapFrame @ b9ebfd64) (CONV: cdecl) [d:\srv03rtm\base\ntos\ke\i386\trap.asm @ 1328]
05 0193fdc0 77f2fbb8 77e64294 00000005 0193fe10 SharedUserData!SystemCallStub+0x4 (FPO: [0,0,0])
06 0193fdc4 77e64294 00000005 0193fe10 00000001 ntdll!ZwWaitForMultipleObjects+0xc (FPO: [5,0,0]) [d:\srv03rtm\base\ntdll\daytona\obj\i386\usrstubs.asm @ 2363]
07 0193fe6c 77e64849 00000005 0193fec4 00000000 kernel32!WaitForMultipleObjectsEx+0x11a (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\win32\client\synch.c @ 1512]
08 0193fe88 745d9854 00000005 0193fec4 00000000 kernel32!WaitForMultipleObjects+0x16 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\win32\client\synch.c @ 1377]
09 0193ff04 745dd168 00000000 77e662fd 77e5e963 srvsvc!SsScavengerThread+0x2af (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\ds\netapi\svcdlls\srvsvc\server\scavengr.c @ 568]
0a 0193ff6c 01002ed6 00000000 000ccd70 00000000 srvsvc!ServiceMain+0x2d9 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\ds\netapi\svcdlls\srvsvc\server\srvmain.c @ 400]
0b 0193ffa4 77dc0bd4 00000001 000ccd70 00000000 HelpSvc!ServiceStarter+0x132 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\screg\sc\svchost\svchost.c @ 1049]
0c 0193ffb8 77e41be7 000ccd68 00000000 00000000 advapi32!ScSvcctrlThreadA+0x10 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\screg\sc\client\scapi.cxx @ 2760]
0d 0193ffec 00000000 77dc0bc4 000ccd68 00000000 kernel32!BaseThreadStart+0x34 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\win32\client\support.c @ 533]
1: kd> u 80a43dd9
nt!KiSwapThread+0x315 [d:\srv03rtm\base\ntos\ke\thredsup.c @ 1854]:
80a43dd9 8bf0 mov esi,eax
80a43ddb 85f6 test esi,esi
80a43ddd 0f8544010000 jne nt!KiSwapThread+0x463 (80a43f27)
80a43de3 ff150831a080 call dword ptr [nt!_imp__KeGetCurrentIrql (80a03108)]
80a43de9 33f6 xor esi,esi
80a43deb 3c02 cmp al,2
80a43ded 7311 jae nt!KiSwapThread+0x33c (80a43e00)
80a43def 56 push esi
1: kd> u 80a43dd9-12
nt!KiSwapThread+0x303 [d:\srv03rtm\base\ntos\ke\thredsup.c @ 1854]:
80a43dc7 39b028090000 cmp dword ptr [eax+928h],esi
80a43dcd 7414 je nt!KiSwapThread+0x31f (80a43de3)
80a43dcf 8b4de0 mov ecx,dword ptr [ebp-20h]
80a43dd2 8bd0 mov edx,eax
80a43dd4 e8ffebffff call nt!KiFindReadyThread (80a429d8)
80a43dd9 8bf0 mov esi,eax
80a43ddb 85f6 test esi,esi
80a43ddd 0f8544010000 jne nt!KiSwapThread+0x463 (80a43f27)

1: kd> dt nt!_KPRCB 0xffdff120
+0x000 MinorVersion : 1
+0x002 MajorVersion : 1
+0x004 CurrentThread : 0x80b200c0 _KTHREAD
+0x008 NextThread : 0x89dc62a0 _KTHREAD
+0x00c IdleThread : 0x80b200c0 _KTHREAD
+0x010 Number : 0 ''
+0x011 Reserved : 0 ''
+0x012 BuildType : 1
+0x014 SetMember : 1
+0x018 CpuType : 6 ''
+0x019 CpuID : 1 ''
+0x01a CpuStep : 0xe03
+0x01c ProcessorState : _KPROCESSOR_STATE
+0x33c KernelReserved : [16] 0
+0x37c HalReserved : [16] 0
+0x3bc PrcbPad0 : [92] ""
+0x418 LockQueue : [16] _KSPIN_LOCK_QUEUE
+0x498 PrcbPad1 : [8] ""
+0x4a0 NpxThread : (null)
+0x4a4 InterruptCount : 0x56943a
+0x4a8 KernelTime : 0x4e1579
+0x4ac UserTime : 0xee
+0x4b0 DpcTime : 0x57
+0x4b4 DebugDpcTime : 0
+0x4b8 InterruptTime : 0x5fa
+0x4bc AdjustDpcThreshold : 3
+0x4c0 PageColor : 0x116df
+0x4c4 SkipTick : 0x1 ''
+0x4c5 DebuggerSavedIRQL : 0x6 ''
+0x4c6 Spare1 : [6] ""
+0x4cc ParentNode : 0x80b20640 _KNODE
+0x4d0 MultiThreadProcessorSet : 3
+0x4d4 MultiThreadSetMaster : 0xffdff120 _KPRCB
+0x4d8 ThreadStartCount : [2] 0
+0x4e0 CcFastReadNoWait : 0
+0x4e4 CcFastReadWait : 0xaf6
+0x4e8 CcFastReadNotPossible : 0
+0x4ec CcCopyReadNoWait : 0xa3
+0x4f0 CcCopyReadWait : 0xc7c
+0x4f4 CcCopyReadNoWaitMiss : 3
+0x4f8 KeAlignmentFixupCount : 0
+0x4fc SpareCounter0 : 0
+0x500 KeDcacheFlushCount : 0
+0x504 KeExceptionDispatchCount : 0x2a8
+0x508 KeFirstLevelTbFills : 0
+0x50c KeFloatingEmulationCount : 0
+0x510 KeIcacheFlushCount : 0
+0x514 KeSecondLevelTbFills : 0
+0x518 KeSystemCalls : 0x21a053
+0x51c SpareCounter1 : 0
+0x520 PPLookasideList : [16] _PP_LOOKASIDE_LIST
+0x5a0 PPNPagedLookasideList : [32] _PP_LOOKASIDE_LIST
+0x6a0 PPPagedLookasideList : [32] _PP_LOOKASIDE_LIST
+0x7a0 PacketBarrier : 0
+0x7a4 ReverseStall : 0xd4
+0x7a8 IpiFrame : 0xf790ec14 Void
+0x7ac PrcbPad2 : [52] ""
+0x7e0 CurrentPacket : [3] (null)
+0x7ec TargetSet : 0
+0x7f0 WorkerRoutine : 0x80a3610e void nt!KiFlushTargetMultipleTb+0
+0x7f4 IpiFrozen : 2
+0x7f8 PrcbPad3 : [40] ""
+0x820 RequestSummary : 0
+0x824 SignalDone : (null)
+0x828 PrcbPad4 : [56] ""
+0x860 DpcData : [2] _KDPC_DATA
+0x888 DpcStack : 0xf789f000 Void
+0x88c MaximumDpcQueueDepth : 4
+0x890 DpcRequestRate : 0
+0x894 MinimumDpcRate : 3
+0x898 DpcInterruptRequested : 0 ''
+0x899 DpcThreadRequested : 0 ''
+0x89a DpcRoutineActive : 0x1 ''
+0x89b DpcThreadActive : 0 ''
+0x89c PrcbLock : 1
+0x8a0 DpcLastCount : 0x4526d
+0x8a4 TimerHand : 0x10ace04e
+0x8a8 TimerRequest : 0
+0x8ac DpcThread : (null)
+0x8b0 DpcEvent : _KEVENT
+0x8c0 ThreadDpcEnable : 0 ''
+0x8c1 QuantumEnd : 0 ''
+0x8c2 PrcbPad50 : 0 ''
+0x8c3 IdleSchedule : 0 ''
+0x8c4 DpcSetEventRequest : 0n0
+0x8c8 PrcbPad5 : [22] ""
+0x8e0 CallDpc : _KDPC
+0x900 PrcbPad7 : [8] 0
+0x920 WaitListHead : _LIST_ENTRY [ 0x89623cd0 - 0x89626350 ]
+0x928 ReadySummary : 0x2000
+0x92c SelectNextLast : 0
+0x930 DispatcherReadyListHead : [32] _LIST_ENTRY [ 0xffdffa50 - 0xffdffa50 ]
+0xa30 DeferredReadyListHead : _SINGLE_LIST_ENTRY


+0x928 ReadySummary : 0x2000


10 0000 0000 0000
13优先级

1: kd> dx -id 0,0,ffffffff89629788 -r1 (*((ntkrnlmp!_LIST_ENTRY *)0xffffffffffdffab8))
(*((ntkrnlmp!_LIST_ENTRY *)0xffffffffffdffab8)) [Type: _LIST_ENTRY]
[+0x000] Flink : 0x89697080 [Type: _LIST_ENTRY *]
[+0x004] Blink : 0x89dd0e00 [Type: _LIST_ENTRY *]
1: kd> dx -id 0,0,ffffffff89629788 -r1 ((ntkrnlmp!_LIST_ENTRY *)0x89697080)
((ntkrnlmp!_LIST_ENTRY *)0x89697080) : 0x89697080 [Type: _LIST_ENTRY *]
[+0x000] Flink : 0x89dd0e00 [Type: _LIST_ENTRY *]
[+0x004] Blink : 0xffdffab8 [Type: _LIST_ENTRY *]


1: kd> dt kthread 0x89697080-60
ntdll!KTHREAD
+0x000 Header : _DISPATCHER_HEADER
+0x010 MutantListHead : _LIST_ENTRY [ 0x89697030 - 0x89697030 ]
+0x018 InitialStack : 0xbaabd000 Void
+0x01c StackLimit : 0xbaaba000 Void
+0x020 KernelStack : 0xbaabca18 Void
+0x024 ThreadLock : 0
+0x028 ContextSwitches : 0x14ac80
+0x02c State : 0x1 ''

1: kd> dt kthread 0x89dd0e00-60
ntdll!KTHREAD
+0x000 Header : _DISPATCHER_HEADER
+0x010 MutantListHead : _LIST_ENTRY [ 0x89dd0db0 - 0x89dd0db0 ]
+0x018 InitialStack : 0xf78d7000 Void
+0x01c StackLimit : 0xf78d4000 Void
+0x020 KernelStack : 0xf78d6cf8 Void
+0x024 ThreadLock : 0
+0x028 ContextSwitches : 0x8651
+0x02c State : 0x1 ''

ListHead = &Prcb->DispatcherReadyListHead[HighPriority];
NextEntry = ListHead->Flink;

1: kd> r
eax=ffdff120 ebx=ffdff120 ecx=00000001 edx=ffdff120 esi=00000000 edi=80a059f8
eip=80a429e3 esp=b9ebf918 ebp=b9ebf93c iopl=0 nv up ei ng nz na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000286
nt!KiFindReadyThread+0xb:
80a429e3 8bbb28090000 mov edi,dword ptr [ebx+928h] ds:0023:ffdffa48=00002000


1: kd> x nt!KiProcessorBlock
80b20680 nt!KiProcessorBlock = struct _KPRCB *[]
80b20680 nt!KiProcessorBlock = struct _KPRCB *[32]
80b20680 nt!KiProcessorBlock = struct _KPRCB *[]
1: kd> dx -id 0,0,ffffffff89629788 -r1 (*((ntkrnlmp!_KPRCB * (*)[32])0xffffffff80b20680))
(*((ntkrnlmp!_KPRCB * (*)[32])0xffffffff80b20680)) [Type: _KPRCB * [32]]
[0] : 0xffdff120 [Type: _KPRCB *]
[1] : 0xf7737120 [Type: _KPRCB *]
[2] : 0x0 [Type: _KPRCB *]
[3] : 0x0 [Type: _KPRCB *]

LONG_PTR
FASTCALL
KiSwapThread (
IN PKTHREAD OldThread,
IN PKPRCB CurrentPrcb
)
{


do {
TargetPrcb = KiProcessorBlock[Index];

if ((TargetPrcb->ReadySummary != 0) &&
(NewThread = KiFindReadyThread(Processor,
TargetPrcb)) != NULL) {


Index -= 1;
if (Index < 0) {
Index = Limit;
}

Number -= 1;
} while (Number >= 0);

1: kd> !pcr
KPCR for Processor 1 at f7737000:
Major 1 Minor 1
NtTib.ExceptionList: b9ebf230
NtTib.StackBase: 00000000
NtTib.StackLimit: 00000000
NtTib.SubSystemTib: f7737ef0
NtTib.Version: 0021f307
NtTib.UserPointer: 00000002
NtTib.SelfTib: 7ffa0000

SelfPcr: f7737000
Prcb: f7737120
Irql: 00000000
IRR: 00000000
IDR: ffffffff
InterruptMode: 00000000
IDT: f773d6e0
GDT: f773d2e0
TSS: f7737ef0

CurrentThread: 895f7228
NextThread: 00000000
IdleThread: f7739fa0

DpcQueue:
1: kd> !pcr 0
KPCR for Processor 0 at ffdff000:
Major 1 Minor 1
NtTib.ExceptionList: ffffffff
NtTib.StackBase: 00000000
NtTib.StackLimit: 00000000
NtTib.SubSystemTib: 80042000
NtTib.Version: 0039913a
NtTib.UserPointer: 00000001
NtTib.SelfTib: 00000000

SelfPcr: ffdff000
Prcb: ffdff120
Irql: 00000000
IRR: 00000000
IDR: ffffffff
InterruptMode: 00000000
IDT: 8003f400
GDT: 8003f000
TSS: 80042000

CurrentThread: 80b200c0
NextThread: 89dc62a0
IdleThread: 80b200c0

DpcQueue:


1: kd> dt kthread 0x89697080-60
ntdll!KTHREAD
+0x000 Header : _DISPATCHER_HEADER
+0x010 MutantListHead : _LIST_ENTRY [ 0x89697030 - 0x89697030 ]
+0x018 InitialStack : 0xbaabd000 Void
+0x01c StackLimit : 0xbaaba000 Void
+0x020 KernelStack : 0xbaabca18 Void
+0x024 ThreadLock : 0
+0x028 ContextSwitches : 0x14ac80
+0x02c State : 0x1 ''
+0x02d NpxState : 0xa ''
+0x02e WaitIrql : 0 ''
+0x02f WaitMode : 0 ''
+0x030 Teb : 0x7ffd9000 Void
+0x034 ApcState : _KAPC_STATE
+0x04c ApcQueueLock : 0
+0x050 WaitStatus : 0n2
+0x054 WaitBlockList : 0x896922a8 _KWAIT_BLOCK
+0x058 Alertable : 0x1 ''
+0x059 WaitNext : 0 ''
+0x05a WaitReason : 0xd ''
+0x05b Priority : 13 ''
+0x05c EnableStackSwap : 0x1 ''
+0x05d SwapBusy : 0 ''
+0x05e Alerted : [2] ""
+0x060 WaitListEntry : _LIST_ENTRY [ 0x89dd0e00 - 0xffdffab8 ]
+0x060 SwapListEntry : _SINGLE_LIST_ENTRY
+0x068 Queue : (null)
+0x06c WaitTime : 0x10ace04e
+0x070 KernelApcDisable : 0n0
+0x072 SpecialApcDisable : 0n0
+0x070 CombinedApcDisable : 0
+0x078 Timer : _KTIMER
+0x0a0 WaitBlock : [4] _KWAIT_BLOCK
+0x100 QueueListEntry : _LIST_ENTRY [ 0x0 - 0x0 ]
+0x108 ApcStateIndex : 0 ''
+0x109 ApcQueueable : 0x1 ''
+0x10a Preempted : 0 ''
+0x10b ProcessReadyQueue : 0 ''
+0x10c KernelStackResident : 0x1 ''
+0x10d Saturation : 0 ''
+0x10e IdealProcessor : 0 ''
+0x10f NextProcessor : 0 ''
+0x110 BasePriority : 13 ''
+0x111 Spare4 : 0 ''
+0x112 PriorityDecrement : 0 ''
+0x113 Quantum : 34 '"'
+0x114 SystemAffinityActive : 0 ''
+0x115 PreviousMode : 1 ''
+0x116 ResourceIndex : 0 ''
+0x117 DisableBoost : 0 ''
+0x118 UserAffinity : 3
+0x11c Process : 0x896a1248 _KPROCESS
+0x120 Affinity : 3
+0x124 ServiceTable : 0x80b207a0 Void
+0x128 ApcStatePointer : [2] 0x89697054 _KAPC_STATE
+0x130 SavedApcState : _KAPC_STATE
+0x148 CallbackStack : (null)
+0x14c Win32Thread : 0xe165b908 Void
+0x150 TrapFrame : 0xbaabcd64 _KTRAP_FRAME
+0x154 KernelTime : 0x15
+0x158 UserTime : 0
+0x15c StackBase : 0xbaabd000 Void
+0x160 SuspendApc : _KAPC
+0x190 SuspendSemaphore : _KSEMAPHORE
+0x1a4 TlsArray : (null)
+0x1a8 LegoData : (null)
+0x1ac ThreadListEntry : _LIST_ENTRY [ 0x8969cf4c - 0x899b49ec ]
+0x1b4 LargeStack : 0x1 ''
+0x1b5 PowerState : 0 ''
+0x1b6 NpxIrql : 0 ''
+0x1b7 Spare5 : 0 ''
+0x1b8 AutoAlignment : 0 ''
+0x1b9 Iopl : 0 ''
+0x1ba FreezeCount : 0 ''
+0x1bb SuspendCount : 0 ''
+0x1bc Spare0 : [1] ""
+0x1bd UserIdealProcessor : 0 ''
+0x1be DeferredProcessor : 0x1 ''
+0x1bf AdjustReason : 0 ''
+0x1c0 AdjustIncrement : 0 ''
+0x1c1 Spare2 : [3] ""
1: kd> dx -id 0,0,ffffffff89629788 -r1 (*((ntdll!_LIST_ENTRY *)0xffffffff89697080))
(*((ntdll!_LIST_ENTRY *)0xffffffff89697080)) [Type: _LIST_ENTRY]
[+0x000] Flink : 0x89dd0e00 [Type: _LIST_ENTRY *]
[+0x004] Blink : 0xffdffab8 [Type: _LIST_ENTRY *]


if (RemoveEntryList(&Thread->WaitListEntry) != FALSE) {
Prcb->ReadySummary ^= PRIORITY_MASK(HighPriority);
}


1: kd> !pcr 0
KPCR for Processor 0 at ffdff000:


1: kd> dx -id 0,0,ffffffff89629788 -r1 ((ntkrnlmp!_KPRCB *)0xffdff120)
((ntkrnlmp!_KPRCB *)0xffdff120) : 0xffdff120 [Type: _KPRCB *]
[+0x000] MinorVersion : 0x1 [Type: unsigned short]


[+0x928] ReadySummary : 0x2000 [Type: unsigned long]
[+0x92c] SelectNextLast : 0x0 [Type: unsigned long]
[+0x930] DispatcherReadyListHead [Type: _LIST_ENTRY [32]]


[13] [Type: _LIST_ENTRY]

1: kd> dx -id 0,0,ffffffff89629788 -r1 (*((ntkrnlmp!_LIST_ENTRY *)0xffffffffffdffab8))
(*((ntkrnlmp!_LIST_ENTRY *)0xffffffffffdffab8)) [Type: _LIST_ENTRY]
[+0x000] Flink : 0x89dd0e00 [Type: _LIST_ENTRY *]
[+0x004] Blink : 0x89dd0e00 [Type: _LIST_ENTRY *]


0010 0000 0000 0000


[+0x928] ReadySummary : 0x2000 [Type: unsigned long]
[+0x92c] SelectNextLast : 0x0 [Type: unsigned long]

第二部分:

1: kd> x win32k!apobjects
WARNING: Match string has trailing space
1: kd> x win32k!apobjects
bfa6ed8c win32k!apObjects = 0x89692618
1: kd> dd 0x89692618
89692618 89919da8 89bb0db8 89699498 89bdf258
89692628 80bf4220 89a2f948 89be0e60 00000000
89692638 1a140007 20707249 00940006 00000000
89692648 00000900 00000000 89692650 89692650
89692658 00000000 00000000 01010001 04000000
89692668 0006fc74 00000000 00000000 00000000
89692678 baa3d0c6 0006fd78 00000000 00000000
89692688 e1744b60 89669658 8963a410 00000000
1: kd> dt ktimer 89699498
winsrv!KTIMER
+0x000 Header : _DISPATCHER_HEADER
+0x010 DueTime : _ULARGE_INTEGER 0x000027c1`cb40e840
+0x018 TimerListEntry : _LIST_ENTRY [ 0x0 - 0x0 ]
+0x020 Dpc : (null)
+0x024 Period : 0n0
1: kd> dx -id 0,0,ffffffff89629788 -r1 (*((winsrv!_DISPATCHER_HEADER *)0xffffffff89699498))
(*((winsrv!_DISPATCHER_HEADER *)0xffffffff89699498)) [Type: _DISPATCHER_HEADER]
[+0x000] Type : 0x8 [Type: unsigned char]
[+0x001] Absolute : 0x0 [Type: unsigned char]
[+0x002] Size : 0xa [Type: unsigned char]
[+0x003] Inserted : 0x0 [Type: unsigned char]
[+0x003] DebugActive : 0x0 [Type: unsigned char]
[+0x000] Lock : 655368 [Type: long]
[+0x004] SignalState : 1 [Type: long]
[+0x008] WaitListHead [Type: _LIST_ENTRY]
1: kd> dx -id 0,0,ffffffff89629788 -r1 (*((winsrv!_LIST_ENTRY *)0xffffffff896994a0))
(*((winsrv!_LIST_ENTRY *)0xffffffff896994a0)) [Type: _LIST_ENTRY]
[+0x000] Flink : 0x896994a0 [Type: _LIST_ENTRY *]
[+0x004] Blink : 0x896994a0 [Type: _LIST_ENTRY *]

第三部分:

1: kd> g
Breakpoint 15 hit
eax=00000002 ebx=00000000 ecx=00000000 edx=80010031 esi=bfa01624 edi=bfa03214
eip=bf891bbd esp=baabcac8 ebp=baabcd1c iopl=0 nv up ei ng nz na po cy
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000283
win32k!RawInputThread+0x712:
bf891bbd 3bc3 cmp eax,ebx
1: kd> kc
#
00 win32k!RawInputThread
01 win32k!xxxCreateSystemThreads
02 win32k!NtUserCallOneParam
03 nt!_KiSystemService
04 SharedUserData!SystemCallStub
05 winsrv!NtUserCallOneParam

1: kd> r
eax=00000002 ebx=00000000 ecx=00000000 edx=80010031 esi=bfa01624 edi=bfa03214
eip=bf891bbd esp=baabcac8 ebp=baabcd1c iopl=0 nv up ei ng nz na po cy
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000283
win32k!RawInputThread+0x712:
bf891bbd 3bc3 cmp eax,ebx

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 3:36:08

Python 爬虫实战:解析 JSON 数据接口的爬虫开发

前言 在网络数据采集领域&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;作为轻量级的数据交换格式&#xff0c;被绝大多数 Web 应用的接口所采用。相较于传统的 HTML 页面解析&#xff0c;JSON 接口爬取具有数据结构清晰、解析效率高、数据提取成本低等…

作者头像 李华
网站建设 2026/4/18 3:33:42

避开 35 岁职场危机:网络安全为何能成为越沉淀越吃香的赛道?

前几天我表弟小王来找我喝茶&#xff0c;聊着聊着突然问我&#xff1a;“老曹&#xff0c;你说我要不要转行做网络安全啊&#xff1f; 听说这行业挺赚钱的。 “我一听就笑了&#xff0c;这不正好最近我刚研究过这个行业吗&#xff1f; 我跟他说&#xff0c;别看现在各行各业…

作者头像 李华
网站建设 2026/4/18 3:35:33

Cesium中实现燕尾箭头、双向箭头等绘制

概要 Cesium中已经自带了多种形状的绘制&#xff0c;但是对于一些特殊的形状&#xff0c;需要我们自行定义。形状都是由点、线、面组成,对于复杂的图形其实可以拆解成多个简易形状组合而成。比如箭头可以看出是三角形和长方形的组合&#xff0c;但是这样做的话绘制的代码可能也…

作者头像 李华
网站建设 2026/4/17 20:31:29

22、Linux 系统进程管理与文本文件编辑全解析

Linux 系统进程管理与文本文件编辑全解析 1. 识别运行进程 在 Linux 系统中,了解系统的负载平均情况能反映出系统中进程对 CPU 时间的需求。例如,在一个四核 CPU 的系统上,负载平均为 4.0 意味着进程对 CPU 时间的需求恰好等于计算机所能提供的 CPU 时间。 w 命令可以告…

作者头像 李华
网站建设 2026/4/18 8:42:48

大岩资本黄铂:A股量化的未来是细节致胜

大岩资本黄铂&#xff1a;A股量化的未来是细节致胜近期&#xff0c;嘉石大岩私募证券基金管理有限公司总经理兼首席投资官黄铂出席了东南亚经济与金融论坛。会上&#xff0c;黄博士以量化投资的视角&#xff0c;分享了不同市场环境下Alpha的来源变化&#xff0c;以及量化策略未…

作者头像 李华
网站建设 2026/4/17 21:14:42

Manim实现闪电特效

1. 实现原理闪电特效通过LightningAnimation类实现&#xff0c;该类继承自Manim的基础Animation类&#xff0c;主要基于以下几个核心原理&#xff1a;1.1. 折线生成与随机偏移闪电的基本形状是通过在起点和终点之间创建多个带有随机偏移的转折点来实现的&#xff1a;# 初始化闪…

作者头像 李华