在 Windows 上,我该如何调用任意 ACPI 方法?

在 Windows 上,我该如何调用任意 ACPI 方法?

在 Linux 上,该模块acpi_call可以实现此功能,但在 Windows 上我没有看到此功能。可以通过 WMI 实现吗?或者我真的需要编写一些内核模式代码吗?

请注意,我说的是已经存在,这并不是要定义新的方法。

举个例子,假设我想调用\_SB.PCI0.PEG0.PEGP._OFF,我该怎么做?

编辑 :由于没有 Windows 中类似的方法acpi_call,似乎唯一剩下的方法就是启用内核调试并启动调试会话,就像在MS 文档

但是,这需要禁用安全启动,这是正常的,但当需要定期执行时,这不是一个可行的选择。

实际上,我甚至不确定 Windows 框架是否能轻易允许编写一个acpi_call等效的程序,因为它似乎驱动程序只能评估 ACPI 设备树中设备子对象的控制方法,因此必须将等效项附加到设备树的根。Acpi.sys驱动程序已经存在,我怀疑会发生冲突。

将范围限制在一个设备

评估\_SB_.PCI0.PEG0.PEGP._OFF实际上相当于关闭笔记本电脑的 Nvidia dGPU。同样的问题也存在,因为 Nvidia 驱动程序已经附加\_SB_.PCI0.PEG0.PEGP在 ACPI 设备树中。因此在同一位置编写设备驱动程序可能会发生冲突。

值得庆幸的是(如果我可以这么说的话),我想这样做是有原因的,因为我的 dGPU 坏了。坏了之后,驱动程序就无法再加载,也无法管理设备的电源状态。所以我可以删除或禁用 Nvidia 驱动程序,并将其替换为仅在系统启动期间关闭设备的驱动程序。

话虽如此,我不知道如何编写这么简单的驱动程序。

因此,只要我是正确的,我就有两个选择:

  1. 配置 Nvidia 驱动程序,使其自动关闭设备。
  2. 编写一个可以完成该任务的设备驱动程序,替换 Nvidia 驱动程序。

欢迎提出建议!

答案1

一些 ACPI 方法可以通过电源配置。例如,要生成有关电池状态的报告并使用并将其发送到 c:\Windows\System32,请以管理员身份在 CMD 提示符中输入以下内容:

powercfg /BATTERYREPORT

微软记录了电源配置命令集但我没有看到禁用 GPU 的选项。要禁用 GPU,你可能需要安装 Microsoft 的Windows 设备控制台执行程序或免费的第三方工具,Nirsoft 的开发者视图

使用开发者大会要禁用 GPU,请在 CMD 中输入以下内容,

devcon.exe disable "Name of GPU as Shown in Device Manager"

当然,使用使能够再次使用 GPU。

答案2

您可以这样做,但只能从内核驱动程序执行 - 然后从用户模式应用程序访问驱动程序。您可以阅读有关它的内容MSDN 文章

GitHub 上有一些此类驱动程序的示例,请查看例如。

另一个问题 - 内核驱动程序应该用 EV 标志进行签名(每年都很昂贵)。

相关内容