news 2026/8/24 10:36:38

nt!KiExitDispatcher调用nt!KiProcessDeferredReadyList后调用nt!SwapContext的例子----特别重要

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
nt!KiExitDispatcher调用nt!KiProcessDeferredReadyList后调用nt!SwapContext的例子----特别重要


nt!KiDeferredReadyThread抢占的一个例子和nt!KiExitDispatcher调用nt!KiProcessDeferredReadyList后调用nt!SwapContext的一个例子

背景:0号处理器运行nt!KiDeferredReadyThread处理一个延迟就绪线程,放到1号处理器的

NextThread中。

此时1号处理器也在运行nt!KiDeferredReadyThread函数,把线程0x89575080-60优先级夜为15,比1号处理器的CurrentThread=0x89555268的优先级为15,所以放到就绪队列了。

第一部分:

1: kd> p
eax=89555268 ebx=f7737120 ecx=0000000f edx=0000000e esi=89804020 edi=80a059f8


eip=80a425aa 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+0x982:
80a425aa 897308          mov     dword ptr [ebx+8],esi ds:0023:f7737128=00000000
0: kd> p
eax=89555268 ebx=f7737120 ecx=0000000f edx=0000000e esi=89804020 edi=80a059f8
eip=80a425ad 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+0x985:
80a425ad ff150831a080    call    dword ptr [nt!_imp__KeGetCurrentIrql (80a03108)] ds:0023:80a03108={hal!KeGetCurrentIrql (804edc6c)}
0: kd> dx -id 0,0,8954e020 -r1 ((ntkrnlmp!_KPRCB *)0xf7737120)
((ntkrnlmp!_KPRCB *)0xf7737120)                 : 0xf7737120 [Type: _KPRCB *]
    [+0x000] MinorVersion     : 0x1 [Type: unsigned short]
    [+0x002] MajorVersion     : 0x1 [Type: unsigned short]
    [+0x004] CurrentThread    : 0x89555268 [Type: _KTHREAD *]
    [+0x008] NextThread       : 0x89804020 [Type: _KTHREAD *]

    [+0x00c] IdleThread       : 0xf7739fa0 [Type: _KTHREAD *]
    [+0x010] Number           : 1 [Type: char]
    [+0x011] Reserved         : 0 [Type: char]
    [+0x012] BuildType        : 0x1 [Type: unsigned short]
    [+0x014] SetMember        : 0x2 [Type: unsigned long]


        } else {
            Thread1 = TargetPrcb->CurrentThread;
            if (ThreadPriority > Thread1->Priority) {
                Thread1->Preempted = TRUE;
                Thread->State = Standby;
                TargetPrcb->NextThread = Thread;
                KiReleaseTwoPrcbLocks(CurrentPrcb, TargetPrcb);
                KiRequestDispatchInterrupt(Thread->NextProcessor);
                return;
            }
        }

                KiRequestDispatchInterrupt(Thread->NextProcessor);

1: kd> p
Breakpoint 16 hit
eax=00000001 ebx=00000102 ecx=00000002 edx=00000000 esi=f7737120 edi=00000000
eip=804ee4f8 esp=f75d692c ebp=f75d6950 iopl=0         nv up ei pl nz na po nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00000202
hal!HalRequestSoftwareInterrupt:
804ee4f8 643a0d95000000  cmp     cl,byte ptr fs:[95h]       fs:0030:00000095=00
1: kd> kc 4
 #
00 hal!HalRequestSoftwareInterrupt
01 nt!KiIpiServiceRoutine
02 hal!HalpIpiHandler
03 nt!KiDeferredReadyThread


rsi10:  mov     PCR[PcHal.DpcPending], 1
        fstRET  HalRequestSoftwareInterrupt

fstENDP HalRequestSoftwareInterrupt

PcHal equ 00094H


PcrE struc
    PcrNumber           db      0           ; Processor's number
    ShortDpc            db      0           ; Short circut dpc interrupt
    DpcPending          db      0           ; Dpc interrupt pending


