news 2026/4/16 13:48:53

ACPI!ACPIRootIrpQueryBusRelations函数分析之ACPI!ACPIDetectPdoDevices后建立了6个设备PDO

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ACPI!ACPIRootIrpQueryBusRelations函数分析之ACPI!ACPIDetectPdoDevices后建立了6个设备PDO

ACPI!ACPIRootIrpQueryBusRelations函数分析之ACPI!ACPIDetectPdoDevices后建立了6个设备PDO


0: kd> g
Breakpoint 47 hit
eax=00000000 ebx=f743b620 ecx=04c30001 edx=04c20000 esi=89906ea0 edi=89906fc0
eip=f7400300 esp=f789a220 ebp=f789a250 iopl=0 nv up ei pl zr na pe cy
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000247
ACPI!ACPIDetectPdoDevices+0x122:
f7400300 85c0 test eax,eax
0: kd> kc
#
00 ACPI!ACPIDetectPdoDevices
01 ACPI!ACPIRootIrpQueryBusRelations
02 ACPI!ACPIRootIrpQueryDeviceRelations
03 ACPI!ACPIDispatchIrp
04 nt!IofCallDriver
05 nt!IopSynchronousCall
06 nt!IopQueryDeviceRelations
07 nt!PipEnumerateDevice
08 nt!PipProcessDevNodeTree
09 nt!PipDeviceActionWorker
0a nt!PipRequestDeviceAction
0b nt!IopInitializeBootDrivers
0c nt!IoInitSystem
0d nt!Phase1Initialization
0e nt!PspSystemThreadStartup
0f nt!KiThreadStartup
0: kd> kv
# ChildEBP RetAddr Args to Child
00 f789a250 f744e9d7 89981b98 f789a2a4 804edc6c ACPI!ACPIDetectPdoDevices+0x122 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\busdrv\acpi\driver\nt\detect.c @ 2006]
01 f789a270 f744ee67 89981b98 899bf5b0 f789a2a4 ACPI!ACPIRootIrpQueryBusRelations+0xa1 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\busdrv\acpi\driver\nt\root.c @ 238]
02 f789a2ac f740410e 89981b98 899bf507 89981b98 ACPI!ACPIRootIrpQueryDeviceRelations+0x9d (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\busdrv\acpi\driver\nt\root.c @ 513]
03 f789a2e0 80a2675c 89981b98 899bf5b0 899bf668 ACPI!ACPIDispatchIrp+0x19e (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\busdrv\acpi\driver\nt\dispatch.c @ 690]
04 f789a2fc 80c95e00 00000000 899c1008 899c1008 nt!IofCallDriver+0x62 (FPO: [Non-Fpo]) (CONV: fastcall) [d:\srv03rtm\base\ntos\io\iomgr\iosubs.c @ 2237]
05 f789a32c 80a2e3f3 00000000 f789a348 899c10e8 nt!IopSynchronousCall+0x1aa (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\ntos\io\pnpmgr\pnpirp.c @ 258]
06 f789a36c 80c8d810 00000000 899c1de0 00000000 nt!IopQueryDeviceRelations+0x39 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\ntos\io\pnpmgr\pnpirp.c @ 1131]
07 f789a388 80c94e01 899c1008 00000000 00000000 nt!PipEnumerateDevice+0x56 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\ntos\io\pnpmgr\pnpenum.c @ 980]
08 f789a5d4 80a2dde9 899c5bc8 00000000 80a2dd00 nt!PipProcessDevNodeTree+0x273 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\ntos\io\pnpmgr\pnpenum.c @ 4699]
09 f789a618 80a2e161 00000000 00000000 800836b0 nt!PipDeviceActionWorker+0xcd (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\ntos\io\pnpmgr\pnpenum.c @ 710]
0a f789a630 80e69358 00000000 00000005 00000000 nt!PipRequestDeviceAction+0x139 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\ntos\io\pnpmgr\pnpenum.c @ 598]
0b f789a694 80e655c7 80077000 f789a7dc 00034000 nt!IopInitializeBootDrivers+0x392 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\ntos\io\pnpmgr\pnpinit.c @ 1440]
0c f789a838 80e632fd 80077000 00000000 899a1020 nt!IoInitSystem+0x70b (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\ntos\io\iomgr\ioinit.c @ 665]
0d f789adac 80d391f0 80077000 00000000 00000000 nt!Phase1Initialization+0x9b3 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\ntos\init\init.c @ 2221]
0e f789addc 80b00d52 80e6294a 80077000 00000000 nt!PspSystemThreadStartup+0x2e (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\ntos\ps\create.c @ 2213]
0f 00000000 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0x16 [d:\srv03rtm\base\ntos\ke\i386\threadbg.asm @ 81]
0: kd> bp f744e9d7

