news 2026/6/10 13:22:46

ACPIBuildProcessRunMethodPhaseCheckBridge函数根据deviceExtension->Flags设置Device (PE83)下一个状态为WORK_DONE_CO

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ACPIBuildProcessRunMethodPhaseCheckBridge函数根据deviceExtension->Flags设置Device (PE83)下一个状态为WORK_DONE_CO

ACPIBuildProcessRunMethodPhaseCheckBridge函数根据deviceExtension->Flags设置Device (PE83)下一个状态为WORK_DONE_COMPLETE

不会运行ACPI!ACPIBuildProcessRunMethodPhaseRecurse检查子节点了

dsdt.dsl:14398: Device (PE83)
dsdt.dsl:14447: Device (S1F0)

因为Device (PE83)父节点本身就不存在,就不会处理子节点了。


1: kd> g
Breakpoint 5 hit
eax=00000004 ebx=00000004 ecx=899058e8 edx=00000001 esi=899058d8 edi=80b019f4
eip=f73fb911 esp=f78aef68 ebp=f78aef84 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:f78aef78={ACPI!ACPIBuildProcessRunMethodPhaseCheckBridge (f73fbb44)}
1: kd> dt ACPI_BUILD_REQUEST 0x899058d8
+0x000 ListEntry : _LIST_ENTRY [ 0x89905888 - 0xf743b870 ]
+0x008 Signature : 0x5f534750
+0x00c Flags : 0xc
+0x00c UFlags : __unnamed
+0x010 WorkDone : 1
+0x014 CurrentWorkDone : 4
+0x018 NextWorkDone : 2
+0x01c BuildContext : 0x89925840 Void
+0x020 Status : 0n0
+0x024 CurrentObject : (null)
+0x028 CallBack : (null)
+0x02c CallBackContext : (null)
+0x030 DeviceRequest : __unnamed
+0x030 RunRequest : __unnamed
+0x030 SynchronizeRequest : __unnamed
+0x044 Integer : 0
+0x044 String : (null)
+0x044 TargetListEntry : (null)

