完成 NDIS 選擇性暫停閒置通知
NDIS 會呼叫 MiniportIdleNotification 處理常式函式,通知驅動程式基礎網路介面卡似乎閒置。 如需此作業的詳細資訊,請參閱 處理 NDIS 選擇性暫停閒置通知。
發出閒置通知之後,迷你埠驅動程式會在下列情況下完成 NDIS 選擇性暫停閒置通知:
NDIS 會藉由呼叫基礎迷你埠驅動程式的 MiniportCancelIdleNotification 處理常式函式來取消閒置通知。
迷你埠驅動程式會完成閒置通知本身。 這樣做的原因專屬於驅動程式和配接器的設計和需求。 例如,如果驅動程式偵測到網路介面卡上的接收活動,驅動程式可以完成閒置通知。
注意 迷你埠驅動程式無法明確取消閒置通知。 當 NDIS 取消閒置通知時,迷你埠驅動程式必須完成通知,如本主題所述。 如需詳細資訊,請參閱 取消 NDIS 選擇性暫停閒置通知。
不論是哪一種情況,迷你埠驅動程式都必須完成閒置通知,才能將介面卡恢復為全電源狀態。 若要完成閒置通知,迷你埠驅動程式必須取消任何匯流排特定的 I/O 要求封包, (IRP) 先前針對閒置通知發出。 最後,驅動程式會呼叫 NdisMIdleNotificationComplete ,以通知 NDIS 網路介面卡可以轉換為全電源狀態。
例如,USB 網路介面卡的迷你埠驅動程式會遵循下列步驟來完成閒置通知:
迷你埠驅動程式會解除擱置的 USB 閒置要求 , (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) IRP。 當 NDIS 呼叫驅動程式 的 MiniportIdleNotification 函式時,迷你埠驅動程式先前已將此 IRP 發出給基礎 USB 匯流排驅動程式。 迷你埠驅動程式會藉由呼叫 IoCancelIrp來取消此 IRP。
當匯流排驅動程式取消 USB 閒置要求 IRP 時,它會呼叫 IRP 的迷你埠驅動程式完成常式。 此呼叫會通知驅動程式 IRP 已完成,且網路介面卡可以轉換為全電源狀態。 驅動程式會從完成常式的內容呼叫 NdisMIdleNotificationComplete ,以通知 NDIS 網路介面卡可以轉換為全電源狀態。
如需如何實作 USB 閒置要求 IRP 完成常式的詳細資訊,請參閱 實作 USB 閒置要求 IRP 完成常式。
注意根據取消匯流排特定閒置要求的相依性,迷你埠驅動程式會在MiniportCancelIdleNotification 傳回 MiniportCancelIdleNotification的內容中以同步方式呼叫NdisMIdleNotification,或以非同步方式呼叫MiniportCancelIdleNotification。
在迷你埠驅動程式取消閒置通知的任何匯流排特定 IRP 之後,它會呼叫 NdisMIdleNotificationComplete。 此呼叫會通知 NDIS 閒置通知已完成。 接著,NDIS 會將網路介面卡轉換為全電源狀態,以完成選擇性暫停作業。
呼叫 NdisMIdleNotificationComplete 時,NDIS 會執行下列步驟:
基礎匯流排驅動程式 IRP_MN_SET_POWER NDIS 問題。 此 IRP 要求匯流排驅動程式將網路介面卡的電源狀態設定為 PowerDeviceD0。
NDIS 會發出物件識別碼, (OID) 將 OID_PNP_SET_POWER 的要求設為迷你埠驅動程式。 在此 OID 要求中,NDIS 指定網路介面卡現在轉換為 NdisDeviceStateD0 的完整電源狀態。
當它處理這個 OID 集合要求時,驅動程式會準備介面卡以進行全電源作業。 這包括將接收和傳送引擎還原至轉換至低電源狀態之前所在的相同狀態。 驅動程式接著會使用 NDIS_STATUS_SUCCESS 完成 OID 要求。
下圖顯示迷你埠驅動程式完成 USB 網路介面卡閒置通知時所涉及的步驟。
注意當迷你埠驅動程式完成閒置通知時,它不得針對先前透過呼叫 NdisMIdleNotificationComplete完成的閒置通知呼叫NdisMIdleNotificationConfirm呼叫。