次の方法で共有


1 つまたは複数の機能電源状態を持つ複数コンポーネント デバイスのサポート

[KMDF にのみ適用]

複数コンポーネント デバイスの KMDF ドライバーは、コンポーネントごとに 1 つ以上の機能電源状態を定義できます。

この場合、ドライバーは電源管理フレームワーク (PoFx) に直接登録します。 WDF を PoFx に登録しないように指定するために、ドライバーは、WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 構造体の IdleTimeoutType メンバーを DriverManagedIdleTimeout に設定して、WdfDeviceAssignS0IdleSettings を呼び出します。 通常、ドライバーは、EvtDriverDeviceAdd コールバック関数からこのメソッドを呼び出します。

次に、ドライバーを PoFx に登録する必要があります。 これを行うために、ドライバーは PoFxRegisterDevice を呼び出し、PoFxStartDevicePowerManagement を呼び出します。 ドライバーは、デバイスが最初に起動されたときに、1 回だけ PoFx に登録する必要があります。 これを行う 1 つの方法は、ドライバーが提供する EvtDeviceSelfManagedIoInit 関数からこれらのルーチンを呼び出すことです。 EvtDeviceSelfManagedIoInit は、デバイスが初めて起動されたときにのみ呼び出されます。

デバイスが削除されると、ドライバーは PoFx からデバイスの登録を解除するために PoFxUnregisterDevice を呼び出す必要があります。 1 回だけ登録を解除するには、ドライバー提供の EvtDeviceSelfManagedIoFlush 関数からドライバーがこのルーチンを呼び出すことをお勧めします。 EvtDeviceSelfManagedIoFlush は、デバイスが削除されている場合にのみ呼び出されます。 EvtDeviceSelfManagedIoFlush で登録を解除することで、ドライバーはスリープ状態と再調整の切り替え中に電源登録を保持し、これらの切り替えの間に保留されたままの I/O 要求の電源リファレンスを保持する必要はありません。

ドライバーが PoFxRegisterDevice を呼び出すと、次のトピックで説明するように、PoFx と直接対話式操作するために使用できる電源登録ハンドル (POHANDLE) を受け取ります。

さらに、ドライバーは、電源制御要求を送信し、待機時間、所在地、およびスリープ解除の要件を指定する電源フレームワーク ルーチンを直接呼び出すことができます。

PoFx の詳細については、「電源管理フレームワークの概要」を参照してください。