PoFxIssueComponentPerfStateChange 函数 (wdm.h)

PoFxIssueComponentPerfStateChange 例程提交将设备组件置于特定性能状态的请求。

语法

void PoFxIssueComponentPerfStateChange(
  [in] POHANDLE                 Handle,
  [in] ULONG                    Flags,
  [in] ULONG                    Component,
  [in] PPO_FX_PERF_STATE_CHANGE PerfChange,
  [in] PVOID                    Context
);

参数

[in] Handle

表示向 PoFx 注册设备的句柄。 设备驱动程序以前从 PoFxRegisterDevice 例程收到此句柄。

[in] Flags

修改性能状态更改操作行为的标志。 将此成员设置为零或设置为以下标志之一 PO_FX_FLAG_XXX 位:

这两个标志位互斥。 有关详细信息,请参阅“备注”。

含义
PO_FX_FLAG_BLOCKING
0x1
使条件更改同步。 如果设置了此标志,请求条件更改的例程不会将控制权返回给调用驱动程序,直到组件硬件完成到新条件的转换。 仅当调用方在 IRQL < DISPATCH_LEVEL 运行时,才能使用此标志。
PO_FX_FLAG_ASYNC_ONLY
0x2
使条件更改完全异步。 如果设置了此标志,则调用驱动程序的回调例程将从调用请求条件更改的例程所在的线程以外的线程调用。 因此,请求条件更改的例程始终以异步方式返回,而无需等待回调完成。

[in] Component

标识组件的索引。 此参数是设备驱动程序用于将设备注册到 PoFx 的 PO_FX_DEVICE 结构中的 Components 数组的索引。 如果 Components 数组包含 N 个元素,则组件索引的范围为 0 到 N–1。

[in] PerfChange

指向 PO_FX_PERF_STATE_CHANGE 结构的指针,该结构表示组件的新性能状态。

[in] Context

指向 ComponentPerfStateCallback 回调例程的上下文的指针。 此参数是可选的。 提供它,以便可以将驱动程序或设备上下文传递给回调例程。 如果未使用此参数,则必须将其设置为 NULL。

返回值

备注

当驱动程序调用 PoFxIssueComponentPerfStateChange 时,电源管理框架 (PoFx) 请求平台扩展插件 (PEP) ,以将组件的性能状态集置于指定的性能状态。 此例程可以与离散和基于范围的性能状态集类型一起使用。 有关离散和基于范围的性能状态集的详细信息,请参阅 PO_FX_PERF_STATE_TYPE

如果 Flags = PO_FX_FLAG_BLOCKING,则 PoFxIssueComponentPerfStateChange 调用是同步的。 在这种情况下, PoFxIssueComponentPerfStateChange 将等待返回,直到组件完成性能状态转换。 调用驱动程序的 ComponentPerfStateCallback 例程以通知驱动程序组件的性能状态更改已完成。 此回调发生在调用 PoFxIssueComponentPerfStateChange 的同一线程中, 而 PoFxIssueComponentPerfStateChange 仅在 ComponentPerfStateCallback 回调返回后返回。

如果 Flags = PO_FX_FLAG_ASYNC_ONLY,则 PoFxIssueComponentPerfStateChange 调用是异步的。 在这种情况下, PoFxIssueComponentPerfStateChange 计划 ComponentPerfStateCallback 例程在另一个线程中发生,然后返回 ,而不等待回调发生。 回调可以在 PoFxIssueComponentPerfStateChange 返回之前或之后发生。 驱动程序应依赖于 ComponentPerfStateCallback 例程来确定组件何时完成到新性能状态的转换。

驱动程序可以设置 Flags = 0,以指示它不关心 PoFxIssueComponentPerfStateChange 调用是同步调用还是异步调用。 在这种情况下,PoFx 根据 PEP 是使用同步还是异步请求向组件发出性能状态更改来确定调用的同步性。

如果 标志 = PO_FX_FLAG_ASYNC_ONLY 或未传递任何标志,则此例程需要 IRQL <= DISPATCH_LEVEL。 如果 标志 = PO_FX_FLAG_BLOCKING,则此例程需要 = APC_LEVEL的 <IRQL。

无论调用的同步性如何,此函数始终会导致调用 ComponentPerfStateCallback 例程。 由于 PEP 可能选择拒绝更改性能状态的请求,因此驱动程序必须等到收到回调后再将性能状态提交到硬件。

每个组件一次只允许对 PoFxIssueComponentPerfStateChange 例程进行一次调用,无论该调用是同步调用还是异步调用。 发出性能状态更改请求后,驱动程序必须等待直到收到 ComponentPerfStateCallback ,然后才能再次调用此例程,即使请求涉及不同的性能状态集。 如果在等待 收到 ComponentPerfStateCallback 之前再次调用此例程,将发生 bug 检查。

要求

要求
最低受支持的客户端 从 Windows 10 开始可用。
目标平台 通用
标头 wdm.h
Library Ntoskrnl.lib
DLL Ntoskrnl.exe
IRQL <= APC_LEVEL 或 <= DISPATCH_LEVEL (请参阅备注部分)

另请参阅

ComponentPerfStateCallback

设备性能状态管理

PO_FX_PERF_STATE_TYPE

PoFxIssueComponentPerfStateChangeMultiple

PoFxRegisterComponentPerfStates