AVStream の電源と状態の変更
AVStream は IRP_MN_SET_POWER リクエストを受信すると、ミニドライバーの AVStrMiniDeviceSetPower コールバック ルーチン (ミニドライバーが提供している場合) を呼び出します。
AVStream は、KSPROPERTY_CONNECTION_STATE プロパティの設定リクエストを受信すると、ミニドライバーの AVStrMiniPinSetDeviceState コールバック ルーチン (ミニドライバーが提供している場合) を呼び出します。
システムがスリープ状態から復帰すると、AVStream はミニドライバーの AVStrMiniPinSetDeviceState コールバック ルーチンと AVStrMiniDeviceSetPower コールバック ルーチンを予期される順序とは逆に呼び出す場合があります。 たとえば、AVStrMiniPinSetDeviceState は、AVStrMiniDeviceSetPower の前に呼び出される場合があります。
その結果、ドライバーは、予想されるコールバック順序の逆転を処理できるように準備する必要があります。
この反転は、システムの電源がスリープ状態になったときには発生しません。 電源を切ると、これら 2 つのコールバック ルーチンは常に予想される順序で実行されます。 たとえば、AVStrMiniPinSetDeviceState は、AVStrMiniDeviceSetPower の前に呼び出される場合があります。
この反転が発生した場合、シーケンス全体は次のようになります。
最初に、次の電源ダウン シーケンスが発生します。
AVStrMiniPinSetDeviceState は、デバイス状態を KSSTATE_RUN から KSSTATE_PAUSE に変更するリクエストとともに呼び出されます。
AVStrMiniDeviceSetPower は、電源状態を D0 から D2/D3 に変更する要求で呼び出されます。
この時点で、システムはスリープ状態になります。
次に、電源投入シーケンスが発生します。
AVStrMiniDeviceSetPower は、電源状態を D2/D3 から D0 に変更する要求で呼び出されます。
AVStrMiniPinSetDeviceState は、デバイス状態を KSSTATE_PAUSE から KSSTATE_RUN に変更するリクエストとともに呼び出されます。
このシナリオでは、手順 5 と 6 は、予想される順序から逆の手順です。
さらに、アプリケーションがストリーミング中でシステムが電源ダウン シーケンスを開始すると、実行中のキャプチャ グラフは常に一時停止状態になります。 グラフがすでに停止している場合は、停止したままになります。