PoFxIssueComponentPerfStateChange 関数 (wdm.h)
PoFxIssueComponentPerfStateChange ルーチンは、デバイス コンポーネントを特定のパフォーマンス状態に配置する要求を送信します。
構文
void PoFxIssueComponentPerfStateChange(
[in] POHANDLE Handle,
[in] ULONG Flags,
[in] ULONG Component,
[in] PPO_FX_PERF_STATE_CHANGE PerfChange,
[in] PVOID Context
);
パラメーター
[in] Handle
PoFx を使用したデバイスの登録を表すハンドル。 デバイス ドライバーは、以前に PoFxRegisterDevice ルーチンからこのハンドルを受信しました。
[in] Flags
パフォーマンス状態変更操作の動作を変更するフラグ。 このメンバーを 0 に設定するか、次のいずれかのフラグ PO_FX_FLAG_XXX ビットに設定します。
これら 2 つのフラグ ビットは相互に排他的です。 詳細については、「解説」を参照してください。
[in] Component
コンポーネントを識別するインデックス。 このパラメーターは、デバイス ドライバーが PoFx にデバイスを登録するために使用したPO_FX_DEVICE構造体の Components 配列へのインデックスです。 Components 配列に N 個の要素が含まれている場合、コンポーネントインデックスの範囲は 0 から N ~ 1 です。
[in] PerfChange
コンポーネントの新しいパフォーマンス状態を表す PO_FX_PERF_STATE_CHANGE 構造体へのポインター。
[in] Context
ComponentPerfStateCallback コールバック ルーチンのコンテキストへのポインター。 このパラメーターは省略可能です。 ドライバーまたはデバイス コンテキストをコールバック ルーチンに渡すことができるように提供されます。 このパラメーターを使用しない場合は、NULL に設定する必要があります。
戻り値
なし
解説
ドライバーが PoFxIssueComponentPerfStateChange を呼び出すと、電源管理フレームワーク (PoFx) は、指定されたパフォーマンス状態に設定されたコンポーネントのパフォーマンス状態を配置するためにプラットフォーム拡張機能プラグイン (PEP) を要求します。 このルーチンは、個別の種類と範囲ベースの両方の種類のパフォーマンス状態セットで使用できます。 個別および範囲ベースのパフォーマンス状態セットの詳細については、「 PO_FX_PERF_STATE_TYPE」を参照してください。
Flags = がPO_FX_FLAG_BLOCKING場合、PoFxIssueComponentPerfStateChange 呼び出しは同期です。 この場合、 PoFxIssueComponentPerfStateChange は 、コンポーネントがパフォーマンス状態の遷移を完了するまで戻るのを待機します。 ドライバーの ComponentPerfStateCallback ルーチンが呼び出され、コンポーネントのパフォーマンス状態の変更が完了したことをドライバーに通知します。 このコールバックは 、PoFxIssueComponentPerfStateChange の呼び出しと同じスレッドで発生し、 PoFxIssueComponentPerfStateChange は ComponentPerfStateCallback コールバックが返された後にのみを返します。
Flags = がPO_FX_FLAG_ASYNC_ONLY場合、PoFxIssueComponentPerfStateChange 呼び出しは非同期です。 この場合、 PoFxIssueComponentPerfStateChange は ComponentPerfStateCallback ルーチンを別のスレッドで実行するようにスケジュールし、コールバックが発生するのを待たずに を返します。 コールバックは 、PoFxIssueComponentPerfStateChange が返される前または後に発生する可能性があります。 ドライバーは ComponentPerfStateCallback ルーチンに依存して、コンポーネントが新しいパフォーマンス状態への移行をいつ完了するかを判断する必要があります。
ドライバーは、PoFxIssueComponentPerfStateChange 呼び出しが同期か非同期かを気にしないことを示すフラグ = 0 を設定できます。 この場合、PoFx は、PEP が同期要求または非同期要求を使用してパフォーマンス状態の変更をコンポーネントに発行するかどうかに基づいて、呼び出しの同期性を決定します。
フラグ = PO_FX_FLAG_ASYNC_ONLYまたはフラグが渡されない場合、このルーチンには= DISPATCH_LEVELの <IRQL が必要です。 フラグ = がPO_FX_FLAG_BLOCKING場合、このルーチンには= APC_LEVELの <IRQL が必要です。
この関数は、呼び出しの同期性に関係なく、 常に ComponentPerfStateCallback ルーチンを呼び出します。 PEP はパフォーマンス状態を変更する要求を拒否する場合があるため、ドライバーは、パフォーマンス状態をハードウェアにコミットする前に、コールバックを受け取るまで待機する必要があります。
呼び出しが同期か非同期かに関係なく、コンポーネントごとに一度に許可される PoFxIssueComponentPerfStateChange ルーチンの呼び出しは 1 つだけです。 パフォーマンス状態変更要求を発行した後、ドライバーは、要求に別のパフォーマンス状態セットが含まれている場合でも、このルーチンを再度呼び出す前に ComponentPerfStateCallback が受信されるまで待機する必要があります。 ComponentPerfStateCallback が受信されるまで待機する前に、このルーチンが再度呼び出されると、バグチェックが発生します。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 10 以降で使用できます。 |
対象プラットフォーム | ユニバーサル |
Header | wdm.h |
Library | Ntoskrnl.lib |
[DLL] | Ntoskrnl.exe |
IRQL | <= APC_LEVELまたは <= DISPATCH_LEVEL (「解説」セクションを参照) |