wdm.h) (PO_FX_COMPONENT_V2 结构
PO_FX_COMPONENT 结构描述设备中组件的电源状态属性。
语法
typedef struct _PO_FX_COMPONENT_V2 {
GUID Id;
ULONGLONG Flags;
ULONG DeepestWakeableIdleState;
ULONG IdleStateCount;
PPO_FX_COMPONENT_IDLE_STATE IdleStates;
ULONG ProviderCount;
PULONG Providers;
} PO_FX_COMPONENT_V2, *PPO_FX_COMPONENT_V2;
成员
Id
一个组件 ID,它相对于设备中的其他组件唯一标识此组件。 如果电源管理框架 (PoFx) 要求组件 ID 将此组件与同一设备中的其他类似组件区分开来,驱动程序应为此成员指定非零值。 此成员是可选的。 如果未使用此成员,则必须将其设置为所有零。
Flags
此成员可以设置为以下标志位: PO_FX_COMPONENT_FLAG_F0_ON_DX。 有关详细信息,请参阅“备注”。
DeepestWakeableIdleState
组件可从中唤醒的最深 Fx 状态的索引。 为 F0 指定 0,为 F1 指定 1,依。 此索引必须小于 IdleStateCount。
IdleStateCount
IdleStates 成员指向的数组中的元素数。 此外,此成员指定组件支持的 Fx 电源状态数。 一个组件必须支持至少一个 fx 状态 (F0) 。
IdleStates
指向 PO_FX_COMPONENT_IDLE_STATE数组的 指针。 此数组的长度由 IdleStateCount 成员指定。 每个数组元素指定组件支持的 Fx 电源状态的属性。 元素 0 描述 F0,元素 1 描述 F1 等。
ProviderCount
一个 值,该值指定此组件所依赖的组件数。 有关详细信息,请参阅“备注”下的 “组件依赖项 ”。
Providers
指向此组件所依赖的组件索引数组的指针。 有关详细信息,请参阅“备注”下的 “组件依赖项 ”。
注解
当设备驱动程序向 PoFx 注册设备时,驱动程序将提供保存注册信息的 PO_FX_DEVICE 结构。 此结构包含 PO_FX_COMPONENT 结构的数组。 此数组中的元素描述设备中各个组件的电源属性。 PoFx 使用此数组中的信息来管理这些组件的电源设置。
Id 成员包含 PoFx 可用于唯一标识组件的组件 ID。 不要将组件 ID 与组件索引混淆, PoFxActivateComponent 等例程使用该索引来标识已注册设备中的组件。 组件索引是设备驱动程序用于将设备注册到 PoFx 的PO_FX_DEVICE结构中 Components 数组的索引。 如果 Components 数组包含 N 个元素,则组件索引是 0 到 N–1 范围内的整数值。 相比之下,组件 ID 是 GUID 值。
如果驱动程序 PO_FX_VERSION_V2在注册 PoFx ((即在调用 PoFxRegisterDevice 例程期间,驱动程序为传递给 Device 参数 ) 的 PO_FX_DEVICE 结构的 Version 成员指定值PO_FX_VERSION_V2,则 Flags 成员可以设置为PO_FX_COMPONENT_FLAG_F0_ON_DX值。 如果指定 了PO_FX_COMPONENT_FLAG_F0_ON_DX 标志,则 PoFx 将在 Dx 转换期间将组件置于 F0 电源状态,并用于等待/唤醒 IRP。 在将 Dx IRP 或等待/唤醒 IRP 调度到设备堆栈 () 发生的事件之前,电源管理器会将组件转换为 F0 状态。 组件将保留在 F0 中,直到取消或完成唤醒/等待 IRP,或者 Dx IRP 完成并且驱动程序调用 了 PoFxReportDevicePoweredOn 例程 (上) 发生的事件。
组件依赖项
PoFx 支持设备 (中的逻辑组件依赖项,但不支持跨不同设备) 。 在每个组件的设备注册过程中,驱动程序可以提供一个数字 (ProviderCount 成员) 和组件索引数组 (提供程序 成员) 此组件所依赖;这些称为 提供程序。 PoFx 保证组件在其所有提供程序都处于活动状态之前不会变为活动状态。组件依赖关系形成一个有向图,其中边缘从依赖组件指向提供程序,并表示依赖项。 在设备注册期间,PoFx 会验证依赖项关系图:不允许循环和重复边缘,深度优先搜索遍历的图形深度不能超过 4。 PoFx 还根据依赖项关系图设置组件的活动引用计数;也就是说,每个提供程序的活动引用计数对于依赖它的每个组件递增一次。
在组件激活期间,PoFx 首先异步激活所有提供程序。 组件处于活动状态后,PoFx 会检查每个依赖组件,并在必要时继续激活它们。
当组件转换为空闲状态时,PoFx 首先使依赖组件处于空闲状态。 驱动程序完成 ComponentIdleConditionCallback 并且平台扩展插件 (PEP) 收到组件空闲通知后,PoFx 以递归方式遍历广度优先遍历依赖项关系图,并异步空闲每个提供程序。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 从 Windows 8 开始支持。 |
标头 | wdm.h (包括 Wudfwdm.h) |