1. ACPI驱动设备枚举机制深度解析
在Windows内核中,ACPI驱动负责管理系统硬件的高级配置与电源接口(ACPI)。当系统启动时,ACPI驱动会通过一系列复杂的函数调用完成设备的枚举和初始化。其中,ACPIDispatchAddDevice作为驱动入口点之一,扮演着关键角色。本文将重点剖析该函数中ACPIDetectPdoDevices的工作机制及其与ACPIGet系列函数的协作关系。
1.1 ACPI驱动架构概述
ACPI驱动采用分层设备模型,主要包含以下组件结构:
- FDO (Function Device Object):功能设备对象,代表ACPI驱动自身
- PDO (Physical Device Object):物理设备对象,代表具体的ACPI设备
- 设备扩展(Device Extension):存储设备状态和上下文信息
通过内核调试器可见ACPI驱动的设备树结构:
code复制Driver object (89981f38) is for:
\Driver\ACPI
Device Object list:
899ae8b8 89981b98
1.2 ACPIDispatchAddDevice函数定位
ACPIDispatchAddDevice是ACPI驱动的设备添加分发函数,其调用栈显示它由PnP管理器在启动阶段调用:
code复制00 nt!IoCreateDevice
01 ACPI!ACPIDispatchAddDevice+0xca
02 nt!PpvUtilCallAddDevice+0x17
03 nt!PipCallDriverAddDevice+0x64a
04 nt!PiProcessAddBootDevices+0x98
...
该函数主要职责包括:
- 创建设备对象
- 初始化设备扩展
- 建立设备关系
- 触发下级设备枚举
2. ACPIDetectPdoDevices函数深度解析
2.1 函数原型与核心逻辑
ACPIDetectPdoDevices函数负责检测和创建PDO设备对象,其原型如下:
c复制NTSTATUS ACPIDetectPdoDevices(
IN PDEVICE_
