news 2026/7/7 21:02:49

调用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/7/7 23:17:49

ThinkPad T480黑苹果安装指南:OpenCore完整配置方案

ThinkPad T480黑苹果安装指南&#xff1a;OpenCore完整配置方案 【免费下载链接】t480-oc &#x1f4bb; Lenovo ThinkPad T480 / T580 / X280 Hackintosh (macOS Monterey 12.x & Ventura 13.x) - OpenCore 项目地址: https://gitcode.com/gh_mirrors/t4/t480-oc T…

作者头像 李华
网站建设 2026/7/8 15:08:13

3大核心功能深度体验:CVAT智能标注实战手册

3大核心功能深度体验&#xff1a;CVAT智能标注实战手册 【免费下载链接】cvat Annotate better with CVAT, the industry-leading data engine for machine learning. Used and trusted by teams at any scale, for data of any scale. 项目地址: https://gitcode.com/gh_mir…

作者头像 李华
网站建设 2026/7/7 20:06:52

2025年AI面试深度测评:3款主流工具实战对比

一面要筛1000份简历&#xff0c;另一面候选人抱怨流程拖沓&#xff1f;传统招聘模式在效率、公平与体验之间难以兼顾。2025年&#xff0c;企业如何通过AI面试工具破局&#xff1f;本文带来三款主流产品的客观测评。 一、企业招聘面临的核心问题 HR日常痛点真实写照&#xff1…

作者头像 李华
网站建设 2026/7/7 16:50:29

光通信中MZM外调制技术及OFDM系统应用原理

目录 1.MZM调制器的原理 1.1 输入输出电场关系 1.2 不同检测方式下的传输函数 1.3 MZM的非线性与偏置点选择 2.MATLAB仿真 光通信系统的调制方式分为直接调制和外调制&#xff0c;两者的核心差异与适用场景如下&#xff1a; 直接调制&#xff1a;通过改变半导体激光器的注…

作者头像 李华
网站建设 2026/7/7 20:48:34

内心繁杂淹没智慧

如果一个人的头脑内&#xff0c;各种信息、想法非常繁杂&#xff0c;智慧就容易淹没其中。这就好比&#xff0c;你之前买了本书&#xff0c;买了茶杯&#xff0c;放在了家里。今天想把书和茶杯找出来&#xff0c;边看书边喝茶。但是&#xff0c;家里堆满了垃圾&#xff0c;根本…

作者头像 李华
网站建设 2026/7/7 10:57:05

Grafana中文版终极指南:打造无障碍数据可视化平台

Grafana中文版终极指南&#xff1a;打造无障碍数据可视化平台 【免费下载链接】grafana-chinese grafana中文版本 项目地址: https://gitcode.com/gh_mirrors/gr/grafana-chinese Grafana中文版本基于官方源码深度汉化&#xff0c;为中文用户提供完整的监控解决方案。通…

作者头像 李华