Skip to content

Repository files navigation

AcpiMethod

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 解决方案

主要模块

1. AcpiMethod 驱动

关键文件:

主要职责:

  • 创建设备对象 \Device\ACPIMethod
  • 创建符号链接 \DosDevices\ACPIMethod
  • 接收用户态 DeviceIoControl
  • 保存当前目标 ACPI PDO
  • 转发 ACPI 方法调用与枚举请求

当前支持的主要 IOCTL:

  • IOCTL_ACPIMTD_INIT
  • IOCTL_ENUM_ACPI_CHILD
  • IOCTL_CALL_ACPI_METHOD
  • IOCTL_CALL_ACPI_METHOD_INTEGER
  • IOCTL_CALL_ACPI_METHOD_STRING
  • IOCTL_CALL_ACPI_METHOD_COMPLEX

2. AcpiTool 命令行工具

关键文件:

主要职责:

  • 动态创建设备驱动服务
  • 枚举 ACPI_HAL 下的 ACPI 设备
  • 选择目标 ACPI 设备并初始化驱动
  • 发送 ACPI 方法调用请求
  • 解析并打印返回的 ACPI_EVAL_OUTPUT_BUFFER

3. AcpiMethodEx 图形界面工具

关键文件:

主要职责:

  • 初始化驱动和目标 ACPI 设备
  • 枚举 ACPI namespace 子节点
  • 在界面里搜索并选择方法路径
  • 输入最多 7 个参数
  • 执行方法并显示结果

目标 ACPI 设备选择

项目当前已经支持“显式指定目标 ACPI 设备”,避免默认取枚举结果中的第一个设备。

优先级如下:

  1. 环境变量 ACPIMETHOD_ACPI_PDO
  2. 环境变量 ACPIMETHOD_ACPI_INSTANCE_ID
  3. 自动选择逻辑

示例:

$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 驱动构建环境。

构建方法

Visual Studio

直接打开:

AcpiMethod.sln

推荐配置:

  • Debug | x64

解决方案包含:

  • AcpiTool
  • AcpiMethod
  • AcpiMethodEx

MSBuild

示例:

& "C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe" AcpiMethod.sln /p:Configuration=Debug /p:Platform=x64 /m

运行方式

1. 命令行工具

编译后可执行:

x64\Debug\AcpiTool.exe

典型流程:

  1. 启动驱动服务
  2. 枚举 ACPI 设备
  3. 绑定目标 ACPI 设备
  4. 调用测试方法
  5. 输出返回结果

2. 图形界面工具

编译后可执行:

x64\Debug\AcpiMethodEx.exe

典型流程:

  1. 启动驱动服务
  2. 初始化目标 ACPI 设备
  3. 枚举子节点
  4. 在界面中搜索 ACPI 路径
  5. 输入参数并执行

当前工程特点

  • 更偏向 ACPI 调试工具,而不是面向最终用户的产品驱动
  • 驱动通过控制设备桥接到 acpi.sys
  • 适合验证 ACPI 方法调用、参数打包和返回值解析
  • 同时支持命令行和 GUI 两种操作方式

适合的使用场景

  • 调试 BIOS/UEFI 暴露的 ACPI 方法
  • 验证 _HID / _CID / _STA / _CRS 对枚举行为的影响
  • 研究 Windows 下 acpi.sys 的方法调用路径
  • 对接 EC、平台设备、GPIO/I2C/SPI 相关 ACPI 节点
  • 快速验证某个 ACPI method 的入参与返回值格式

许可证

仓库根目录当前存在 LICENSE 文件时,请以该文件为准。

About

一个 Windows 平台下的 ACPI 调试工具

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages