news 2026/6/15 0:19:43

HalEndSystemInterrupt为什么能调用KiDispatchInterrupt因为HalRequestSoftwareInterrupt设置PCR[PcHal.DpcPending]为1

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HalEndSystemInterrupt为什么能调用KiDispatchInterrupt因为HalRequestSoftwareInterrupt设置PCR[PcHal.DpcPending]为1

hal!HalEndSystemInterrupt函数为什么能调用nt!KiDispatchInterrupt函数因为hal!HalRequestSoftwareInterrupt最后设置PCR[PcHal.DpcPending]为1

第一部分:

HeiNewIrql equ [esp + 4]
HeiVector equ [esp + 8]

cPublicProc _HalEndSystemInterrupt ,2
cPublicFpo 2, 0
xor ecx,ecx
mov cl, byte ptr HeiNewIrql ; get new IRQL
mov cl, _HalpIRQLtoTPR[ecx] ; get corresponding TPR value

mov dword ptr APIC[LU_EOI], 0 ; send EOI to APIC local unit
APICFIX edx

cmp cl, DPC_VECTOR ; Is new irql < DPC?
jc short es10 ; Yes, go check for pending DPC

es05: mov dword ptr APIC[LU_TPR], ecx ; Set new Priority

;
; We have to ensure that the requested priority is set before
; we return. The caller is counting on it.
;
mov edx, dword ptr APIC[LU_TPR]
CHECKTPR ecx, edx
stdRET _HalEndSystemInterrupt

es10: cmp PCR[PcHal.DpcPending], 0 ; Is a DPC pending?
mov PCR[PcHal.ShortDpc], 0 ; Clear short dpc flag
jz short es05 ; No, eoi

mov dword ptr APIC[LU_TPR], DPC_VECTOR ; lower to DPC level
APICFIX edx

push ebx ; Save EBX (used by KiDispatchInterrupt)
push ecx ; Save OldIrql
cPublicFpo 2, 2

sti

es20: mov PCR[PcHal.DpcPending], 0 ; Clear pending flag

stdCall _KiDispatchInterrupt ; Dispatch interrupt //这里调用了_KiDispatchInterrupt

cli

pop ecx
pop ebx
jmp short es05

stdENDP _HalEndSystemInterrupt

第二部分:

F:\srv03rtm>grep "DpcPending" -nr F:\srv03rtm\base\hals |grep -v "inary"
F:\srv03rtm\base\hals/halmps/i386/mpswint.asm:132:; DpcPending flag - whomever set ShortDpc will check the flag
F:\srv03rtm\base\hals/halmps/i386/mpswint.asm:136:rsi10: mov PCR[PcHal.DpcPending], 1
F:\srv03rtm\base\hals/halmps/i386/mpsysint.asm:121:es10: cmp PCR[PcHal.DpcPending], 0 ; Is a DPC pending?
F:\srv03rtm\base\hals/halmps/i386/mpsysint.asm:134:es20: mov PCR[PcHal.DpcPending], 0 ; Clear pending flag

参考:

cPublicFastCall HalRequestSoftwareInterrupt ,1
cPublicFpo 0,0

cmp cl, PCR[PcHal.ShortDpc]
je short rsi10

xor eax, eax
mov al, cl ; get irql

;
; In an APIC based system the TPR is the IDTEntry
;

xor ecx, ecx
mov cl, _HalpIRQLtoTPR[eax] ; get IDTEntry for IRQL

;
; Build the ICR Command - Fixed Delivery to Self, IDTEntry == al
;

or ecx, (DELIVER_FIXED OR ICR_SELF)

;
; Make sure the ICR is available
;

pushfd ; save interrupt mode
cli ; disable interrupt
STALL_WHILE_APIC_BUSY

;
; Now write the command to the Memory Mapped Register
;

mov dword ptr APIC[LU_INT_CMD_LOW], ecx

;
; We have to wait for the request to be delivered.
; If we don't wait here, then we will return to the caller
; before the request has been issued.
;
STALL_WHILE_APIC_BUSY

popfd ; restore original interrupt mode
fstRET HalRequestSoftwareInterrupt

;
; Requesting a DPC interrupt when ShortDpc is set. Just set the
; DpcPending flag - whomever set ShortDpc will check the flag
; at the proper time
;

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

参考:

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

为什么你的Agent扛不住高辐射环境?揭秘抗干扰设计的4大核心技术

第一章&#xff1a;核工业 Agent 的故障处理在核工业自动化系统中&#xff0c;Agent 作为关键的数据采集与控制单元&#xff0c;承担着实时监控反应堆状态、传输传感器数据和执行安全指令的核心任务。一旦 Agent 出现异常&#xff0c;可能导致数据延迟、控制失效甚至安全风险&a…

作者头像 李华
网站建设 2026/6/14 21:14:20

Mermaid.js终极指南:5分钟掌握文本化数据可视化魔法

Mermaid.js终极指南&#xff1a;5分钟掌握文本化数据可视化魔法 【免费下载链接】mermaid mermaid-js/mermaid: 是一个用于生成图表和流程图的 Markdown 渲染器&#xff0c;支持多种图表类型和丰富的样式。适合对 Markdown、图表和流程图以及想要使用 Markdown 绘制图表和流程图…

作者头像 李华
网站建设 2026/6/15 3:06:29

【资深架构师私藏笔记】:云边 Agent 延迟优化的12个黄金法则

第一章&#xff1a;云边 Agent 延迟优化的核心挑战在边缘计算架构中&#xff0c;云边 Agent 作为连接云端控制平面与边缘节点的关键组件&#xff0c;其响应延迟直接影响系统整体性能。随着物联网设备规模扩大和实时性业务需求增长&#xff0c;如何降低 Agent 的通信、计算与调度…

作者头像 李华
网站建设 2026/6/15 2:24:32

收藏!2025程序员转AI指南:从0到1掌握大模型应用开发

&#x1f4a1; 为什么2025年&#xff0c;程序员必须学AI应用开发&#xff1f; 2025年的今天&#xff0c;大模型早已不是实验室里的概念&#xff0c;而是渗透到电商、金融、医疗等全行业的"基础设施"。对于正在打拼的程序员来说&#xff0c;这不是"要不要学&quo…

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

Mikan Project动漫资源管理终极指南:3分钟快速上手5大核心功能

Mikan Project动漫资源管理终极指南&#xff1a;3分钟快速上手5大核心功能 【免费下载链接】mikan_flutter Flutter 驱动的三方 蜜柑计划&#xff08;https://mikanani.me&#xff09; APP&#xff0c;:construction: 开发中... 项目地址: https://gitcode.com/gh_mirrors/mi…

作者头像 李华