news 2026/4/18 11:23:42

ACPI!ACPIDetectPdoDevices函数对Device (ACAD)的处理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ACPI!ACPIDetectPdoDevices函数对Device (ACAD)的处理

ACPI!ACPIDetectPdoDevices函数对Device (ACAD)的处理


0: kd> g
Breakpoint 8 hit
eax=00000000 ebx=f743b620 ecx=f789a22c edx=00406000 esi=899aec70 edi=899aed90
eip=f74076b8 esp=f789a1f8 ebp=f789a250 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!ACPIGet:
f74076b8 55 push ebp
0: kd> kc
#
00 ACPI!ACPIGet
01 ACPI!ACPIDetectPdoDevices
02 ACPI!ACPIRootIrpQueryBusRelations
03 ACPI!ACPIRootIrpQueryDeviceRelations
04 ACPI!ACPIDispatchIrp
05 nt!IofCallDriver
06 nt!IopSynchronousCall
07 nt!IopQueryDeviceRelations
08 nt!PipEnumerateDevice
09 nt!PipProcessDevNodeTree
0a nt!PipDeviceActionWorker
0b nt!PipRequestDeviceAction
0c nt!IopInitializeBootDrivers
0d nt!IoInitSystem
0e nt!Phase1Initialization
0f nt!PspSystemThreadStartup
10 nt!KiThreadStartup
0: kd> dv
Target = 0x899aec70
ObjectID = 0x4154535f
Flags = 0x20040802
SimpleArgument = 0x00000000
SimpleArgumentSize = 0
CallBackRoutine = 0x00000000
CallBackContext = 0x00000000
Buffer = 0xf789a22c
BufferSize = 0x00000000


0: kd> gu
Breakpoint 21 hit
eax=00000000 ebx=f743b938 ecx=00000000 edx=00002700 esi=899ae278 edi=899ae280
eip=f7407922 esp=f789a1a8 ebp=f789a1f4 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!ACPIGet+0x26a:
f7407922 83c410 add esp,10h


