news 2026/4/18 5:28:30

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/18 3:29:20

Sonic数字人应用场景全覆盖:政务、教育、电商都在用

Sonic数字人应用场景全覆盖:政务、教育、电商都在用 在政务服务大厅里,一位“工作人员”正通过屏幕播报最新的医保政策;线上课堂中,虚拟教师用标准发音讲解英语语法;直播间内,一个面带微笑的AI主播正在介绍…

作者头像 李华
网站建设 2026/4/18 3:26:37

宁畅整机交付:预装Sonic系统的AI服务器产品

宁畅整机交付:预装Sonic系统的AI服务器产品 在虚拟主播24小时不间断带货、政务数字人“上岗”解答市民咨询的今天,一个现实问题摆在企业面前:如何以低成本、高效率的方式批量生成自然逼真的数字人视频?传统依赖3D建模和动捕设备的…

作者头像 李华
网站建设 2026/4/18 3:38:28

Sonic数字人生成后处理:嘴形对齐校准与动作平滑功能详解

Sonic数字人生成后处理:嘴形对齐校准与动作平滑功能详解 在虚拟主播24小时不间断带货、AI教师批量录制网课、政务播报自动更新政策解读的今天,我们早已不再满足于“能说话”的数字人——用户要的是真实感,是音画之间毫秒不差的同步&#xff0…

作者头像 李华
网站建设 2026/4/18 3:35:37

PyCharm激活码永久免费?别信!但Sonic是真的开源

PyCharm激活码永久免费?别信!但Sonic是真的开源 在短视频和虚拟内容爆炸式增长的今天,你有没有想过:一个没有团队、没有摄影棚、甚至不会动画制作的人,也能做出“自己”在讲课、带货、直播的视频?这不再是幻…

作者头像 李华
网站建设 2026/4/18 3:32:37

创业团队用 XinServer 构建敏捷迭代后台系统

创业团队用 XinServer 构建敏捷迭代后台系统 最近跟几个创业的朋友聊天,发现大家普遍有个痛点:产品想法贼快,但一到落地开发,尤其是后台系统这块,进度就卡住了。要么是后端兄弟忙不过来,要么是前端同学对着…

作者头像 李华
网站建设 2026/4/17 7:42:23

如何用Sonic在ComfyUI中实现音频+图片生成说话数字人

如何用Sonic在ComfyUI中实现音频图片生成说话数字人 你有没有试过,只靠一张照片和一段录音,就能让一个“人”活过来,开口讲话?这不再是科幻电影的桥段——如今,借助Sonic模型与ComfyUI的组合,普通用户也能在…

作者头像 李华