迷你埠配接器檢查是否有停止回應和重設作業
概觀
警告
所有 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 秒太小,您的迷你埠驅動程式可以在初始化時間設定不同的值,如下所示:
- 將NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES結構的CheckForHangTimeInSeconds成員設定為非零值。
- 在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,方法是實作選擇性 的 MiniportCheckForHangEx 和 MiniportResetEx 回呼函式。
從 NDIS 6.83 開始,不論電源功能為何, 所有 Windows 系統上 都不建議使用這些回呼函式。 雖然 NDIS 6.83 和更新版本中使用 CFH 不是標誌測試違規,但 NDIS 驅動程式應該使用下表來取得其使用方式的相關指引。
呼叫者 | 建議 | 注意 |
---|---|---|
以 AOAC 系統為目標的驅動程式 | 不得實作 | 由於定期檢查停止回應活動而導致電池使用時間問題 |
以 Windows Server 系統為目標的驅動程式 | 不得實作 | 造成 CPU 壓力時發生問題 |
虛擬 (僅限軟體) 迷你埠驅動程式 | 不得實作 | 若沒有硬體,便無法重設 |
其他新的 NDIS 6.83 和更新版本的驅動程式 | 不應該實作 | |
其他現有的 NDIS 6.82 和更早的程式碼 | 不需要變更,但應該考慮在未來重新作業中移除 Check-for-Hang 和 Reset |