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