news 2026/4/16 4:12:29

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/11 18:20:27

Python 爬虫实战:将爬取数据存入 CSV 表格

前言 在数据采集与分析的工作场景中&#xff0c;Python 爬虫是获取网络公开数据的核心技术手段&#xff0c;而将爬取到的数据规范化存储则是后续数据处理的基础环节。CSV&#xff08;逗号分隔值&#xff09;格式作为一种轻量级、跨平台的表格文件格式&#xff0c;因其结构简单…

作者头像 李华
网站建设 2026/4/11 23:35:49

Python 爬虫实战:urllib 库的核心用法与实战案例

前言 在 Python 爬虫领域&#xff0c;urllib 库作为内置的 HTTP 请求处理库&#xff0c;是入门爬虫开发的核心工具之一。它无需额外安装&#xff0c;原生支持 HTTP/HTTPS 请求发送、响应处理、URL 解析等核心功能&#xff0c;是理解爬虫底层原理的重要载体。本文将从 urllib 库…

作者头像 李华
网站建设 2026/4/13 18:45:08

震惊!这家云服务器厂家竟让巨头们连夜排队抢购!

震惊&#xff01;这家云服务器厂家竟让巨头们连夜排队抢购&#xff01; 在竞争日趋白热化的云计算市场&#xff0c;一家服务商的产品发布能让行业巨头们放下身段、连夜排队抢购&#xff0c;这听起来像是天方夜谭。然而&#xff0c;近期在业内流传的一则消息&#xff0c;却将这…

作者头像 李华
网站建设 2026/4/11 5:23:50

18、Linux 文件与目录操作及数据处理指南

Linux 文件与目录操作及数据处理指南 1. 文件操作 1.1 删除文件 在文本模式的 shell 中,可以使用 rm 命令来删除文件。只需将一个或多个文件名作为参数传递给该命令即可,例如: $ rm outline.pdf outline.txt此命令会删除 outline.pdf 和 outline.txt 这两个文件。…

作者头像 李华
网站建设 2026/4/13 4:58:51

插座工程量一键识别-图块统计告别人工点数

插座工程量一键识别-图块统计告别人工点数 电气图纸中插座数量种类繁多&#xff0c;传统人工逐个点数易疲劳、易出错。借助CAD快速看图的【图形识别】&#xff0c;可自动识别并分类统计各类插座工程量&#xff0c;一键生成工程量汇总表&#xff0c;实现插座工程量的高效精准计…

作者头像 李华
网站建设 2026/4/15 14:53:02

SQL必会必知整理-11-分组数据

11.1 数据分组SQL聚集函数可用来汇总数据。这使我们能够对行进行计数&#xff0c;计算和与平均数&#xff0c;获得最大和最小值而不用检索所有数据。但如果要返回每个供应商提供的产品数&#xff0c;或者返回只提供单项产品的供应商所提供的产品&#xff0c;或返回提供10个以上…

作者头像 李华