0: kd> dt ACPI_GET_REQUEST 899ae278
+0x000 Flags : 0x20040802
+0x000 UFlags : __unnamed
+0x004 ObjectID : 0x4154535f
+0x008 ListEntry : _LIST_ENTRY [ 0xf743b940 - 0xf743b940 ]
+0x010 DeviceExtension : 0x899aec70 _DEVICE_EXTENSION
+0x014 AcpiObject : 0x899b4a70 _NSObj
+0x018 CallBackRoutine : (null)
+0x01c CallBackContext : (null)
+0x020 Buffer : 0xf789a22c -> (null)
+0x024 BufferSize : (null)
+0x028 Status : 0n0
+0x02c ResultData : _ObjData
0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_DEVICE_EXTENSION *)0x899aec70)
((ACPI!_DEVICE_EXTENSION *)0x899aec70) : 0x899aec70 [Type: _DEVICE_EXTENSION *]
[+0x000] Flags : 0x40600000000108 [Type: unsigned __int64]
[+0x000] UFlags [Type: __unnamed]
[+0x008] Signature : 0x5f534750 [Type: unsigned long]
[+0x00c] DebugFlags : 0x0 [Type: unsigned long]
[+0x010] DispatchTable : 0x0 [Type: IRP_DISPATCH_TABLE *]
[+0x014] WorkContext [Type: WORK_QUEUE_CONTEXT]
[+0x014] Fdo [Type: _FDO_DEVICE_EXTENSION]
[+0x014] Filter [Type: _FILTER_DEVICE_EXTENSION]
[+0x014] Pdo [Type: _PDO_DEVICE_EXTENSION]
[+0x058] WorkQueue [Type: EXTENSION_WORKER]
[+0x058] Button [Type: BUTTON_EXTENSION]
[+0x058] Thermal [Type: THERMAL_EXTENSION]
[+0x058] LinkNode [Type: LINK_NODE_EXTENSION]
[+0x058] Dock [Type: DOCK_EXTENSION]
[+0x058] Processor [Type: _PROCESSOR_DEVICE_EXTENSION]
[+0x088] DeviceState : Stopped (0) [Type: _ACPI_DEVICE_STATE]
[+0x08c] PreviousState : Stopped (0) [Type: _ACPI_DEVICE_STATE]
[+0x090] PowerInfo [Type: _ACPI_POWER_INFO]
[+0x10c] DeviceID : 0x897a3b50 : 0x41 [Type: unsigned char *]
[+0x10c] Address : 0x897a3b50 [Type: unsigned long]
[+0x110] InstanceID : 0x899c5508 : 0x31 [Type: unsigned char *]
[+0x114] ResourceList : 0x0 [Type: _CM_RESOURCE_LIST *]
[+0x118] PnpResourceList : 0x0 [Type: _ObjData *]
[+0x11c] OutstandingIrpCount : 1 [Type: long]
[+0x120] ReferenceCount : 4 [Type: long]
[+0x124] HibernatePathCount : 0 [Type: long]
[+0x128] RemoveEvent : 0x0 [Type: _KEVENT *]
[+0x12c] AcpiObject : 0x899b4a70 [Type: _NSObj *]
[+0x130] DeviceObject : 0x0 [Type: _DEVICE_OBJECT *]
[+0x134] TargetDeviceObject : 0x0 [Type: _DEVICE_OBJECT *]
[+0x138] PhysicalDeviceObject : 0x0 [Type: _DEVICE_OBJECT *]
[+0x13c] ParentExtension : 0x89981a18 [Type: _DEVICE_EXTENSION *]
[+0x140] ChildDeviceList [Type: _LIST_ENTRY]
[+0x148] SiblingDeviceList [Type: _LIST_ENTRY]
[+0x150] EjectDeviceHead [Type: _LIST_ENTRY]
[+0x158] EjectDeviceList [Type: _LIST_ENTRY]
0: kd> db 0x899b4a70
899b4a70 04 48 9b 89 64 4c 9b 89-f0 f0 9a 89 b4 4a 9b 89 .H..dL.......J..
899b4a80 41 43 41 44 30 f3 9a 89-08 4a 9b 89 00 00 06 00 ACAD0....J......
899b4a90 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
899b4aa0 70 ec 9a 89 00 00 00 00-48 4e 53 4f 44 00 00 00 p.......HNSOD...
899b4ab0 00 f0 9a 89 fc 4b 9b 89-f8 4a 9b 89 70 4a 9b 89 .....K...J..pJ..
899b4ac0 00 00 00 00 5f 48 49 44-30 f3 9a 89 70 4a 9b 89 ...._HID0...pJ..
899b4ad0 00 00 02 00 00 00 00 00-00 00 00 00 09 00 00 00 ................
899b4ae0 f0 3c 9b 89 00 00 00 00-00 00 00 00 48 4e 53 4f .<..........HNSO
0: kd> dx -id 0,0,899a2278 -r1 (*((ACPI!_ObjData *)0x899ae2a4))
(*((ACPI!_ObjData *)0x899ae2a4)) [Type: _ObjData]
[+0x000] dwfData : 0x0 [Type: unsigned short]
[+0x002] dwDataType : 0x1 [Type: unsigned short]
[+0x004] dwRefCount : 0x0 [Type: unsigned long]
[+0x004] pdataBase : 0x0 [Type: _ObjData *]
[+0x008]dwDataValue : 0xf[Type: unsigned long]
[+0x008] uipDataValue : 0xf [Type: unsigned long]
[+0x008] pnsAlias : 0xf [Type: _NSObj *]
[+0x008] pdataAlias : 0xf [Type: _ObjData *]
[+0x008] powner : 0xf [Type: void *]
[+0x00c] dwDataLen : 0x0 [Type: unsigned long]
[+0x010] pbDataBuff : 0x0 [Type: unsigned char *]


Device (ACAD)
{
Name (_HID, "ACPI0003") // _HID: Hardware ID
Name (_UID, 0x01) // _UID: Unique ID
Name (_PCL, Package (0x01) // _PCL: Power Consumer List
{
\_SB
})
Method (_STA, 0, NotSerialized) // _STA: Status
{
Return (0x0F)
}

Method (_PSR, 0, NotSerialized) // _PSR: Power Source
{
Return (VMAP ())
}
}

