PO_FX_COMPONENT_IDLE_STATE_CALLBACK回调函数 (wdm.h)

ComponentIdleStateCallback 回调例程通知驱动程序对指定组件的 Fx 电源状态的挂起更改。

语法

PO_FX_COMPONENT_IDLE_STATE_CALLBACK PoFxComponentIdleStateCallback;

void PoFxComponentIdleStateCallback(
  [in] PVOID Context,
  [in] ULONG Component,
  [in] ULONG State
)
{...}

参数

[in] Context

指向设备上下文的指针。 设备驱动程序使用此上下文来存储有关设备的当前电源状态的信息。 设备驱动程序在 DeviceContext 中指定了此指针, 该指针 PO_FX_DEVICE 结构的成员,驱动程序用于向电源管理框架(PoFx)注册设备。 此上下文对 PoFx 不透明。

[in] Component

指定组件编号。 此参数是设备驱动程序用于向 PoFx 注册设备的 组件 数组 PO_FX_DEVICE 结构中的索引。 如果 组件 数组包含 N 个元素,则组件索引范围为 0 到 N-1。

[in] State

指定组件将更改为的新 Fx 电源状态。 如果此参数为零,则新状态为 F0;如果此参数为 1,则新状态为 F1;等等。

返回值

没有

言论

当 PoFx 调用驱动程序的 ComponentIdleStateCallback 例程时,驱动程序可能需要准备挂起的 Fx 状态更改。 完成任何必要的准备后,驱动程序必须调用 PoFxCompleteIdleState 例程,以通知 PoFx 驱动程序已完成对 ComponentIdleStateCallback 回调的响应。 PoFxCompleteIdleState 调用可以在 ComponentIdleStateCallback 例程返回之前或之后发生。

如果组件要从 F0 切换到低功率 Fx 状态,设备将丢失组件的硬件状态,驱动程序必须在转换到新的 Fx 状态之前保存组件的硬件状态。 如果组件要从低功率 Fx 状态切换到 F0,并且硬件状态以前已保存,则驱动程序应在将电源还原到组件后还原硬件状态。

对于某些设备,组件电源状态可能在设备硬件中受到控制。 对于这些设备,驱动程序通常负责更改组件的电源状态。 对于其他设备,组件电源状态可能由设备外部的硬件控制,驱动程序通常必须依赖 PoFx 来配置组件的电源状态。

如果驱动程序负责配置组件的电源状态,驱动程序应更改电源状态以响应 ComponentIdleStateCallback 回调。 对于从 F0 到低功率 Fx 状态的转换,组件在进入 ComponentIdleStateCallback 例程时处于 F0 中,驱动程序必须在调用 PoFxCompleteIdleState之前将组件切换为新的 Fx 状态。 对于从低功率 Fx 状态到 F0 的转换,组件在进入 ComponentIdleStateCallback 例程时处于低功率 Fx 状态,驱动程序必须在调用 PoFxCompleteIdleState之前将组件切换到 F0。

如果驱动程序不负责配置组件的电源状态,驱动程序应假定组件在进入 ComponentIdleStateCallback 例程时始终处于 F0 状态。 对于从 F0 到低功率 Fx 状态的挂起转换,直到驱动程序调用 PoFxCompleteIdleState之后,才会转换到新的 Fx 状态。 对于从低功率 Fx 状态到 F0 的转换,在调用 ComponentIdleStateCallback 例程之前,将转换到 F0。

PoFx 从不调用 ComponentIdleStateCallback 例程,直接从一个低功率 Fx 状态切换到另一个低功率 Fx 状态。 例如,PoFx 可能需要将组件从一个低功率 Fx 状态切换到另一个组件,以响应对 PoFxSetComponentLatencyPoFxSetComponentResidency,或 PoFxSetComponentWake 例程。 在这种情况下,PoFx 首先调用 ComponentIdleStateCallback 例程从旧 Fx 状态切换到 F0,然后再次调用 ComponentIdleStateCallback 例程,以便从 F0 切换到新的 Fx 状态。

例子

若要定义 ComponentIdleStateCallback 回调例程,必须先提供一个函数声明来标识要定义的回调例程的类型。 Windows 为驱动程序提供一组回调函数类型。 使用回调函数类型声明函数有助于 驱动程序代码分析静态驱动程序验证程序(SDV)和其他验证工具查找错误,这是为 Windows作系统编写驱动程序的要求。

例如,若要定义名为 MyComponentIdleStateCallbackComponentIdleStateCallback 回调例程,请使用PO_FX_COMPONENT_IDLE_STATE_CALLBACK类型,如以下代码示例所示:

PO_FX_COMPONENT_IDLE_STATE_CALLBACK MyComponentIdleStateCallback;

然后,按如下所示实现回调例程:

_Use_decl_annotations_
VOID
  MyComponentIdleStateCallback(
    PVOID Context,
    ULONG Component,
    ULONG State
    )
  {
      // Function body
  }

PO_FX_COMPONENT_IDLE_STATE_CALLBACK函数类型在 Wdm.h 头文件中定义。 若要在运行代码分析工具时更准确地识别错误,请务必将 _Use_decl_annotations_ 注释添加到函数定义。 _Use_decl_annotations_ 批注可确保使用应用于头文件中PO_FX_COMPONENT_IDLE_STATE_CALLBACK函数类型的批注。 有关函数声明要求的详细信息,请参阅 使用 WDM 驱动程序的函数角色类型来声明函数。 有关 _Use_decl_annotations_的信息,请参阅 批注函数行为

要求

要求 价值
最低支持的客户端 在 Windows 8 及更高版本的 Windows 中受支持。
目标平台 桌面
标头 wdm.h (包括 Wudfwdm.h)
IRQL 在 IRQL <调用 = DISPATCH_LEVEL。

另请参阅

PO_FX_DEVICE

PoFxCompleteIdleState

PoFxSetComponentLatency

PoFxSetComponentResidency

PoFxSetComponentWake