структура PO_FX_COMPONENT_V2 (wdm.h)
Структура 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
Идентификатор компонента, который однозначно идентифицирует этот компонент относительно других компонентов на устройстве. Драйвер должен указать ненулевое значение для этого элемента, если платформа управления питанием (PoFx) требует идентификатор компонента, чтобы отличать этот компонент от других аналогичных компонентов на том же устройстве. Этот член является необязательным. Если этот элемент не используется, ему необходимо задать все нули.
Flags
Для этого элемента можно задать следующий бит флага: PO_FX_COMPONENT_FLAG_F0_ON_DX. Дополнительные сведения см. в подразделе "Примечания".
DeepestWakeableIdleState
Индекс самого глубокого состояния Fx, из которого может выйти компонент. Укажите 0 для F0, 1 для F1 и т. д. Этот индекс должен быть меньше 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 может использовать для уникальной идентификации компонента. Не путайте идентификатор компонента с индексом компонента, который подпрограмма, например PoFxActivateComponent , использует для идентификации компонента на зарегистрированном устройстве. Индекс компонента — это индекс массива Components в структуре PO_FX_DEVICE , которую драйвер устройства использовал для регистрации устройства с помощью PoFx. Если массив Components содержит N элементов, индексы компонентов представляют собой целочисленные значения в диапазоне от 0 до N–1. В отличие от этого, идентификатор компонента является значением GUID.
Элементу Flags может быть присвоено значение PO_FX_COMPONENT_FLAG_F0_ON_DX, если драйвер указал поддержку PO_FX_VERSION_V2 во время регистрации с помощью PoFx (то есть во время вызова подпрограммы PoFxRegisterDevice драйвер указал значение PO_FX_VERSION_V2 для элемента Versionструктуры PO_FX_DEVICE, переданной параметру Device). Если указан флаг PO_FX_COMPONENT_FLAG_F0_ON_DX , PoFx переместит компонент в состояние питания F0 во время переходов Dx и для irPs ожидания и пробуждения. Перед отправкой dx IRP или ожидания или пробуждения IRP в стек устройств (в зависимости от того, какое событие произойдет раньше), диспетчер питания передаст компонент в состояние F0. Компонент будет храниться в F0 до тех пор, пока IRP пробуждения/ожидания не будет отменена или завершена, или dx IRP не будет завершена и драйвер не вызовет подпрограмму PoFxReportDevicePoweredOn (в зависимости от того, какое событие произойдет последним).
Зависимости компонентов
PoFx поддерживает зависимости логических компонентов на устройстве (но не на разных устройствах). Во время регистрации устройства для каждого компонента драйвер может указать номер (элемент ProviderCount ) и массив индексов компонентов (элемент Providers ), от которых зависит этот компонент; они называются поставщиками. PoFx гарантирует, что компонент не станет активным до тех пор, пока не будут активны все его поставщики.Зависимости компонентов образуют направленный граф, где ребро указывает от зависимого компонента к поставщику и представляет зависимость. Во время регистрации устройства PoFx проверяет граф зависимостей: циклы и повторяющиеся ребра не допускаются, а глубина графа для обхода поиска по глубине не может превышать четыре. PoFx также задает число активных ссылок компонентов в соответствии с граф зависимостей, то есть количество активных ссылок каждого поставщика увеличивается один раз для каждого компонента, который от него зависит.
Во время активации компонента PoFx асинхронно активирует все поставщики. После того как компонент активен, PoFx проверяет каждый зависимый компонент и при необходимости продолжает их активацию.
Когда компонент переходит в состояние простоя, PoFx сначала делает зависимые компоненты бездействуют. После того как драйвер завершит компонент ComponentIdleConditionCallback и подключаемый модуль расширения платформы (PEP) получает уведомление о том, что компонент неактивен, PoFx рекурсивно проходит граф зависимостей в ширину и асинхронно простаивает каждый поставщик.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Поддерживается начиная с Windows 8. |
Верхняя часть | wdm.h (включая Wudfwdm.h) |