實作 MiniportCancelIdleNotification 處理程式函式
NDIS 會呼叫迷你埠驅動程式的 MiniportCancelIdleNotification 處理程式函式,以取消閑置通知程式,並將網路適配器轉換為全電源狀態。 呼叫此函式時,迷你埠驅動程序必須遵循下列步驟:
迷你端口驅動程式必須取消可能曾發出過的任何針對閒置通知的總線特定 IRP。
迷你連接埠驅動程式會呼叫 NdisMIdleNotificationComplete。 此呼叫會通知 NDIS 閑置通知已完成。 NDIS 接著會將網路適配器轉換為全電源狀態,以編譯選擇性暫停作業。
例如,呼叫 MiniportCancelIdleNotification 時,USB 迷你埠驅動程式會呼叫 IoCancelIrp 來取消 USB 閑置要求的 I/O 要求封包 (IRP) (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION)。 USB 迷你埠驅動程式先前在其 MiniportIdleNotification 處理程式函式中發出此 IRP。 當 USB 總線驅動程式取消 IRP 時,它會呼叫 IRP 的完成例程。 當 USB 總線驅動程式呼叫完成例程時,它會確認 IRP 已取消,且裝置可以繼續進入全電源狀態。 在完成例程的內容中,迷你埠驅動程式會呼叫 NdisMIdleNotificationComplete。
注意 USB 總線驅動程式可以同步地在呼叫 IoCancelIrp 的過程中呼叫完成例程,或在 MiniportCancelIdleNotification 返回後異步地進行呼叫。
下列是 USB 迷你埠驅動程式 MiniportCancelIdleNotification 處理程式函式的範例。 此範例示範取消 USB 閒置要求 IRP 時所需的步驟。
//
// MiniportCancelIdleNotification()
//
// This routine is called if NDIS has to cancel an idle notification.
// All that is needed is to cancel the selective suspend IRP.
//
VOID MiniportCancelIdleNotification(
_In_ NDIS_HANDLE MiniportAdapterContext
)
{
IoCancelIrp(Adapter->UsbSsIrp);
}
如需實作 USB 閑置要求 IRP 完成例程的指導方針,請參閱 實作 USB 閑置要求 IRP 完成例程。