在篩選驅動程式中處理系統Set-Power IRP
在下列步驟中,所有篩選驅動程式和任何不擁有其裝置堆疊電源原則的函式驅動程式都應該將系統設定電源 IRP 傳遞至下一個較低的驅動程式:
呼叫 IoAcquireRemoveLock,傳遞目前的 IRP,以確保驅動程式在處理電源 IRP 時不會收到 PnP IRP_MN_REMOVE_DEVICE 要求。
如果 IoAcquireRemoveLock 傳回失敗狀態,驅動程式不應該繼續處理 IRP。 相反地,從 Windows Vista 開始,驅動程式應該呼叫 IoCompleteRequest 來完成 IRP 並傳回失敗狀態。 在 Windows Server 2003、Windows XP 和 Windows 2000 中,驅動程式應該先呼叫 PoStartNextPowerIrp、呼叫 IoCompleteRequest 來完成 IRP,然後傳回失敗狀態。
呼叫 PoStartNextPowerIrp 以啟動下一個電源 IRP。 (僅限 Windows Server 2003、Windows XP 和 Windows 2000。)
(IoSkipCurrentIrpStackLocation 或 IoCopyCurrentIrpStackLocationToNext) 設定 IRP 堆疊位置。 驅動程式可以在 IRP 中設定 IoCompletion 常式,但很少需要這麼做。
在 Windows Server 2003、Windows XP 和 Windows 2000) 中呼叫 Windows 7 和 Windows Vista) 或PoCallDriver ( (IoCallDriver) ,以將 IRP 傳遞至下一個較低的驅動程式。
呼叫 IoReleaseRemoveLock。 不過,如果驅動程式為 IRP 設定 IoCompletion 常式,請改為從 IoCompletion 常式進行此呼叫。
從 其 DispatchPower 常式傳回STATUS_PENDING。