次の方法で共有


AVStream の電源と状態の変更

AVStream は IRP_MN_SET_POWER リクエストを受信すると、ミニドライバーの AVStrMiniDeviceSetPower コールバック ルーチン (ミニドライバーが提供している場合) を呼び出します。

AVStream は、KSPROPERTY_CONNECTION_STATE プロパティの設定リクエストを受信すると、ミニドライバーの AVStrMiniPinSetDeviceState コールバック ルーチン (ミニドライバーが提供している場合) を呼び出します。

システムがスリープ状態から復帰すると、AVStream はミニドライバーの AVStrMiniPinSetDeviceState コールバック ルーチンと AVStrMiniDeviceSetPower コールバック ルーチンを予期される順序とは逆に呼び出す場合があります。 たとえば、AVStrMiniPinSetDeviceState は、AVStrMiniDeviceSetPower の前に呼び出される場合があります。

その結果、ドライバーは、予想されるコールバック順序の逆転を処理できるように準備する必要があります

この反転は、システムの電源がスリープ状態になったときには発生しません。 電源を切ると、これら 2 つのコールバック ルーチンは常に予想される順序で実行されます。 たとえば、AVStrMiniPinSetDeviceState は、AVStrMiniDeviceSetPower の前に呼び出される場合があります。

この反転が発生した場合、シーケンス全体は次のようになります。

最初に、次の電源ダウン シーケンスが発生します。

  1. AVStrMiniPinSetDeviceState は、デバイス状態を KSSTATE_RUN から KSSTATE_PAUSE に変更するリクエストとともに呼び出されます。

  2. AVStrMiniDeviceSetPower は、電源状態を D0 から D2/D3 に変更する要求で呼び出されます。

  3. この時点で、システムはスリープ状態になります。

  4. 次に、電源投入シーケンスが発生します。

  5. AVStrMiniDeviceSetPower は、電源状態を D2/D3 から D0 に変更する要求で呼び出されます。

  6. AVStrMiniPinSetDeviceState は、デバイス状態を KSSTATE_PAUSE から KSSTATE_RUN に変更するリクエストとともに呼び出されます。

このシナリオでは、手順 5 と 6 は、予想される順序から逆の手順です。

さらに、アプリケーションがストリーミング中でシステムが電源ダウン シーケンスを開始すると、実行中のキャプチャ グラフは常に一時停止状態になります。 グラフがすでに停止している場合は、停止したままになります。