NTSTATUS
ACPIRootIrpQueryBusRelations(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
OUT PDEVICE_RELATIONS *PdeviceRelations
)
{

//
// Detect which PDOs are missing
//
detectStatus = ACPIDetectPdoDevices(
DeviceObject,
PdeviceRelations
);

0: kd> !drvobj 0x89981f38
Driver object (89981f38) is for:
\Driver\ACPI

Driver Extension List: (id , addr)

Device Object list:
89906258 899875e0 899c1cc0 899c5f18
899ae8b8 89981b98

第二部分:最后建立的PDO是ACPI\FixedButton

0: kd> !devobj 89906258
Device object (89906258) is for:
00000034 \Driver\ACPI DriverObject 89981f38
Current Irp 00000000 RefCount 0 Type 00000032 Flags 00000048
SecurityDescriptor e1297680 DevExt 89906ea0 DevObjExt 89906310
ExtensionFlags (0000000000)
Characteristics (0x00000080) FILE_AUTOGENERATED_DEVICE_NAME
Device queue is not busy.
0: kd> dt _device_object 89906258
hal!_DEVICE_OBJECT
+0x000 Type : 0n3
+0x002 Size : 0xb8
+0x004 ReferenceCount : 0n0
+0x008 DriverObject : 0x89981f38 _DRIVER_OBJECT
+0x00c NextDevice : 0x899875e0 _DEVICE_OBJECT
+0x010 AttachedDevice : (null)
+0x014 CurrentIrp : (null)
+0x018 Timer : (null)
+0x01c Flags : 0x48
+0x020 Characteristics : 0x80
+0x024 Vpb : (null)
+0x028 DeviceExtension : 0x89906ea0 Void
+0x02c DeviceType : 0x32
+0x030 StackSize : 1 ''
+0x034 Queue : __unnamed
+0x05c AlignmentRequirement : 0
+0x060 DeviceQueue : _KDEVICE_QUEUE
+0x074 Dpc : _KDPC
+0x094 ActiveThreadCount : 0
+0x098 SecurityDescriptor : 0xe1297680 Void
+0x09c DeviceLock : _KEVENT
+0x0ac SectorSize : 0
+0x0ae Spare1 : 0
+0x0b0 DeviceObjectExtension : 0x89906310 _DEVOBJ_EXTENSION
+0x0b4 Reserved : (null)
0: kd> dt acpi!_Device_Extension 0x89906ea0
+0x000 Flags : 0x0058a000`00360020
+0x000 UFlags : __unnamed
+0x008 Signature : 0x5f534750
+0x00c DebugFlags : 0
+0x010 DispatchTable : 0xf74382ac IRP_DISPATCH_TABLE
+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 : 0x89907188 "ACPI\FixedButton"
+0x10c Address : 0x89907188
+0x110 InstanceID : (null)
+0x114 ResourceList : (null)
+0x118 PnpResourceList : (null)
+0x11c OutstandingIrpCount : 0n1
+0x120 ReferenceCount : 0n3
+0x124 HibernatePathCount : 0n0
+0x128 RemoveEvent : (null)
+0x12c AcpiObject : (null)
+0x130 DeviceObject : 0x89906258 _DEVICE_OBJECT
+0x134 TargetDeviceObject : (null)
+0x138 PhysicalDeviceObject : 0x89906258 _DEVICE_OBJECT
+0x13c ParentExtension : 0x89981a18 _DEVICE_EXTENSION
+0x140 ChildDeviceList : _LIST_ENTRY [ 0x89906fe0 - 0x89906fe0 ]
+0x148 SiblingDeviceList : _LIST_ENTRY [ 0x89981b58 - 0x89906150 ]
+0x150 EjectDeviceHead : _LIST_ENTRY [ 0x89906ff0 - 0x89906ff0 ]
+0x158 EjectDeviceList : _LIST_ENTRY [ 0x89906ff8 - 0x89906ff8 ]

第三部分:序号是0x00000034

0: kd> !drvobj 0x89981f38
Driver object (89981f38) is for:
\Driver\ACPI

Driver Extension List: (id , addr)

Device Object list:
89906258 899875e0 899c1cc0 899c5f18
899ae8b8 89981b98

最后一个设备对象没有在/Device列表中。

0: kd> !object \device
Object: e1003278 Type: (899a2e70) Directory
ObjectHeader: e1003260 (old version)
HandleCount: 0 PointerCount: 58
Directory Object: e10007c0 Name: Device

Hash Address Type Name
---- ------- ---- ----
00 899c1cc0 Device 00000032
899c2948 Device 00000025
899c36f8 Device 00000019
01 899875e0 Device 00000033
899c26f8 Device 00000026
02 89906258 Device 00000034

899c24a8 Device 00000027
03 899c1758 Device WMIAdminDevice
899c2258 Device 00000028
04 89983f10 Device 00000029
05 899c4b98 Device 0000000a
06 899c4948 Device 0000000b
07 899c1270 Device RawTape
899c1878 Device WMIDataDevice
899c46f8 Device 0000000c
08 899c34a8 Device 0000001a
899c44a8 Device 0000000d
09 899c3258 Device 0000001b
899c4258 Device 0000000e
10 89984f10 Device 0000001c
89985f10 Device 0000000f
11 89984cc0 Device 0000001d
12 89983cc0 Device 0000002a
89984a70 Device 0000001e
13 89983a70 Device 0000002b
89984820 Device 0000001f
14 89983820 Device 0000002c
15 899835d0 Device 0000002d
17 899c1de0 Device 0000002f
26 899c59a8 Device 00000001
27 89983288 Device RawDisk
89986e90 Device 00000002
28 89985cc0 Device 00000010
89986c40 Device 00000003
29 89985a70 Device 00000011
899869f0 Device 00000004
30 89985820 Device 00000012
899867a0 Device 00000005
e1001680 Section PhysicalMemory
31 899855d0 Device 00000013
89986510 Device 00000006
32 899845d0 Device 00000020
89985380 Device 00000014
899862c0 Device 00000007
33 89984380 Device 00000021
899c3038 Device 00000015
899c4038 Device 00000008
34 899bff18 Device RawCdRom
899c2038 Device 00000022
899c3de8 Device 00000016
899c4de8 Device 00000009
35 899ae8b8 Device 00000030
899c2de8 Device 00000023
899c3b98 Device 00000017
36 899c5f18 Device 00000031
899c2b98 Device 00000024
899c3948 Device 00000018

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

整流二极管选型深度解析

整流二极管是电力电子与模拟电路中最基础、也是最关键的器件之一,其本质作用是利用 PN 结的单向导电特性,将方向交替变化的交流电转换为单向的脉动直流电。几乎所有电子系统——从线性电源、开关电源,到电机驱动、新能源逆变器——都绕不开整流环节,而整流二极管的选型,直…

作者头像 李华
网站建设 2026/4/16 10:53:57

Sonic数字人支持gRPC协议吗?正在规划中

Sonic数字人支持gRPC协议吗?正在规划中 在AIGC浪潮席卷内容创作领域的当下,一个现实问题摆在许多开发者和内容团队面前:如何以最低的成本、最快的速度生成高质量的数字人视频?尤其是在短视频批量生产、虚拟主播值守、多语言课程自…

作者头像 李华
网站建设 2026/4/14 23:12:55

低代码平台集成Sonic?通过API拖拽式调用

低代码平台集成Sonic?通过API拖拽式调用 在短视频、直播带货和在线教育内容爆炸式增长的今天,企业与创作者对“快速生成专业级数字人视频”的需求前所未有地强烈。传统方式依赖3D建模、动作捕捉和动画师精调,不仅成本高昂,还动辄耗…

作者头像 李华
网站建设 2026/4/16 10:58:16

提升画质细节:Sonic inference_steps参数优化建议

提升画质细节:Sonic inference_steps参数优化建议 在虚拟主播、在线教育和短视频内容爆发的今天,用户对数字人视频的真实感要求越来越高。过去,制作一个唇形自然、表情生动的数字人视频需要复杂的3D建模、骨骼绑定和动画调试,流程…

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

广电五舟服务器适配:Sonic在行业客户的落地案例

广电五舟服务器适配:Sonic在行业客户的落地实践 在政务大厅的智能导览屏上,一位虚拟工作人员正用标准普通话讲解办事流程;电商直播间里,数字主播24小时不间断介绍商品;某省级电视台的早间新闻中,主持人刚播…

作者头像 李华
网站建设 2026/4/16 9:32:08

小米商店审核通过:让更多安卓用户发现Sonic

小米商店审核通过:让更多安卓用户发现Sonic 在短视频日更、直播带货成常态的今天,内容创作者正面临一个尴尬现实:想做出专业级数字人视频,却卡在复杂的3D建模和高昂的时间成本上。一条10秒的口播视频,可能需要数小时手…

作者头像 李华