news 2026/4/16 13:06:59

处理完ACPI!AcpiBuildRunMethodList链表后返回要检查acpi!AcpiBuildQueueList链表不空运行continue继续循环

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
处理完ACPI!AcpiBuildRunMethodList链表后返回要检查acpi!AcpiBuildQueueList链表不空运行continue继续循环

处理完ACPI!AcpiBuildRunMethodList链表后返回要检查acpi!AcpiBuildQueueList链表不空运行continue继续循环

0: kd> g
Breakpoint 5 hit
eax=00000000 ebx=00000000 ecx=89906e40 edx=00000001 esi=89906e30 edi=80b019f4
eip=f73fb911 esp=f789ef68 ebp=f789ef84 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000246
ACPI!ACPIBuildProcessGenericList+0x4d:
f73fb911 ff55f4 call dword ptr [ebp-0Ch] ss:0010:f789ef78={ACPI!ACPIBuildProcessGenericComplete (f73fb840)}
0: kd> t
Breakpoint 10 hit
eax=00000000 ebx=00000000 ecx=89906e40 edx=00000001 esi=89906e30 edi=80b019f4
eip=f73fb840 esp=f789ef64 ebp=f789ef84 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000246
ACPI!ACPIBuildProcessGenericComplete:
f73fb840 55 push ebp
0: kd> kc
#
00 ACPI!ACPIBuildProcessGenericComplete
01 ACPI!ACPIBuildProcessGenericList
02 ACPI!ACPIBuildDeviceDpc
03 nt!KiRetireDpcList
04 nt!KiDispatchInterrupt
WARNING: Frame IP not in any known module. Following frames may be wrong.
05 0x0
0: kd> dv
BuildRequest = 0x89906e30
deviceExtension = 0x89906e30
0: kd> gu
Breakpoint 6 hit
eax=00000000 ebx=00000000 ecx=00010001 edx=00000000 esi=89906e30 edi=80b019f4
eip=f73fb914 esp=f789ef6c ebp=f789ef84 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000246
ACPI!ACPIBuildProcessGenericList+0x50:
f73fb914 85db test ebx,ebx
0: kd> dv tempEntry
tempEntry = 0xf743b870 [ 0xf743b870 - 0xf743b870 ]
0: kd> dx -r1 ((ACPI!_LIST_ENTRY *)0xf743b870)
((ACPI!_LIST_ENTRY *)0xf743b870) : 0xf743b870 [Type: _LIST_ENTRY *]
[+0x000] Flink : 0xf743b870 [Type: _LIST_ENTRY *]
[+0x004] Blink : 0xf743b870 [Type: _LIST_ENTRY *]
0: kd> u 0xf743b870
ACPI!AcpiBuildRunMethodList:
f743b870 70b8 jo ACPI!BuildRequestLookAsideList+0x4a (f743b82a)
f743b872 43 inc ebx
f743b873 f770b8 div eax,dword ptr [eax-48h]
f743b876 43 inc ebx
f743b877 f778b8 idiv eax,dword ptr [eax-48h]
f743b87a 43 inc ebx
f743b87b f778b8 idiv eax,dword ptr [eax-48h]
f743b87e 43 inc ebx


//
// If we have completed the request, then we should look at the
// at the next request, otherwise, we need to look at the current
// request again
if ( workDone == WORK_DONE_COMPLETE || workDone == WORK_DONE_FAILURE) {

currentEntry = tempEntry; 条件成立。

}


ACPI!AcpiBuildRunMethodList列表里面已经没有可以处理的!!!

while (currentEntry != ListEntry) { 不成立。

退出函数。


VOID
ACPIBuildDeviceDpc(
IN PKDPC Dpc,
IN PVOID DpcContext,
IN PVOID SystemArgument1,
IN PVOID SystemArgument2
)
{
//
// We actually care what this call returns. The reason we do
// is that we want all of the control methods to be run before
// we do any of the following steps
//
status = ACPIBuildProcessGenericList(
&AcpiBuildRunMethodList,
AcpiBuildRunMethodDispatch
);

//
// We must own the spin lock before we do the following...
//
KeAcquireSpinLockAtDpcLevel( &AcpiBuildQueueLock );

//
// If we got back STATUS_PENDING, that means that there's
// a method queued in the interpreter somewhere. This will
// cause the DPC to (eventually) become scheduled again.
// That means that we don't have to do anything special to
// handle it.
//
if (status == STATUS_PENDING) {

continue;

}

//
// The case that is special is where we are do get STATUS_SUCCESS
// back. This indicates that we've drained the list. The little
// fly in the ointment is that we might have scheduled other
// run requests, but those are stuck in the BuildQueue list. So
// what we need to do here is check to see if the BuildQueue list
// is non-empty and if it is, set the AcpiBuildWorkDone to TRUE
// so that we iterage again (and move the elements to the proper
// list).
//
if (!IsListEmpty( &AcpiBuildQueueList) ) {

AcpiBuildWorkDone = TRUE;
continue;

}

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

2026年10个垂直领域专业图片素材网推荐:设计师找图不再愁!

设计师们是不是经常遇到这样的问题?想找一张垂直领域的专业图片,比如建筑行业的高清效果图、美食领域的精致摆盘图,翻遍了通用素材网站却找不到满意的,要么质量不高,要么需要付费。找图就像大海捞针,浪费了…

作者头像 李华
网站建设 2026/4/15 13:47:11

强烈安利9个AI论文平台,专科生毕业论文必备!

强烈安利9个AI论文平台,专科生毕业论文必备! AI 工具如何助力论文写作,专科生也能轻松应对 在当前的学术环境中,AI 工具已经成为许多学生和研究者不可或缺的助手。尤其是在撰写毕业论文时,如何高效地完成初稿、优化语言…

作者头像 李华
网站建设 2026/4/13 12:01:13

Android开发工程师深度解析:从技术体系到面试实战

上海欣影电力科技股份有限公司 Android开发工程师 职位信息 岗位描述: 1、负责独立完成公司Android终端应用的模块设计、开发工作; 2、研究Android相关技术点的解决方案; 3、根据开发过程中的体验对产品提出改进建议。 岗位要求: 1、熟悉Android软件架构、Android Framewo…

作者头像 李华
网站建设 2026/4/1 21:44:40

ssm600网上考试系统

目录SSM600网上考试系统摘要开发技术源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!SSM600网上考试系统摘要 SSM600网上考试系统是一款基于SSM(SpringSpring MVCMyBatis)框架开发的在线考试平台,旨在…

作者头像 李华
网站建设 2026/4/16 12:28:15

交换机专题:什么是交换机堆叠

前言 网络管理从未如此简单高效 在当今企业网络环境中,随着业务不断扩展,我们经常需要增加网络设备来满足更多连接需求。传统管理多台交换机的方式工作量大且复杂度高,而交换机堆叠技术正是解决这一痛点的创新方案。 什么是交换机堆叠? 简单来说,交换机堆叠是将多台支持…

作者头像 李华
网站建设 2026/4/5 22:09:31

计算机等级考试——二叉树考点和坑——东方仙盟

一个高度为 h 的满二叉树的节点总数为 2ʰ−1,从根节点开始,自上而下、同层次节点从左至右,对节点按照顺序依次编号,即根节点编号为 1,其左、右孩子节点编号分别为 2 和 3,再下一层从左到右的编号为 4、5、…

作者头像 李华