news 2026/6/23 20:55:52

调用nt!KiExitDispatcher的又一个函数nt!KeInsertQueueApc和nt!KiProcessDeferredReadyList函数分析和全局变量nt!KiIdleSummar

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
调用nt!KiExitDispatcher的又一个函数nt!KeInsertQueueApc和nt!KiProcessDeferredReadyList函数分析和全局变量nt!KiIdleSummar

调用nt!KiExitDispatcher的又一个函数nt!KeInsertQueueApc和nt!KiProcessDeferredReadyList函数分析和全局变量nt!KiIdleSummary和nt!KiMask32Array的作用
0: kd> g
Breakpoint 41 hit
eax=0000001b ebx=804edc6c ecx=ffdff120 edx=00000000 esi=00000000 edi=ffdff120
eip=80a42c0c esp=f789ed18 ebp=f789ed38 iopl=0 nv up ei ng nz na po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000282
nt!KiProcessDeferredReadyList:
80a42c0c 53 push ebx
0: kd> kc
#
00 nt!KiProcessDeferredReadyList
01 nt!KiExitDispatcher
02 nt!KeInsertQueueApc
03 nt!IopfCompleteRequest
04 mouclass!MouseClassServiceCallback
05 mouhid!MouHid_ReadComplete
06 nt!IopfCompleteRequest
07 HIDCLASS!HidpDistributeInterruptReport
08 HIDCLASS!HidpInterruptReadComplete

0: kd> dx -id 0,0,8954e020 -r1 (*((basesrv!_SINGLE_LIST_ENTRY *)0xffdffb50))
(*((basesrv!_SINGLE_LIST_ENTRY *)0xffdffb50)) [Type: _SINGLE_LIST_ENTRY]
[+0x000] Next : 0x89804080 [Type: _SINGLE_LIST_ENTRY *]
0: kd> dx -id 0,0,8954e020 -r1 ((basesrv!_SINGLE_LIST_ENTRY *)0x89804080)
((basesrv!_SINGLE_LIST_ENTRY *)0x89804080) : 0x89804080 [Type: _SINGLE_LIST_ENTRY *]
[+0x000] Next : 0x0 [Type: _SINGLE_LIST_ENTRY *]
0: kd> dt kthread 0x89804080-60
CSRSRV!KTHREAD
+0x000 Header : _DISPATCHER_HEADER
+0x010 MutantListHead : _LIST_ENTRY [ 0x89804030 - 0x89804030 ]
+0x018 InitialStack : 0xf75f7000 Void
+0x01c StackLimit : 0xf75f4000 Void
+0x020 KernelStack : 0xf75f692c Void
+0x024 ThreadLock : 0
+0x028 ContextSwitches : 0x25d
+0x02c State : 0x7 ''


+0x1bf AdjustReason : 0x1 ''


if (Thread->WaitStatus != STATUS_KERNEL_APC) { 没有运行
Thread->Quantum -= WAIT_QUANTUM_DECREMENT;
if (Thread->Quantum <= 0) {
Thread->Quantum = Process->ThreadQuantum;
Thread->Priority = KiComputeNewPriority(Thread, 1);
}
}

+0x050 WaitStatus : 0n256

#define STATUS_KERNEL_APC 0x100


参考:
00 nt!KiProcessDeferredReadyList
01 nt!KiExitDispatcher
02 nt!KeInsertQueueApc
03 nt!IopfCompleteRequest
参考结束:


前面是优先级调整部分:

//
// Save the value of thread's preempted flag and set thread preempted
// FALSE,
//

Preempted = Thread->Preempted; 可以再这里下断点:
Thread->Preempted = FALSE;

42 e Disable Clear 80a41f95 [d:\srv03rtm\base\ntos\ke\thredsup.c @ 398] 0001 (0001) nt!KiDeferredReadyThread+0x36d

0: kd> dv Preempted
Preempted = 0x00 ''


