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

デバイス内の他のコンポーネントに対してこのコンポーネントを一意に識別するコンポーネント ID。 電源管理フレームワーク (PoFx) で、このコンポーネントを同じデバイス内の他の類似したコンポーネントと区別するためにコンポーネント ID が必要な場合、ドライバーは、このメンバーの 0 以外の値を指定する必要があります。 このメンバーは省略可能です。 このメンバーを使用しない場合は、すべてのゼロに設定する必要があります。

IdleStateCount

IdleStates メンバーが指す配列内の要素の数。 さらに、このメンバーは、コンポーネントがサポートする Fx 電源状態の数を指定します。 コンポーネントは、少なくとも 1 つの Fx 状態 (F0) をサポートする必要があります。

DeepestWakeableIdleState

コンポーネントがスリープ解除できる最も深い Fx 状態のインデックス。 F0 には 0、F1 には 1 を指定します。 このインデックスは IdleStateCount より小さくする必要があります。

IdleStates

PO_FX_COMPONENT_IDLE_STATE配列へのポインター。 この配列の長さは IdleStateCount メンバーによって指定されます。 各配列要素は、コンポーネントでサポートされている Fx 電源状態の属性を指定します。 要素 0 は F0 を表し、要素 1 は F1 を表し、次のように記述します。

注釈

デバイス ドライバーがデバイスを 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 値です。

ドライバーが PoFx への登録中にPO_FX_VERSION_V2のサポートを指定した場合(つまり、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 遷移中および待機/スリープ解除 IRP の間にコンポーネントを F0 電源状態にします。 Dx IRP または待機/スリープ解除 IRP をデバイス スタックにディスパッチする前に (どちらかのイベントが最初に発生した場合)、電源マネージャーはコンポーネントを F0 状態に移行します。 ウェイク/待機 IRP が取り消されるか完了するか、Dx IRP が完了し、ドライバーが PoFxReportDevicePoweredOn ルーチンを呼び出すまで、コンポーネントは F0 に保持されます (最後に発生するイベント)。

コンポーネントの依存関係

PoFx は、デバイス内の論理コンポーネントの依存関係をサポートします (ただし、異なるデバイス間ではサポートされません)。 各コンポーネントのデバイス登録中に、ドライバーは、このコンポーネントが依存する数値 ( ProviderCount メンバー) とコンポーネント インデックスの配列 ( Providers メンバー) を指定できます。これらはプロバイダーと呼 ばれます。 PoFx は、すべてのプロバイダーがアクティブになるまで、コンポーネントがアクティブにならないことを保証します。

コンポーネントの依存関係は、依存コンポーネントからプロバイダーを指し、依存関係を表す有向グラフを形成します。 デバイスの登録中に、PoFx は依存関係グラフを検証します。サイクルと繰り返しエッジは許可されません。深度優先検索トラバーサルのグラフの深さは 4 を超えることはできません。 PoFx では、コンポーネントのアクティブな参照カウントも依存関係グラフに従って設定されます。つまり、各プロバイダーのアクティブな参照カウントは、それに依存するコンポーネントごとに 1 回インクリメントされます。

コンポーネントのアクティブ化中、PoFx は最初にすべてのプロバイダーを非同期的にアクティブ化します。 コンポーネントがアクティブになった後、PoFx はすべての依存コンポーネントをチェックし、必要に応じてアクティブ化を続行します。

コンポーネントがアイドル状態に移行すると、PoFx は最初に依存コンポーネントをアイドル状態にします。 ドライバーが ComponentIdleConditionCallback を完了し、プラットフォーム拡張機能プラグイン (PEP) にコンポーネントがアイドル状態であることが通知されると、PoFx は幅優先トラバーサルで依存関係グラフを再帰的に走査し、各プロバイダーを非同期的にアイドル状態にします。

要件

要件
サポートされている最小のクライアント Windows 8 以降でサポートされています。
Header wdm.h (Wudfwdm.h を含む)

こちらもご覧ください

コンポーネント レベルの電源管理

PO_FX_COMPONENT_IDLE_STATE

PO_FX_DEVICE