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

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

Flags

このメンバーは、次のフラグ ビットに設定できます: PO_FX_COMPONENT_FLAG_F0_ON_DX。 詳細については、「解説」を参照してください。

DeepestWakeableIdleState

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

IdleStateCount

IdleStates メンバーが指す配列内の要素の数。 さらに、このメンバーは、コンポーネントがサポートする Fx 電源状態の数を指定します。 コンポーネントは、少なくとも 1 つの 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 値です。

ドライバーが PoFx への登録中にPO_FX_VERSION_V2をサポートするように指定した場合、Flags メンバーはPO_FX_COMPONENT_FLAG_F0_ON_DX値に設定できます (つまり、PoFxRegisterDevice ルーチンの呼び出し中に、ドライバーは Device パラメーターに渡されたPO_FX_DEVICE構造体の Version メンバーにPO_FX_VERSION_V2値を指定しました)。 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