do {
Processor = Thread->IdealProcessor;
IdleSet = KiIdleSummary & Affinity;

0: kd> p
eax=00000001 ebx=0000000f ecx=00000003 edx=0000000f esi=89804020 edi=80a059f8
eip=80a41fbc esp=f789ece4 ebp=f789ed04 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!KiDeferredReadyThread+0x394:
80a41fbc a1806eb180 mov eax,dword ptr [nt!_KiIdleSummary (80b16e80)] ds:0023:80b16e80=00000002


0: kd> x nt!KiIdleSummary
80b16e80 nt!KiIdleSummary = 2

do {
Processor = Thread->IdealProcessor;
IdleSet = KiIdleSummary & Affinity;
if (IdleSet != 0) {

} else {
break;
}

} while (TRUE);


if ((IdleSet & AFFINITY_MASK(Processor)) == 0) {

0: kd> p
eax=00000002 ebx=0000000f ecx=00000003 edx=00000001 esi=89804020 edi=80a059f8
eip=80a41fce esp=f789ece4 ebp=f789ed04 iopl=0 nv up ei pl nz na po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000202
nt!KiDeferredReadyThread+0x3a6:
80a41fce 850495b05ea080 test dword ptr nt!KiMask32Array (80a05eb0)[edx*4],eax ds:0023:80a05eb4=00000002

eax=00000002=IdleSet

AFFINITY_MASK

0: kd> x nt!KiMask32Array
80a05eb0 nt!KiMask32Array = unsigned long []
80a05eb0 nt!KiMask32Array = unsigned long [32]
80a05eb0 nt!KiMask32Array = unsigned long []
0: kd> dx -r1 (*((ntkrnlmp!unsigned long (*)[32])0x80a05eb0))
(*((ntkrnlmp!unsigned long (*)[32])0x80a05eb0)) [Type: unsigned long [32]]
[0] : 0x1 [Type: unsigned long]
[1] : 0x2 [Type: unsigned long]
[2] : 0x4 [Type: unsigned long]
[3] : 0x8 [Type: unsigned long]
[4] : 0x10 [Type: unsigned long]
[5] : 0x20 [Type: unsigned long]

+0x10e IdealProcessor : 0x1 ''

参考:另一个定义
#define AFFINITY_MASK(n) ((ULONG_PTR)1 << (n))
参考:另一个定义

#define AFFINITY_MASK(n) (KiAffinityArray[n])
#define KiAffinityArray KiMask32Array

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

ComfyUI-SeedVR2视频超分插件完整安装与配置指南

ComfyUI-SeedVR2视频超分插件完整安装与配置指南 【免费下载链接】ComfyUI-SeedVR2_VideoUpscaler Non-Official SeedVR2 Vudeo Upscaler for ComfyUI 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-SeedVR2_VideoUpscaler 想要将低分辨率视频一键升级到4K画质&…

作者头像 李华
网站建设 2026/6/23 17:26:10

开源TTS新星崛起:EmotiVoice为何备受开发者青睐?

开源TTS新星崛起&#xff1a;EmotiVoice为何备受开发者青睐&#xff1f; 在虚拟主播直播中突然情绪高涨&#xff0c;在有声书朗读里语气随情节起伏&#xff0c;在游戏NPC对话时因情境变化而或怒或惧——这些曾属于真人配音的细腻表达&#xff0c;如今正被一个开源项目悄然实现。…

作者头像 李华
网站建设 2026/6/23 19:36:31

记录Kibana多实例竞争导致的迁移锁

现象Another Kibana instance appears to be migrating the index. Waiting for that migration to complete. If no other Kibana instance is attempting migrations, you can get past this message by deleting index .kibana_1 and restarting Kibana. 核心原因&#xff1…

作者头像 李华
网站建设 2026/6/23 19:33:28

多肽合成丨HNGS14G CAS号: 330936-70-4

名称&#xff1a;HNGS14GCAS号&#xff1a;330936-70-4序列&#xff1a;H-Met-Ala-Pro-Arg-Gly-He-Ser-Cys-Leu-Leu-Leu-Thr-Gly-Leu-Asp-Leu-Pro-Al-Lys-Arg-Ala-OH分子式&#xff1a;C118H202N34O31S2分子量&#xff1a;2657.25外观&#xff1a;白色粉末来源&#xff1a;合成…

作者头像 李华
网站建设 2026/6/23 16:46:37

43、Linux 网络安全:防火墙与认证机制深度解析(上)

Linux 网络安全:防火墙与认证机制深度解析(上) 在当今数字化时代,网络安全至关重要。Linux 系统为我们提供了一系列强大的工具来保障网络安全,本文将深入探讨 Linux 中的防火墙配置以及认证机制的优化。 1. 服务启动与防火墙控制 像 dhcpd 这样的服务会在系统启动时自动…

作者头像 李华