1: kd> dt acpi!_DEVICE_EXTENSION 0x89925840
+0x000 Flags : 0x00800000`2000000a
+0x000 UFlags : __unnamed
+0x008 Signature : 0x5f534750
+0x00c DebugFlags : 0
+0x010 DispatchTable : (null)
+0x014 WorkContext : WORK_QUEUE_CONTEXT
+0x014 Fdo : _FDO_DEVICE_EXTENSION
+0x014 Filter : _FILTER_DEVICE_EXTENSION
+0x014 Pdo : _PDO_DEVICE_EXTENSION
+0x058 WorkQueue : EXTENSION_WORKER
+0x058 Button : BUTTON_EXTENSION
+0x058 Thermal : THERMAL_EXTENSION
+0x058 LinkNode : LINK_NODE_EXTENSION
+0x058 Dock : DOCK_EXTENSION
+0x058 Processor : _PROCESSOR_DEVICE_EXTENSION
+0x088 DeviceState : 0 ( Stopped )
+0x08c PreviousState : 0 ( Stopped )
+0x090 PowerInfo : _ACPI_POWER_INFO
+0x10c DeviceID : (null)
+0x10c Address : 0
+0x110 InstanceID : (null)
+0x114 ResourceList : (null)
+0x118 PnpResourceList : (null)
+0x11c OutstandingIrpCount : 0n1
+0x120 ReferenceCount : 0n5
+0x124 HibernatePathCount : 0n0
+0x128 RemoveEvent : (null)
+0x12c AcpiObject : 0x89934554 _NSObj
+0x130 DeviceObject : (null)
+0x134 TargetDeviceObject : (null)
+0x138 PhysicalDeviceObject : (null)
+0x13c ParentExtension : 0x899c0d58 _DEVICE_EXTENSION
+0x140 ChildDeviceList : _LIST_ENTRY [ 0x89925758 - 0x89925758 ]
+0x148 SiblingDeviceList : _LIST_ENTRY [ 0x89925558 - 0x89925db8 ]
+0x150 EjectDeviceHead : _LIST_ENTRY [ 0x89925990 - 0x89925990 ]
+0x158 EjectDeviceList : _LIST_ENTRY [ 0x89925998 - 0x89925998 ]
1: kd> db 0x89934554
89934554 8c 3c 93 89 1c 4e 93 89-ac ff 9a 89 98 45 93 89 .<...N.......E..
89934564 50 45 38 33 30 f3 9a 89-10 45 93 89 00 00 06 00 PE830....E......


NTSTATUS
ACPIBuildProcessRunMethodPhaseCheckBridge(
IN PACPI_BUILD_REQUEST BuildRequest
)
/*++

Routine Description:

This routine determines if the current object is present or not

Arguments:

BuildRequest - The request that we are processing

Return Value:

NTSTATUS

--*/
{
NTSTATUS status = STATUS_SUCCESS;
PDEVICE_EXTENSION deviceExtension = (PDEVICE_EXTENSION) BuildRequest->BuildContext;

//
// Check the flags to see if we need to check the result of the device
// presence test
//
if (BuildRequest->RunRequest.Flags & RUN_REQUEST_CHECK_STATUS) {

//
// Is the device present?
//
if ( (deviceExtension->Flags & DEV_TYPE_NOT_PRESENT) ) {

BuildRequest->NextWorkDone = WORK_DONE_COMPLETE;
goto ACPIBuildProcessRunMethodPhaseCheckBridgeExit;

}


ACPIBuildProcessRunMethodPhaseCheckBridgeExit:

//
// Common code to handle the result of the 'Get' routine
//
ACPIBuildCompleteMustSucceed(
NULL,
status,
NULL,
BuildRequest
);


//
// Done
//
return status;
}

typedef enum _WORK_DONE {
WORK_DONE_COMPLETE = 0,
WORK_DONE_PENDING,
WORK_DONE_FAILURE,
WORK_DONE_STEP_0,


1: kd> dt ACPI_BUILD_REQUEST 0x899058d8
+0x000 ListEntry : _LIST_ENTRY [ 0x89905888 - 0xf743b870 ]
+0x008 Signature : 0x5f534750
+0x00c Flags : 0xc
+0x00c UFlags : __unnamed
+0x010 WorkDone : 0
+0x014 CurrentWorkDone : 4
+0x018 NextWorkDone : 2
+0x01c BuildContext : 0x89925840 Void
+0x020 Status : 0n0
+0x024 CurrentObject : (null)
+0x028 CallBack : (null)
+0x02c CallBackContext : (null)
+0x030 DeviceRequest : __unnamed
+0x030 RunRequest : __unnamed
+0x030 SynchronizeRequest : __unnamed
+0x044 Integer : 0
+0x044 String : (null)
+0x044 TargetListEntry : (null)

第二部分:

1: kd> x acpi!ACPIBuild*dispatch
f74380d4 ACPI!AcpiBuildPowerResourceDispatch = <function> *[5]
f7438104 ACPI!AcpiBuildThermalZoneDispatch = <function> *[4]
f74380e8 ACPI!AcpiBuildRunMethodDispatch = <function> *[7]
f7438008 ACPI!AcpiBuildDeviceDispatch = <function> *[23]
f74380c4 ACPI!AcpiBuildOperationRegionDispatch = <function> *[4]
1: kd> dx -r1 (*((ACPI!long (*(*)[7])(_ACPI_BUILD_REQUEST *))0xf74380e8))
(*((ACPI!long (*(*)[7])(_ACPI_BUILD_REQUEST *))0xf74380e8)) [Type: long (* [7])(_ACPI_BUILD_REQUEST *)]
[0] : 0xf73fb840 [Type: long (*)(_ACPI_BUILD_REQUEST *)]
[1] : 0x0 [Type: long (*)(_ACPI_BUILD_REQUEST *)]
[2] : 0x0 [Type: long (*)(_ACPI_BUILD_REQUEST *)]
[3] : 0xf73fbbfa [Type: long (*)(_ACPI_BUILD_REQUEST *)]
[4] : 0xf73fbb44 [Type: long (*)(_ACPI_BUILD_REQUEST *)]
[5] : 0xf73fbcf2 [Type: long (*)(_ACPI_BUILD_REQUEST *)]
[6] : 0xf73fd6b0 [Type: long (*)(_ACPI_BUILD_REQUEST *)]
1: kd> dds 0xf74380e8
f74380e8 f73fb840 ACPI!ACPIBuildProcessGenericComplete [d:\srv03rtm\base\busdrv\acpi\driver\nt\buildsrc.c @ 4654]
f74380ec 00000000
f74380f0 00000000
f74380f4 f73fbbfa ACPI!ACPIBuildProcessRunMethodPhaseCheckSta [d:\srv03rtm\base\busdrv\acpi\driver\nt\buildsrc.c @ 5683]
f74380f8 f73fbb44 ACPI!ACPIBuildProcessRunMethodPhaseCheckBridge [d:\srv03rtm\base\busdrv\acpi\driver\nt\buildsrc.c @ 5585]
f74380fc f73fbcf2 ACPI!ACPIBuildProcessRunMethodPhaseRunMethod [d:\srv03rtm\base\busdrv\acpi\driver\nt\buildsrc.c @ 5864]
f7438100 f73fd6b0 ACPI!ACPIBuildProcessRunMethodPhaseRecurse [d:\srv03rtm\base\busdrv\acpi\driver\nt\buildsrc.c @ 5773]
f7438104 f73fb840 ACPI!ACPIBuildProcessGenericComplete [d:\srv03rtm\base\busdrv\acpi\driver\nt\buildsrc.c @ 4654]


typedef enum _WORK_DONE {
WORK_DONE_COMPLETE = 0,
WORK_DONE_PENDING,
WORK_DONE_FAILURE,
WORK_DONE_STEP_0,
WORK_DONE_STEP_1,
WORK_DONE_STEP_2,
WORK_DONE_STEP_3,
WORK_DONE_STEP_4,
WORK_DONE_STEP_5,

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

高空作业机器人设计

第2章 总体方案确定 2.1 齿轮齿条绕线机构 现有使用较广泛的绕线装置是较大型的绕线机。绕线机&#xff0c;顾名思义是把线状的物体缠绕到特定的工件上的机器。欧美绕线机以其加工精度高、质量稳定而在国际绕线机市场上占有重要地位。 欧美绕线机一般可绕0.01~2mm的线径&#x…

作者头像 李华
网站建设 2026/6/10 12:57:40

从运维转网安!无缝转型指南 + 系统化学习路线

从运维到网安&#xff1a;无缝转型指南系统化学习路线 作为一名有运维经验的从业者&#xff0c;转型网络安全并非从零开始——运维工作中积累的系统架构认知、故障排查能力、服务器与网络运维经验&#xff0c;都是网安领域的核心基础。但网安与运维的核心目标不同&#xff1a;…

作者头像 李华
网站建设 2026/6/10 12:58:57

Window逆向基础之逆向工程介绍

逆向工程 以设计方法学为指导&#xff0c;以现代设计理论、方法、技术为基础&#xff0c;运用各种专业人员的工程设计经验、知识和创新思维&#xff0c;对已有产品进行解剖、深化和再创造。 逆向工程不仅仅在计算机行业、各行各业都存在逆向工程。 计算机行业逆向工程 计算…

作者头像 李华
网站建设 2026/6/10 1:49:07

一文搞懂C++容器篇

一文搞懂C之容器篇 C STL&#xff08;标准模板库&#xff09;的核心价值之一就是提供了丰富的容器——即“存储数据的通用结构”&#xff0c;能帮我们快速实现数据的存储、访问、插入、删除等操作&#xff0c;无需重复造轮子。本文将C常用容器按“功能分类”梳理&#xff0c;从…

作者头像 李华
网站建设 2026/6/5 13:33:27

【网络安全入门基础教程】网络安全入门终极指南(非常详细)

前言 “1. 结构问题 建议将原文分为三个明确的小标题段落&#xff1a; 破除误解&#xff08;针对黑客形象等问题&#xff09;日常关联性&#xff08;补充更具体的场景&#xff0c;如智能家居漏洞、钓鱼邮件案例&#xff09;学习可行性&#xff08;增加零基础成功案例&#xf…

作者头像 李华
网站建设 2026/6/9 22:19:25

CSDN热榜:大模型开发“超级实习生“入职指南,Prompt到RAG一篇文章全拿下!小白也能秒懂的AI架构图解

AI概念层出不穷 最让人头疼的是这些概念看起来好像都差不多&#xff0c;完全分不清有什么区别&#xff0c;使用的时候应该如何根据具体情况有侧重地优化具体部分&#xff0c;今天一篇文章带你吃透&#xff01; 在进入技术细节前&#xff0c;最有效的理解方式是把大语言模型&a…

作者头像 李华