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 |