структура PO_FX_COMPONENT_V1 (wdm.h)

Структура PO_FX_COMPONENT описывает атрибуты состояния питания компонента на устройстве.

Синтаксис

typedef struct _PO_FX_COMPONENT_V1 {
  GUID                        Id;
  ULONG                       IdleStateCount;
  ULONG                       DeepestWakeableIdleState;
  PPO_FX_COMPONENT_IDLE_STATE IdleStates;
} PO_FX_COMPONENT_V1, *PPO_FX_COMPONENT_V1;

Члены

Id

Идентификатор компонента, который однозначно идентифицирует этот компонент по отношению к другим компонентам на устройстве. Драйвер должен указать ненулевое значение для этого элемента, если для платформы управления питанием (PoFx) требуется идентификатор компонента, чтобы отличать этот компонент от других аналогичных компонентов на том же устройстве. Этот член является необязательным. Если этот элемент не используется, ему необходимо задать все нули.

IdleStateCount

Количество элементов в массиве, на которые указывает элемент IdleStates . Кроме того, этот элемент указывает количество состояний питания Fx, поддерживаемых компонентом. Компонент должен поддерживать хотя бы одно состояние Fx (F0).

DeepestWakeableIdleState

Индекс самого глубокого состояния Fx, из которого компонент может проснуться. Укажите 0 для F0, 1 для F1 и т. д. Этот индекс должен быть меньше IdleStateCount.

IdleStates

Указатель на массив PO_FX_COMPONENT_IDLE_STATE . Длина этого массива определяется элементом IdleStateCount . Каждый элемент массива задает атрибуты состояния мощности Fx, поддерживаемого компонентом. Элемент 0 описывает F0, элемент 1 — F1 и т. д.

Комментарии

Когда драйвер устройства регистрирует устройство с помощью 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 и для irP ожидания и пробуждения. Перед отправкой 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)

См. также раздел

Управление питанием на уровне компонентов

PO_FX_COMPONENT_IDLE_STATE

PO_FX_DEVICE