裝置電源 IRP 的 IoCompletion 常式
在匯流排驅動程式完成 IRP 之後,I/O 管理員會呼叫較高層級驅動程式所註冊的 IoCompletion 常式,因為它們將 IRP 傳遞至堆疊。
每當裝置進入 D0 狀態時,每個驅動程式都應該設定 IoCompletion 常式,以執行將它傳回至工作狀態所需的大部分工作。 驅動程式應該針對任何轉換至 D0 狀態設定 IoCompletion 常式,無論是從睡眠狀態傳回裝置,或在系統啟動時輸入 D0。 下圖顯示 IoCompletion 常式應該執行的工作。
這些工作包括:
視需要還原裝置電源狀態或重新初始化裝置,並準備在裝置未處於工作狀態時處理驅動程式排入佇列的任何 I/O
呼叫 PoSetPowerState 以通知電源管理員裝置處於 D0 電源狀態。
如果驅動程式原本未傳送目前的電源 IRP,請呼叫 PoStartNextPowerIrp 以接收下一個電源 IRP。 (Windows Server 2003、Windows XP 和 Windows 2000 僅) 。
釋放配置給裝置內容的記憶體。
呼叫 IoReleaseRemoveLock 以釋放驅動程式在收到 IRP 時在其 DispatchPower 常式中取得的鎖定。
傳回STATUS_SUCCESS。
在裝置或更高層級的驅動程式必須與裝置通訊之前,匯流排驅動程式不會啟動裝置。
當裝置進入睡眠狀態時,驅動程式應該設定 IoCompletion 常式,以呼叫 PoStartNextPowerIrp (Windows Server 2003、Windows XP 和 Windows 2000 僅) 並釋放移除鎖定。 請記住,當裝置處於睡眠狀態時,驅動程式無法存取其裝置。