共用方式為


迷你埠配接器 檢查掛起和重置操作

概述

警告

所有 NDIS 6.83 和更新版本的驅動程式都不建議使用 Check-for-Hang 和 Reset 作業。 如需詳細資訊,請參閱 NDIS 6.83 和更新版本中的 Check-for-Hang 和 Reset 作業

NDIS 會呼叫 NDIS 迷你埠驅動程式的 MiniportCheckForHangEx 函式,以檢查代表網路適配器 (NIC) 的 NDIS 配接器運作狀態。 MiniportCheckForHangEx 檢查適配卡的內部狀態,並在偵測到適配卡未正確運作時傳回 TRUE

根據預設,NDIS 會每隔 2 秒呼叫 MiniportCheckForHangEx。 如果 MiniportCheckForHangEx傳回 TRUE,NDIS 會呼叫 NDIS 迷你埠驅動程式的 MiniportResetEx 函式。 如果預設逾時值為 2 秒太小,您的迷你埠驅動程式可以在初始化時設定不同的值,如下所示:

  1. CheckForHangTimeInSecondsNDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES 結構的成員設定為非零值。
  2. NdisMSetMiniportAttributes 函式的 MiniportAttributes 參數中傳遞 NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES 結構。

如需設定驅動程式屬性的詳細資訊,請參閱 初始化配接器CheckForHangTimeInSeconds 的值應該大於迷你埠驅動程式的初始化時間。 不過,如果您的驅動程式花費的時間超過 CheckForHangTimeInSeconds 秒來初始化,這個逾時會過期,導致 NDIS 呼叫驅動程式的 MiniportCheckForHangEx 函式。 如果 MiniportCheckForHangEx 傳回 TRUE,則 NDIS 會呼叫驅動程式的 MiniportResetEx 函式。 基於這個理由,您應該將驅動程式的 MiniportCheckForHangEx 函式與驅動程式初始化同步處理,如此一來,如果驅動程式尚未完成初始化,MiniportCheckForHangEx 將不會傳回 TRUE

如果您的迷你埠驅動程式未在連續兩次呼叫 MiniportCheckForHangEx內完成 OID 要求,NDIS 可以呼叫驅動程式的 MiniportResetEx 函式。 對於某些 OID 要求,如果驅動程式在連續四次呼叫 MiniportCheckForHangEx內未能完成要求,NDIS 會呼叫 MiniportResetEx

重設作業不會影響 迷你埠適配卡作業狀態。 此外,重設作業進行時,配接器的狀態可能會變更。 例如,當有重設作業進行時,NDIS 可能會呼叫驅動程式的 MiniportPause 函式。 在此情況下,驅動程式可以依任何順序完成重設或暫停作業,同時遵循每個作業的一般需求。

針對重設作業,驅動程式可能會無法傳送要求封包,也可以將它們保持在佇列,並在稍後完成。 不過,您應該注意,處於上層的驅動程式在傳輸封包仍未完成時無法暫停。

迷你埠驅動程式可以傳回成功或失敗狀態,以同步完成重設要求。 驅動程式可以傳回 NDIS_STATUS_PENDING,從而以非同步方式完成重設請求。 在此情況下,驅動程式必須呼叫 NdisMResetComplete 來完成作業。

NDIS 6.83 和更新版本中的 Check-for-Hang 和 Reset 作業

在 6.83 之前的 NDIS 版本中,Always On、Always Connected(AOAC)系統不建議使用 Check-for-Hang(CFH)和 Reset 作業,因為這可能會影響電池壽命。 不過,驅動程式仍然可以在其他非 AOAC Windows 系統上使用 CFH,方法是實作選擇性的 MiniportCheckForHangExMiniportResetEx 回呼函式。

從 NDIS 6.83 開始,不論電源功能為何,所有 Windows 系統上都不建議使用這些回呼函式。 雖然在 NDIS 6.83 和更新版本中使用 CFH 不是標誌測試違規,但 NDIS 驅動程式應該使用下表來取得其使用方式的相關指引。

來電者 建議 筆記
以 AOAC 系統為目標的驅動程式 不得採用 由於定期執行檢查是否卡住的活動,導致電池壽命問題
以 Windows Server 系統為目標的驅動程式 不得實作 當 CPU 運行壓力大時會引發問題
虛擬(僅限軟體)迷你埠驅動程式 不得實作 在沒有硬體的情況下無法重設
其他新版本的 NDIS 6.83 及後續版本驅動程式 不應該實施
其他現有的 NDIS 6.82 和舊版程式代碼 不需要修改,但應考慮在未來的更新中移除 Check-for-Hang 和 Reset。

Miniport 驅動程式硬體重設

Miniport 驅動程式重設和停止功能