AcpiMethod 是一个 Windows 平台下的 ACPI 调试与调用工程,包含:
- 一个内核驱动
AcpiMethod - 一个命令行测试工具
AcpiTool - 一个图形界面工具
AcpiMethodEx
这个项目的核心目标,是把用户态输入的 ACPI 方法名和参数,转换成 acpi.sys 可以处理的原生 ACPI IOCTL 请求,方便调试 ACPI namespace、执行 _ADR、_DSM、HQEX 一类方法,以及枚举 ACPI 子节点。
| 路径 | 说明 |
|---|---|
AcpiMethod/ |
内核驱动,导出 \\.\ACPIMethod 控制设备并转发 ACPI IOCTL |
AcpiTool/ |
命令行工具,用于加载驱动、初始化目标 ACPI 设备、调用 ACPI 方法 |
AcpiMethodEx/ |
基于 duilib 的图形界面工具,用于浏览 ACPI 节点并执行方法 |
duilib/ |
GUI 依赖库源码 |
lib/ |
本地依赖库 |
x64/ |
本地构建输出 |
AcpiMethod.sln |
Visual Studio 解决方案 |
关键文件:
主要职责:
- 创建设备对象
\Device\ACPIMethod - 创建符号链接
\DosDevices\ACPIMethod - 接收用户态
DeviceIoControl - 保存当前目标 ACPI PDO
- 转发 ACPI 方法调用与枚举请求
当前支持的主要 IOCTL:
IOCTL_ACPIMTD_INITIOCTL_ENUM_ACPI_CHILDIOCTL_CALL_ACPI_METHODIOCTL_CALL_ACPI_METHOD_INTEGERIOCTL_CALL_ACPI_METHOD_STRINGIOCTL_CALL_ACPI_METHOD_COMPLEX
关键文件:
主要职责:
- 动态创建设备驱动服务
- 枚举
ACPI_HAL下的 ACPI 设备 - 选择目标 ACPI 设备并初始化驱动
- 发送 ACPI 方法调用请求
- 解析并打印返回的
ACPI_EVAL_OUTPUT_BUFFER
关键文件:
主要职责:
- 初始化驱动和目标 ACPI 设备
- 枚举 ACPI namespace 子节点
- 在界面里搜索并选择方法路径
- 输入最多 7 个参数
- 执行方法并显示结果
项目当前已经支持“显式指定目标 ACPI 设备”,避免默认取枚举结果中的第一个设备。
优先级如下:
- 环境变量
ACPIMETHOD_ACPI_PDO - 环境变量
ACPIMETHOD_ACPI_INSTANCE_ID - 自动选择逻辑
示例:
$env:ACPIMETHOD_ACPI_PDO = "\Device\00000018"或:
$env:ACPIMETHOD_ACPI_INSTANCE_ID = "ACPI\PNP0C08\0"说明:
PDO是内核里的设备对象名Instance ID是 PnP 层面的设备实例 ID- 如果显式指定但未匹配到,程序会打印提示并继续后续选择逻辑
推荐环境:
- Windows 10 / Windows 11
- Visual Studio 2022
- Windows SDK
- WDK
本工程包含驱动项目,因此仅安装普通 C++ 桌面开发组件通常不够,还需要可用的 WDK 驱动构建环境。
直接打开:
AcpiMethod.sln
推荐配置:
Debug | x64
解决方案包含:
AcpiToolAcpiMethodAcpiMethodEx
示例:
& "C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe" AcpiMethod.sln /p:Configuration=Debug /p:Platform=x64 /m编译后可执行:
x64\Debug\AcpiTool.exe
典型流程:
- 启动驱动服务
- 枚举 ACPI 设备
- 绑定目标 ACPI 设备
- 调用测试方法
- 输出返回结果
编译后可执行:
x64\Debug\AcpiMethodEx.exe
典型流程:
- 启动驱动服务
- 初始化目标 ACPI 设备
- 枚举子节点
- 在界面中搜索 ACPI 路径
- 输入参数并执行
- 更偏向 ACPI 调试工具,而不是面向最终用户的产品驱动
- 驱动通过控制设备桥接到
acpi.sys - 适合验证 ACPI 方法调用、参数打包和返回值解析
- 同时支持命令行和 GUI 两种操作方式
- 调试 BIOS/UEFI 暴露的 ACPI 方法
- 验证
_HID/_CID/_STA/_CRS对枚举行为的影响 - 研究 Windows 下
acpi.sys的方法调用路径 - 对接 EC、平台设备、GPIO/I2C/SPI 相关 ACPI 节点
- 快速验证某个 ACPI method 的入参与返回值格式
仓库根目录当前存在 LICENSE 文件时,请以该文件为准。