poFxIdleComponent 函数 (wdm.h)

PoFxIdleComponent 例程递减指定组件上的激活引用计数。

语法

void PoFxIdleComponent(
  [in] POHANDLE Handle,
  [in] ULONG    Component,
  [in] ULONG    Flags
);

参数

[in] Handle

表示设备注册到电源管理框架 (PoFx) 的句柄。 设备驱动程序以前从 PoFxRegisterDevice 例程收到此句柄。

[in] Component

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

[in] Flags

空闲操作的标志。 将此成员设置为零或设置为以下标志之一 PO_FX_FLAG_XXX 位:

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

返回值

备注

设备驱动程序调用 PoFxIdleComponent 来释放对设备中组件的激活引用。 驱动程序在对 PoFxActivateComponent 例程的先前调用中获取了激活引用。 仅当驱动程序需要访问组件时,驱动程序才应保留组件上的激活引用。 若要对未使用的组件保留激活引用,将阻止该组件进入低功率 Fx 状态。

如果驱动程序没有对组件的其他激活引用, 则 PoFxIdleComponent 启动从活动条件到空闲条件的转换。 完成此转换后,PoFx 会调用驱动程序的 ComponentIdleConditionCallback 例程来通知驱动程序。 如果驱动程序在组件上保留一个或多个其他激活引用,则组件将保持活动状态,并且不会调用 ComponentIdleConditionCallback 例程。

PoFx 维护设备中每个组件的激活引用计数。 PoFxActivateComponent 例程递增此计数,PoFxIdleComponent 递减此计数。 当此计数为非零时,组件仍处于活动状态。 当驱动程序释放对组件的最后一个激活引用时,计数将减少到零,并且组件进入空闲条件。 组件进入空闲条件后,PoFx 可能会将组件切换到低功率 Fx 状态。 有关详细信息,请参阅 PoFxActivateComponent

如果 Flags = PO_FX_FLAG_BLOCKING,则 PoFxIdleComponent 调用是同步的。 在这种情况下, PoFxIdleComponent 将等待返回,直到组件完成到空闲条件的转换。 PoFxIdleComponent 调用驱动程序的 ComponentIdleConditionCallback 回调例程,以通知驱动程序组件处于空闲状态。 此回调发生在调用 PoFxIdleComponent 的同一线程中, 并且 PoFxIdleComponent 仅在 ComponentIdleConditionCallback 回调返回后返回。

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

驱动程序可以设置 Flags = 0 以指示它不关心 PoFxIdleComponent 调用是同步调用还是异步调用。 在这种情况下,PoFx 决定是同步调用还是异步调用。

要求

要求
最低受支持的客户端 从Windows 8开始可用。
目标平台 通用
标头 wdm.h
Library Ntoskrnl.lib
DLL Ntoskrnl.exe
IRQL <= DISPATCH_LEVEL

另请参阅

ComponentIdleConditionCallback

PO_FX_DEVICE

PO_FX_FLAG_XXX

PoFxActivateComponent

PoFxRegisterDevice