取消 NDIS 選擇性暫停閒置通知
如果網路介面卡在閒置逾時期間變成非作用中,NDIS 會啟動選擇性暫停作業。 透過此作業,網路介面卡會轉換為低電源狀態。 NDIS 會發出閒置通知給迷你埠驅動程式,以開始此作業。 如需此作業的詳細資訊,請參閱 處理 NDIS 選擇性暫停閒置通知。
NDIS 會呼叫 MiniportIdleNotification 處理常式函式,通知驅動程式基礎網路介面卡似乎閒置。 發出閒置通知之後,如果下列一或多個條件成立,NDIS 就會解除擱置的閒置通知:
過度配置通訊協定或篩選驅動程式會發出傳送封包要求或物件識別碼, (OID) 對迷你埠驅動程式的要求。
如需 NDIS 如何取消此案例閒置通知的詳細資訊,請參閱 因為過度處理驅動程式活動而取消閒置通知。
基礎配接器會發出喚醒事件的訊號,例如接收封包或偵測其媒體線上狀態的變更。
如需 NDIS 如何取消此案例閒置通知的詳細資訊,請參閱 因為喚醒事件而取消閒置通知。
NDIS 會呼叫基礎 迷你埠驅動程式的 MiniportCancelIdleNotification 處理常式函式來取消閒置通知。 呼叫此函式時,迷你埠驅動程式必須完成閒置通知,才能將介面卡恢復為完整電源狀態。 如需此程式的指導方針,請參閱 完成 NDIS 選擇性暫停閒置通知。
如需如何實作 MiniportCancelIdleNotification 處理常式函式的詳細資訊,請參閱 實作 MiniportCancelIdleNotification 處理常式函式。
因為過度配置驅動程式活動而取消閒置通知
NDIS 監視器會將發出的要求和 OID 要求傳送到網路介面卡已暫停且處於低電源狀態的迷你埠驅動程式。 發生這種情況時,NDIS 會取消未處理的閒置通知,讓網路介面卡可以繼續進入完整電源狀態。
取消閒置通知時,NDIS 和迷你埠驅動程式會遵循下列步驟:
NDIS 會呼叫 MiniportCancelIdleNotification 處理常式函式來取消未處理的閒置通知。 呼叫此處理程式函式時,迷你埠驅動程式必須取消任何匯流排特定的 I/O 要求封包, (IRP) 先前可能已針對閒置通知發出。
例如,呼叫 MiniportCancelIdleNotification 時,USB 網路介面卡的迷你埠會執行下列步驟:
迷你埠驅動程式會解除擱置的 USB 閒置要求, (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) IRP。 當 NDIS 呼叫驅動程式的 MiniportIdleNotification 函式時,迷你埠驅動程式先前已將此 IRP 發出給基礎 USB 匯流排驅動程式。 迷你埠驅動程式會呼叫 IoCancelIrp來取消此 IRP。
當匯流排驅動程式取消 USB 閒置要求 IRP 時,它會呼叫 IRP 的迷你埠驅動程式完成常式。 此呼叫會通知驅動程式 IRP 已完成,且網路介面卡可以轉換為完整電源狀態。 從完成常式的內容中,驅動程式會呼叫 NdisMIdleNotificationComplete ,通知 NDIS 網路介面卡可以轉換為全電源狀態。
注意根據取消匯流排特定閒置要求的相依性,迷你埠驅動程式會在MiniportCancelIdleNotification 傳回 MiniportCancelIdleNotification的內容中同步呼叫NdisMIdleNotification,或以非同步方式呼叫MiniportCancelIdleNotification。
如需如何實作 USB 閒置要求 IRP 完成常式的詳細資訊,請參閱 實作 USB 閒置要求 IRP 完成常式。
迷你埠驅動程式取消閒置通知的任何匯流排特定 IRP 之後,它會呼叫 NdisMIdleNotificationComplete。 此呼叫會通知 NDIS 已完成閒置通知。 接著,NDIS 會藉由將網路介面卡轉換為全電源狀態來完成選擇性暫停作業。
呼叫 NdisMIdleNotificationComplete 時,NDIS 會執行下列步驟:
基礎匯流排驅動程式 IRP_MN_SET_POWER 的 NDIS 問題。 此 IRP 會要求匯流排驅動程式將網路介面卡的電源狀態設定為 PowerDeviceD0。
NDIS 發出 OID_PNP_SET_POWER 至迷你埠驅動程式的 OID 集合要求。 在此 OID 要求中,NDIS 指定網路介面卡現在轉換為 NdisDeviceStateD0 的完整電源狀態。
當它處理此 OID 集合要求時,驅動程式會準備介面卡以進行完整電源作業。 這包括將接收和傳送引擎還原到轉換至低電源狀態之前所在的相同狀態。 驅動程式接著會使用 NDIS_STATUS_SUCCESS 完成 OID 要求。
下圖顯示當 NDIS 取消針對 USB 網路介面卡的迷你埠驅動程式發出的閒置通知時,所涉及的步驟。
因為喚醒事件而取消閒置通知
在網路介面卡轉換為低電源狀態之前,NDIS 會發出 網路介面卡OID_PM_PARAMETERS 的 OID 集合要求。 此 OID 要求會指定配接器可發出訊號以繼續進入完整電源狀態的喚醒事件種類。 針對 NDIS 選擇性暫停,介面卡會設定為發出下列任何喚醒事件的訊號:
接收的封包符合先前透過 OID 集合要求 所設定OID_PM_ADD_WOL_PATTERN 或 OID_GEN_CURRENT_PACKET_FILTER的篩選準則。
介面卡上的媒體線上狀態變更。
NDIS 和迷你埠驅動程式會在 NDIS 因為網路介面卡所產生的喚醒訊號而取消閒置通知時,遵循下列步驟:
匯流排驅動程式會先完成 NDIS 所發出的 IRP_MN_WAIT_WAKE ,再將介面卡轉換為低電源狀態。 藉由完成 IRP,匯流排驅動程式會通知 NDIS 網路介面卡已產生喚醒訊號。
NDIS 會呼叫 MiniportCancelIdleNotification 處理常式函式,以啟動取消閒置通知的作業。 此作業所涉及的步驟與取消閒置通知中所述的步驟相同, 因為過度處理驅動程式活動。
例如,下圖顯示 NDIS 取消閒置通知時所涉及的步驟,因為 USB 網路介面卡發出喚醒事件訊號。