次の方法で共有


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 つのフラグ ビットは相互に排他的です。 詳細については、「解説」を参照してください。

意味
PO_FX_FLAG_BLOCKING
0x1
条件の変更を同期します。 このフラグが設定されている場合、条件の変更を要求するルーチンは、コンポーネント ハードウェアが新しい条件への切り替えを完了するまで、呼び出し元ドライバーに制御を返しません。 このフラグは、呼び出し元が IRQL < DISPATCH_LEVEL で実行されている場合にのみ使用できます。
PO_FX_FLAG_ASYNC_ONLY
0x2
条件の変更を完全に非同期にします。 このフラグが設定されている場合、呼び出し元ドライバーのコールバック ルーチンは、条件の変更を要求するルーチンが呼び出されるスレッド以外のスレッドから呼び出されます。 したがって、条件の変更を要求するルーチンは、コールバックの完了を待たずに常に非同期的にを返します。

[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 の呼び出しと同じスレッドで発生し、 PoFxIssueComponentPerfStateChangeMultipleComponentPerfStateCallback コールバックが返された後にのみを返します。

Flags = がPO_FX_FLAG_ASYNC_ONLY場合、PoFxIssueComponentPerfStateChangeMultiple 呼び出しは非同期です。 この場合、 PoFxIssueComponentPerfStateChangeMultipleComponentPerfStateCallback ルーチンを別のスレッドで実行するようにスケジュールし、コールバックが発生するのを待たずに を返します。 コールバックは 、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 (「解説」セクションを参照)

こちらもご覧ください

ComponentPerfStateCallback

デバイス パフォーマンスの状態管理

PO_FX_PERF_STATE_TYPE

PoFxIssueComponentPerfStateChange

PoFxRegisterComponentPerfStates