1: kd> db 0030:95
0030:00000095  00 00 00 a0 62 ef 03 00-00 00 00 a0 62 ef 03 70 ....b.......b..p
0030:000000a5  26 97 d6 00 00 00 00 5c-e9 b2 d6 00 00 00 00 00 &......\........
0030:000000b5  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1: kd> db 0030:96
0030:00000096  00 00 a0 62 ef 03 00 00-00 00 a0 62 ef 03 70 26 ...b.......b..p&

1: kd> dx -id 0,0,8954e020 -r1 ((ntkrnlmp!_KPRCB *)0xf7737120)
((ntkrnlmp!_KPRCB *)0xf7737120)                 : 0xf7737120 [Type: _KPRCB *]
    [+0x000] MinorVersion     : 0x1 [Type: unsigned short]
    [+0x002] MajorVersion     : 0x1 [Type: unsigned short]
    [+0x004] CurrentThread    : 0x89555268 [Type: _KTHREAD *]
    [+0x008] NextThread       : 0x89804020 [Type: _KTHREAD *]


     Thread->NextProcessor = (UCHAR)Processor;
        if ((Thread1 = TargetPrcb->NextThread) != NULL) {

            ASSERT(Thread1->State == Standby);

            if (ThreadPriority > Thread1->Priority) {
                Thread1->Preempted = TRUE;
                Thread->State = Standb

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

边缘AI Agent实时推理难题全解析(低延迟高能效方案大公开)

第一章:边缘AI Agent推理速度的核心挑战在边缘计算环境中部署AI Agent时,推理速度面临多重技术瓶颈。受限的硬件资源、实时性要求以及模型复杂度之间的矛盾,使得优化推理性能成为关键课题。硬件资源限制 边缘设备通常配备低功耗处理器&#x…

作者头像 李华
网站建设 2026/8/23 10:55:00

cmake_第二章 CMake基础语法_set(),缓存变量set(CACHE)

文章目录第二章 CMake基础语法2.4 cmake定义普通变量set()2.4.1 set() 语法格式2.4.2 变量类型和作用域详解2.4.3 CMake运行脚本 .cmake 文件2.4.4 编译 .cmake脚本-- cmake -P选项2.4.5 使用-D选项定义变量2.4.6 普通变量总结2.5 CMake定义缓存变量set(CACHE)2.5.1 缓存变量语…

作者头像 李华
网站建设 2026/8/24 4:04:50

python-flask-django基于BS架构的小区物业管理系统设计与实现_rsr3ei73

文章目录系统截图项目技术简介可行性分析主要运用技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!系统截图 python-flask-djangoBS_rsrei73 架构的小区物业管理系统设计与实现基于 项目技术简介 Python…

作者头像 李华
网站建设 2026/8/22 17:25:12

视觉SLAM十四讲解读-(v2.p85)李代数求导(扰动模型-左乘)

视觉SLAM十四讲解读-(v2.p85)李代数求导(扰动模型-左乘)1. 问题背景和目标 这里采用扰动模型(左乘)来求导。对旋转矩阵 RRR 进行一次左扰动 ΔR\Delta RΔR,设左扰动 ΔR\Delta RΔR 对应的李代数为 φ\varphiφ,目标是计算 ∂(Rp…

作者头像 李华
网站建设 2026/8/23 23:39:07

免费彻底解决找不到d3dx10_39.dll文件 无法运行软件游戏问题

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/8/24 5:54:52

【显示】SDR和HDR区别

SDR和HDR区别1 SDR VS HDR2 色域差异2.1 Rec. 7092.2 Rec. 2020参考资料1 SDR VS HDR SDR(标准动态范围)是传统的显示标准,常见于普通电视、显示器、视频。它能显示的亮度范围有限,一般最大亮度在 100 ~ 300 nits 左右&#xff0…

作者头像 李华