PO_FX_COMPONENT_IDLE_STATE_CALLBACKコールバック関数 (wdm.h)
ComponentIdleStateCallback コールバック ルーチンは、指定されたコンポーネントの Fx 電源状態に対する保留中の変更をドライバーに通知します。
構文
PO_FX_COMPONENT_IDLE_STATE_CALLBACK PoFxComponentIdleStateCallback;
void PoFxComponentIdleStateCallback(
[in] PVOID Context,
[in] ULONG Component,
[in] ULONG State
)
{...}
パラメーター
[in] Context
デバイス コンテキストへのポインター。 デバイス ドライバーは、このコンテキストを使用して、デバイスの現在の電源状態に関する情報を格納します。 デバイス ドライバーは、デバイスを電源管理フレームワーク (PoFx) に登録するために使用した PO_FX_DEVICE 構造体の DeviceContext メンバーにこのポインターを指定しました。 このコンテキストは PoFx に対して不透明です。
[in] Component
コンポーネント番号を指定します。 このパラメーターは、デバイス ドライバーが PoFx にデバイスを登録するために使用した PO_FX_DEVICE 構造体の Components 配列へのインデックスです。 Components 配列に N 個の要素が含まれている場合、コンポーネントインデックスの範囲は 0 から N-1 です。
[in] State
コンポーネントが変更される新しい Fx 電源状態を指定します。 このパラメーターが 0 の場合、新しい状態は F0 です。このパラメーターが 1 の場合、新しい状態は F1 です。などなど。
戻り値
何一つ
備考
PoFx がドライバーの ComponentIdleStateCallback ルーチンを呼び出すとき、ドライバーは保留中の Fx 状態の変更に備える必要があります。 必要な準備が完了したら、ドライバーは PoFxCompleteIdleState ルーチン 呼び出して、ドライバーが ComponentIdleStateCallback コールバックへの応答を完了したことを PoFx に通知する必要があります。 PoFxCompleteIdleState 呼び出しは、ComponentIdleStateCallback ルーチンが返す前または後に行うことができます。
コンポーネントが F0 から、デバイスがコンポーネントのハードウェア状態を失う低電力 Fx 状態に切り替える場合、ドライバーは、新しい Fx 状態への遷移が発生する前に、コンポーネントのハードウェア状態を保存する必要があります。 コンポーネントが低電力 Fx 状態から F0 に切り替え、ハードウェアの状態が以前に保存されている場合、ドライバーは、電源がコンポーネントに復元された後、ハードウェアの状態を復元する必要があります。
一部のデバイスでは、デバイス ハードウェアでコンポーネントの電源状態が制御される場合があります。 これらのデバイスの場合、ドライバーは通常、コンポーネントの電源状態を変更する役割を担います。 他のデバイスの場合、コンポーネントの電源状態は、デバイスの外部にあるハードウェアによって制御される可能性があります。ドライバーは通常、PoFx に依存してコンポーネントの電源状態を構成する必要があります。
ドライバーがコンポーネントの電源状態の構成を担当する場合、ドライバーは、ComponentIdleStateCallback コールバックに応答して電源状態を変更する必要があります。 F0 から低電力 Fx 状態に移行する場合、コンポーネントは ComponentIdleStateCallback ルーチンへのエントリで F0 になり、ドライバーは PoFxCompleteIdleState 呼び出す前に、コンポーネントを新しい Fx 状態に切り替える必要があります。 低電力 Fx 状態から F0 に移行する場合、コンポーネントは、ComponentIdleStateCallback ルーチンへのエントリ時に低電力 Fx 状態になり、ドライバーは PoFxCompleteIdleState 呼び出す前にコンポーネントを F0 に切り替える必要があります。
ドライバーがコンポーネントの電源状態を構成する責任がない場合、ドライバーは、コンポーネントが常に、ComponentIdleStateCallback ルーチンへのエントリ時に F0 状態であると想定する必要があります。 F0 から低電力 Fx 状態への保留中の遷移の場合、ドライバーが PoFxCompleteIdleState 呼び出されるまで、新しい Fx 状態への遷移は発生しません。 低電力 Fx 状態から F0 への遷移の場合、ComponentIdleStateCallback ルーチンが呼び出される前に、F0 への遷移が発生します。
PoFx は、ComponentIdleStateCallback ルーチンを呼び出して、1 つの低電力 Fx 状態から別の低電力 Fx 状態に直接切り替えることはありません。 たとえば、PoFx では、PoFxSetComponentLatency 、PoFxSetComponentResidency、または PoFxSetComponentWake ルーチン呼び出しに応答して、コンポーネントを 1 つの低電力 Fx 状態から別の状態に切り替える必要がある場合があります。 この場合、PoFx は最初に ComponentIdleStateCallback ルーチンを呼び出して古い Fx 状態から F0 に切り替え、次に ComponentIdleStateCallback ルーチンを呼び出して、F0 から新しい Fx 状態に切り替えます。
例
ComponentIdleStateCallback コールバック ルーチンを定義するには、まず、定義するコールバック ルーチンの種類を識別する関数宣言を指定する必要があります。 Windows には、ドライバーのコールバック関数の種類のセットが用意されています。 コールバック関数の種類を使用して関数を宣言すると、ドライバー のコード分析、静的ドライバー検証ツール (SDV)、およびその他の検証ツールをすると、エラーが検出され、Windows オペレーティング システムのドライバーを記述するための要件になります。
たとえば、MyComponentIdleStateCallback
という名前の ComponentIdleStateCallback コールバック ルーチンを定義するには、次のコード例に示すようにPO_FX_COMPONENT_IDLE_STATE_CALLBACK型を使用します。
PO_FX_COMPONENT_IDLE_STATE_CALLBACK MyComponentIdleStateCallback;
次に、次のようにコールバック ルーチンを実装します。
_Use_decl_annotations_
VOID
MyComponentIdleStateCallback(
PVOID Context,
ULONG Component,
ULONG State
)
{
// Function body
}
PO_FX_COMPONENT_IDLE_STATE_CALLBACK関数の種類は、Wdm.h ヘッダー ファイルで定義されています。 コード分析ツールの実行時にエラーをより正確に識別するには、_Use_decl_annotations_
注釈を関数定義に追加してください。
_Use_decl_annotations_
注釈を使用すると、ヘッダー ファイル内のPO_FX_COMPONENT_IDLE_STATE_CALLBACK関数型に適用される注釈が使用されます。 関数宣言の要件の詳細については、「WDM ドライバーの の関数の役割の種類を使用して関数を宣言するを参照してください。
_Use_decl_annotations_
の詳細については、「関数の動作 に注釈を付けるを参照してください。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 8 以降のバージョンの Windows でサポートされています。 |
ターゲット プラットフォーム の | デスクトップ |
ヘッダー | wdm.h (Wudfwdm.h を含む) |
IRQL | IRQL <= DISPATCH_LEVEL で呼び出されます。 |
関連項目
PoFxCompleteIdleState を する
PoFxSetComponentLatency の
PoFxSetComponentResidency の