参考:
DevNode 0x89a76008 for PDO 0x89df9568
InstancePath is "ACPI\ACPI0003\1"
ServiceName is "CmBatt"
State = DeviceNodeStarted (0x308)
Previous State = DeviceNodeEnumerateCompletion (0x30d)
参考:

Windows 电源管理器定期从电池请求状态信息,包括剩余充电容量和当前消耗速率。
此请求源自电源管理器、更高级别的用户界面组件或应用程序。 电源管理器将请求转换为电池设备的 I/O 请求数据包 (IRP)。
当电池通过 ACPI 控制方法接口公开时,控制方法电池驱动程序 (cmbatt.sys) 将执行相应的 ACPI 控制方法。 对于状态信息,将执行 _BST(电池状态)方法。

参考:
Device (BAT2)
{
Name (_HID, EisaId ("PNP0C0A")) // _HID: Hardware ID
Name (_UID, 0x02) // _UID: Unique ID
Name (_PCL, Package (0x01) // _PCL: Power Consumer List
{
\_SB
})
Method (_STA, 0, NotSerialized) // _STA: Status
{
Return (VMPS (0x02))
}

Method (_BIF, 0, NotSerialized) // _BIF: Battery Information
{
Return (VMBB (0x02))
}

Method (_BST, 0, NotSerialized) // _BST: Battery Status
{
Return (VMBS (0x02))
}

}
参考:

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

UniApp 横向可滚动 Tab 组件开发详解

一、组件概述 这是一个高度可定制、支持横向滚动的标签页&#xff08;Tab&#xff09;组件&#xff0c;主要用于在有限宽度的移动端展示多个标签项。组件具有以下核心特性&#xff1a; 横向滚动&#xff1a;当标签数量超出容器宽度时支持横向滚动自动居中&#xff1a;选中标签自…

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

基于单片机酒精浓度测试仪设计

基于单片机的酒精浓度测试仪设计 一、系统设计背景与意义 传统酒精检测设备存在明显局限&#xff1a;警用呼气式酒精检测仪精度高但成本昂贵&#xff08;数千元&#xff09;&#xff0c;难以普及到家庭、企业等场景&#xff1b;普通酒精传感器模块仅能输出模拟信号&#xff0c;…

作者头像 李华
网站建设 2026/4/18 8:48:15

上海AI实验室推出:让AI真正理解“时间流逝“的图像生成基准测试

这项由上海人工智能实验室的田俊曦、李思远、贺聪慧、吴立军、谭诚团队完成的重要研究&#xff0c;发表于2025年12月2日的预印本论文平台arXiv上&#xff0c;论文编号为2512.01816v1。有兴趣深入了解的读者可以通过该编号查询完整的研究资料。当我们观看一部电影时&#xff0c;…

作者头像 李华
网站建设 2026/4/18 8:53:55

Vue3-04 自定义组件Person

文章目录创建目录components写样式注册组件插件: Vue.js devtools调用组件在Vue3中可以使用Vue2语法问题答疑创建目录components 创建Vue文件 写样式 注册组件 components: {Person} # 控制台的Vue插件 来源:极简插件 插件: Vue.js devtools 具体安装步骤 调用组件 在Vue3中…

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

治愈系水流音效合集!从溪流到海浪满足所有场景需求

水流的声音&#xff0c;是自然界最纯净的白噪音&#xff0c;也是最易得的心理疗愈师。一段清澈的溪流声&#xff0c;能冲刷掉大脑中的纷扰&#xff1b;一阵稳定的海浪&#xff0c;能抚平情绪的褶皱。你是否在制作冥想引导音频、治愈系短片、或仅仅是想为自己寻找一段能带来深度…

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

如何将文件一键转二维码?文件生成二维码指南

在数字化办公与信息分享场景中&#xff0c;文件传输的便捷性至关重要。无论是需要分享的会议文档、产品说明书&#xff0c;还是个人作品集、学习资料&#xff0c;将文件生成二维码&#xff0c;只需轻轻一扫就能实现查看与下载&#xff0c;无疑大幅提升了效率。无需复杂的技术操…

作者头像 李华