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 値です。
Flags メンバーは、ドライバーが PoFx への登録中に PO_FX_VERSION_V2 のサポートを指定した場合 (つまり、PoFxRegisterDevice ルーチンの呼び出し中に、渡された PO_FX_DEVICE 構造体の Version メンバーの値 PO_FX_VERSION_V2 を指定した場合、PO_FX_COMPONENT_FLAG_F0_ON_DX 値に設定できますを Device パラメーター) に渡します。 PO_FX_COMPONENT_FLAG_F0_ON_DX フラグが指定されている場合、PoFx は Dx 遷移中および待機/スリープ解除 IRP の間、コンポーネントを F0 電源状態に配置します。 Dx IRP または待機/ウェイク IRP をデバイス スタックにディスパッチする前に (どちらのイベントが最初に発生しても)、電源マネージャーはコンポーネントを F0 状態に移行します。 コンポーネントは、ウェイク/待機 IRP が取り消されるか完了するか、Dx IRP が完了し、ドライバーが PoFxReportDevicePoweredOn ルーチンを呼び出すまで F0 に保持されます (イベントが最後に発生した場合)。
コンポーネントの依存関係の
PoFx は、デバイス内の論理コンポーネントの依存関係をサポートします (ただし、異なるデバイス間ではサポートされません)。 各コンポーネントのデバイス登録中に、ドライバーは、このコンポーネントに依存する番号 (ProviderCount メンバー) とコンポーネント インデックスの配列 (プロバイダー メンバー) を指定できます。これらは、プロバイダーと呼ばれます。 PoFx は、すべてのプロバイダーがアクティブになるまで、コンポーネントがアクティブにならないことを保証します。コンポーネントの依存関係は、エッジが依存コンポーネントからプロバイダーを指し、依存関係を表す有向グラフを形成します。 デバイス登録中、PoFx は依存関係グラフを検証します。サイクルと繰り返しエッジは許可されず、深度優先検索トラバーサルのグラフの深さは 4 を超えることはできません。 PoFx では、依存関係グラフに従ってコンポーネントのアクティブな参照カウントも設定されます。つまり、各プロバイダーのアクティブな参照カウントは、それに依存するコンポーネントごとに 1 回インクリメントされます。
コンポーネントのアクティブ化中、PoFx は最初にすべてのプロバイダーを非同期的にアクティブ化します。 コンポーネントがアクティブになった後、PoFx はすべての依存コンポーネントをチェックし、必要に応じてアクティブ化を続行します。
コンポーネントがアイドル状態に移行すると、PoFx は最初に依存コンポーネントをアイドル状態にします。 ドライバーが ComponentIdleConditionCallback を完了し、プラットフォーム拡張機能プラグイン (PEP) にコンポーネントがアイドル状態であることが通知されると、PoFx は幅優先トラバーサルで依存関係グラフを再帰的に走査し、各プロバイダーを非同期的にアイドル状態にします。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 8 以降でサポートされています。 |
ヘッダー | wdm.h (Wudfwdm.h を含む) |