次の方法で共有


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

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

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

こちらもご覧ください

ComponentPerfStateCallback

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

PO_FX_PERF_STATE_TYPE

PoFxIssueComponentPerfStateChangeMultiple

PoFxRegisterComponentPerfStates