1. ACPI设备检测机制概述
在Windows操作系统中,ACPI(高级配置与电源接口)子系统负责管理硬件设备的电源状态和系统配置。其中,ACPIDetectPdoDevices函数扮演着关键角色,它通过物理设备对象(PDO)来检测和管理ACPI设备。当系统启动或设备热插拔时,这个函数会被调用,执行设备枚举和初始化流程。
从调试信息中可以看到调用栈:
code复制00 ACPI!ACPIGet
01 ACPI!ACPIDetectPdoDevices
02 ACPI!ACPIRootIrpQueryBusRelations
03 ACPI!ACPIRootIrpQueryDeviceRelations
04 ACPI!ACPIDispatchIrp
...
这个调用栈清晰地展示了从IRP(I/O请求包)分发到实际设备检测的完整路径。ACPIRootIrpQueryDeviceRelations接收到查询设备关系的请求后,会调用ACPIDetectPdoDevices进行实际设备检测。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. ACAD设备解析
2.1 设备标识与属性
调试信息中显示的ACAD设备定义如下:
asl复制Device (ACAD) {
Name (_HID, "ACPI0003") // 硬件ID
Name (_UID, 0x01) // 唯一ID
Name (_PCL, Package (0x01) { // 电源消费者列表
\\_SB
})
...
}
关键点解析:
_HID(Hardware ID)值为"ACPI0003",这是ACPI规范定义的虚拟电池设备标识符_UID(Unique ID)为1,用于区分同类型设备的多个实例_PCL指定了设备的电源依赖关系,这里指向系统总线(\_SB)
内存dump显示设备对象位于地址0x899b4a70,其中包含关键标识字符串"ACAD"和"_HID":
code复制899b4a80 41 43 41 44 30 f3 9a 89-08 4a 9b 89 00 00 06 00 ACAD0....J......
899b4ac0 00 00 00 00 5f 48 49 44-
