共用方式為


迷你埠配接器檢查是否有停止回應和重設作業

概觀

警告

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

NDIS 會呼叫 NDIS 迷你埠驅動程式的 MiniportCheckForHangEx 函式,以檢查 NDIS 介面卡的操作狀態,此介面卡代表 NIC (NIC) 。 MiniportCheckForHangEx 會檢查介面卡的內部狀態,如果偵測到介面卡未正確運作,則會傳回 TRUE

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

  1. NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES結構的CheckForHangTimeInSeconds成員設定為非零值。
  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 和更新版本中的停止回應和重設作業

在 6.83 之前的 NDIS 版本中,Always On 由於電池使用問題,不建議使用 Check-for-Hang (CFH) 和 Reset 作業, Always Connected (AOAC) 系統。 不過,驅動程式仍可在其他非 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

迷你埠驅動程式硬體重設

迷你埠驅動程式重設和停止函式