是否可以从 C++ 程序中调用 ACPI 方法?

Is it possible to call ACPI methods from C + + programs?

我希望在C#中通过C++库调用ACPI方法,因为我正在为一家OEM公司写一个uwp应用程序,他们提供了一个控制USB设备电源的ACPI方法。但我似乎在这个link中发现C++库中不能调用ACPI方法(纠正它,我现在知道它是完全正确的)。

它说:“ACPI 方法只能从内核驱动程序调用,然后只能从该方法在 DSDT 中声明的设备的驱动程序堆栈中调用。”

另外,我好像找到了一些可以在C#(用户模式)下调用ACPI方法的库,比如AcpiTool and WindowsHwAccess(好像在内核模式下需要运行ning,我'我不确定)。

请问能否通过C#工程中导入的C++库调用C#(用户模式)中的APCI方法?还是应该说C#项目中引入的C++库在内核模式下可以运行?

当然可以从 C++ 调用 ACPI,如果你 运行 在内核上下文或裸机上说 C++(当你的代码 运行 直接在硬件上,没有操作系统作为中介)。您当然可以将 C# 运行time 插入内核上下文,从而从 C# 调用 ACPI。它已经完成:阅读 Midori 项目,其中 Windows 完全在托管代码中重新实现。但是您在询问是否可以从 Windows 上的 C# 用户态代码调用 ACPI。您不能直接执行此操作,但可能有与 Windows 捆绑在一起的驱动程序公开了您所追求的 and/or 功能信息。你有一个典型的 XY 问题:你认为你需要 ACPI 但你没有说为什么。 “为什么”部分很可能有一个答案,不需要编写驱动程序代码或直接调用 ACPI。请更新您的问题,并说明您正在尝试做什么 - 暂时忘记 ACPI。如果事实证明 ACPI 是唯一的方法,那就这样吧,但是让某人在答案中说明这一点,而不是你只是按照那个假设去做。

TL;DR:您可能正在以一种过于复杂的方式进行处理。