评估 ACPI 控制方法

高级配置和电源接口 (ACPI) 控制方法是声明和定义用于查询和配置系统硬件的操作的软件。 与 ACPI 兼容的系统至少会提供一组控制方法。 控制方法以 ACPI 源语言 (ASL) 编写,由 ASL 编译器编译为 ACPI 计算机语言 (AML),从系统固件加载到 ACPI 命名空间中,并由 ACPI 驱动程序解释。

若内核模式设备驱动程序符合内核模式驱动程序框架 (KMDF)Windows 驱动程序模型 (WDM) 的要求,则可以使用设备控制请求来评估 ACPI 控制方法。 从 Windows 8 开始,符合用户模式驱动程序框架 (UMDF) 要求的用户模式驱动程序可以使用设备控制请求来评估 ACPI 控制方法。 通常,驱动程序评估 ACPI 控制方法,以启动或配置特定于平台的函数。 驱动程序可以在加载其物理设备对象 (PDO) 的命名空间中评估 ACPI 控制方法。 对于在 ACPI 枚举设备的设备堆栈中加载的驱动程序,ACPI 驱动程序始终是创建并操作设备堆栈中的 PDO 的总线驱动程序。 此功能包括评估作为父设备子代的子对象支持的控制方法。

驱动程序会向设备发送以下 IRP_MJ_DEVICE_CONTROL 请求之一来评估控制方法。

  • IOCTL_ACPI_EVAL_METHOD

    此请求会同步评估将请求发送到的设备支持的控制方法。 若要使用此 IOCTL,设备驱动程序将提供输入和输出方法参数缓冲区、方法的名称以及等待请求完成的事件对象。 该方法必须是向其发送请求的设备 ACPI 命名空间中的直接子对象。

  • IOCTL_ACPI_ASYNC_EVAL_METHOD

    此请求会异步评估将请求发送到的设备支持的控制方法。 若要使用此 IOCTL,设备驱动程序应提供输入和输出方法参数缓冲区、方法的名称,以及 I/O 管理器会在所有较低级别驱动程序完成请求后调用的 IoCompletion 例程。 该方法必须是向其发送请求的设备 ACPI 命名空间中的直接子对象。

  • IOCTL_ACPI_EVAL_METHOD_EX

    此请求会同步评估将请求发送到的设备或设备的后代子对象支持的控制方法。 若要使用此 IOCTL,设备驱动程序应提供输入和输出方法参数缓冲区、设备的 ACPI 命名空间中的控制方法的路径和名称,以及等待请求完成的事件对象。

  • IOCTL_ACPI_ASYNC_EVAL_METHOD_EX

    此请求会异步评估将请求发送到的设备或设备的后代子对象支持的控制方法。 若要使用此 IOCTL,设备驱动程序应提供输入和输出方法参数缓冲区、设备 ACPI 命名空间中控制方法的路径和名称,以及 I/O 管理器在所有较低级别驱动程序完成请求后调用的 IoCompletion 例程。

有关如何同步评估 ACPI 控制方法的详细信息,请参阅同步评估 ACPI 控制方法。 有关如何异步评估 ACPI 控制方法的详细信息,请参阅 IOCTL_ACPI_ASYNC_EVAL_METHODIOCTL_ACPI_ASYNC_EVAL_METHOD_EX

若要让设备的驱动程序评估不是设备的直接子对象的控制方法,驱动程序必须在设备的 ACPI 命名空间中提供方法的路径和名称。 若要帮助获取设备的子对象的路径和名称,Windows 应支持 IOCTL_ACPI_ENUM_CHILDREN 请求,设备驱动程序可以使用此请求枚举以下项:

  • 设备及其直接子设备。

  • 设备及其所有后代子设备。

  • 设备 ACPI 命名空间中所提供名称的后代子对象,特别是包括控制方法。

有关如何枚举设备命名空间中的设备和方法的信息,请参阅枚举子设备和控制方法

有关驱动程序可用于帮助评估控制方法的系统提供的宏的信息,请参阅控制方法宏

有关 ACPI 设备、控制方法和命名空间的详细信息,请参阅高级配置和电源接口规范