AVStream 中的電源和狀態變更
當 AVStream 收到 IRP_MN_SET_POWER 要求時,如果 minidriver 已提供一個,它會呼叫 minidriver 的 AVStrMiniDeviceSetPower 回呼常式。
當 AVStream 收到 KSPROPERTY_CONNECTION_STATE 屬性的集合要求時,如果 minidriver 已提供,它會呼叫 minidriver 的 AVStrMiniPinSetDeviceState 回呼常式。
當系統從睡眠狀態喚醒時,AVStream 可能會以預期的順序反向呼叫 minidriver 的 AVStrMiniPinSetDeviceState 和 AVStrMiniDeviceSetPower 回呼常式。 例如, AVStrMiniPinSetDeviceState 可以在 AVStrMiniDeviceSetPower 之前呼叫。
因此, 驅動程式必須準備好處理這類反轉預期的回呼順序。
當系統關閉睡眠狀態時,不會發生這種反轉。 在關閉電源時,這兩個回呼常式一律會以預期的順序發生。 例如, AVStrMiniPinSetDeviceState 一律會在 AVStrMiniDeviceSetPower之前呼叫。
如果發生這種反轉,整個序列看起來會像這樣:
首先,關閉電源順序會發生:
AVStrMiniPinSetDeviceState 會呼叫,並要求將裝置狀態從 KSSTATE_RUN 變更為 KSSTATE_PAUSE。
AVStrMiniDeviceSetPower 會呼叫,並要求將電源狀態從 D0 變更為 D2/D3。
此時,系統處於睡眠狀態。
接下來,電源啟動順序會發生:
AVStrMiniDeviceSetPower 會呼叫,並要求將電源狀態從 D2/D3 變更為 D0。
AVStrMiniPinSetDeviceState 會呼叫,並要求將裝置狀態從 KSSTATE_PAUSE 變更為 KSSTATE_RUN。
在此案例中,步驟 5 和 6 是從預期順序反轉的步驟。
此外,當應用程式正在串流且系統起始關閉電源序列時,執行中的擷取圖形一律會處於暫停狀態。 如果圖表已經停止,它仍會停止。