news 2026/1/15 4:58:51

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/1/14 13:26:37

Sonic数字人能否替代真人出镜?这几点你必须知道

Sonic数字人能否替代真人出镜?这几点你必须知道 在短视频日更、直播24小时不停歇的今天,内容生产早已从“有没有”进入“快不快、稳不稳”的军备竞赛。人力成本高、拍摄周期长、主播状态波动——这些传统真人出镜模式的痛点,正被一种新型技术…

作者头像 李华
网站建设 2026/1/2 17:39:34

Sonic数字人部署在Linux还是Windows更好?推荐Ubuntu

Sonic数字人部署在Linux还是Windows更好?推荐Ubuntu 在虚拟主播、在线教育和短视频创作日益普及的今天,如何用最低的成本生成高质量的“会说话”的数字人视频,已经成为个人创作者与中小企业的核心关切。Sonic——这款由腾讯联合浙江大学推出的…

作者头像 李华
网站建设 2026/1/9 23:16:57

Three.js能否可视化Sonic生成过程?扩展方向之一

Three.js能否可视化Sonic生成过程?扩展方向之一 在数字人内容创作日益普及的今天,用户不再满足于“上传音频、等待输出”的黑箱式体验。越来越多创作者希望看到生成过程中的状态反馈——比如当前进度、中间帧效果、参数调整带来的变化等。这种对透明化与…

作者头像 李华
网站建设 2026/1/12 13:44:05

超聚变渠道合作:通过运营商集采推广Sonic应用

超聚变渠道合作:通过运营商集采推广Sonic应用 在政务大厅的LED屏上,一位“局长”正神情庄重地解读最新惠民政策;电商平台的直播间里,一个数字主播24小时不间断介绍商品;偏远山区的教室中,学生们正专注地看…

作者头像 李华
网站建设 2026/1/12 16:11:26

同方计算机支持:国产化替代背景下Sonic的机遇

Sonic与同方计算机的融合:国产化替代浪潮下的数字人新范式 在政务大厅的智能终端上,一位虚拟播报员正用标准普通话宣读最新政策;教育机构的在线课堂里,数字教师根据预设脚本实时生成讲解视频;应急指挥中心的大屏前&…

作者头像 李华
网站建设 2026/1/12 21:27:42

深度测评10个AI论文工具,本科生轻松搞定毕业论文!

深度测评10个AI论文工具,本科生轻松搞定毕业论文! AI 工具如何让论文写作变得轻松高效 随着人工智能技术的不断进步,AI 工具在学术领域的应用越来越广泛。对于本科生来说,撰写毕业论文往往是一项既耗时又复杂的任务,而…

作者头像 李华