共用方式為


處理 NIC 的意外移除 (Windows 7 和更新版本)

在 Windows 7 和 Windows Server 2008 R2 及更高版本中,NDIS 可能會以不同方式處理網路介面卡(NIC)的意外移除,與以前的 Windows 版本相比。 如果 下列條件的任何 成立,NDIS 會執行修訂后的意外移除程式:

  • 作系統是 Windows 8 / Windows Server 2012 或更新版本。
  • 作系統為 Windows 7,且已安裝適用於 KB2471472 的 Hotfix。
  • 作系統是 Windows 7,網路適配器是行動寬頻 (MBB) 裝置。

如果不符合這些條件,NDIS 會像過去的 Windows 版本一樣參與意外移除程序。 如需此程序的詳細資訊,請參閱 處理 Windows Vista 中 NIC 的意外移除

下列步驟說明 NDIS 參與 NIC 意外移除的修訂方式:

  1. PnP 管理員向 NIC 的裝置堆疊發出 IRP_MN_SURPRISE_REMOVAL 要求。

  2. 當 NDIS 收到此 IRP 時,它會呼叫連結至驅動程式堆疊中 NIC 的最低篩選驅動程式 FilterNetPnPEvent 函式。 在此呼叫中,NDIS 會指定 NetEventQueryRemoveDevice的事件碼。

    注意 NDIS 只有在篩選驅動程式宣告 FilterNetPnPEvent 函式的進入點時,才會執行此步驟。 篩選驅動程式會在呼叫 NdisFRegisterFilterDriver 函式時公告此進入點。

  3. 在呼叫其 FilterNetPnPEvent 函式的內容中,篩選驅動程式必須呼叫 NdisFNetPnPEvent,將 NetEventQueryRemoveDevice 事件轉送至驅動程式堆疊中的下一個篩選驅動程式。 這會導致 NDIS 以事件碼 NetEventQueryRemoveDevice呼叫該篩選驅動程式的功能 FilterNetPnPEvent

    Note NDIS 只會針對驅動程式堆疊中的下一個篩選驅動程式執行此步驟,以宣告 FilterNetPnPEvent 函式的進入點。

  4. 驅動程式堆疊中的每個篩選驅動程式都會重複上一個步驟,直到堆疊中最高的篩選驅動程序轉送 NetEventQueryRemoveDevice 事件為止。

    發生這種情況時,NDIS 會呼叫系結至 NIC 之所有通訊協定驅動程式的 ProtocolNetPnPEvent 函式。 在此呼叫中,NDIS 會指定 NetEventQueryRemoveDevice的事件碼。

  5. NDIS 會以事件代碼 NdisDevicePnPEventSurpriseRemoved呼叫 MiniportDevicePnPEventNotify 函式。 小型埠驅動程式應該注意裝置已被物理移除。 如果迷你埠驅動程式是 NDIS-WDM 驅動程式,它應該取消它傳送至基礎總線驅動程式的任何擱置 IRP。

  6. NDIS 會執行下列步驟:

    1. 它會暫停系結至 NIC 的所有通訊協定驅動程式。

    2. 它會暫停附加至 NIC 的所有篩選驅動程式。

    3. 它會暫停 NIC 的迷你埠驅動程式。

    4. 它會呼叫所有系結至 NIC 的通訊協定驅動程式的 ProtocolUnbindAdapterEx 函式。

    5. 它會呼叫所有附加在 NIC 上的篩選模組的 FilterDetach 函式。

  7. 在所有通訊協議和篩選驅動程式都未系結且與 NIC 中斷鏈接之後,NDIS 會呼叫迷你埠驅動程式的 MiniportHaltEx 函式。 NDIS 會將 MiniportHaltExHaltAction 參數設定為 NdisHaltDeviceSurpriseRemoved

  8. NDIS 會將IRP_MN_SURPRISE_REMOVAL要求傳送至堆疊中下一個較低的裝置物件。 從堆疊中下一個較低的裝置物件接收傳回IRP_MN_SURPRISE_REMOVAL要求之後,NDIS 會完成IRP_MN_SURPRISE_REMOVAL要求。

  9. PnP 管理員發出 IRP_MN_REMOVE_DEVICE 要求,以移除 NIC 的軟體表示法(裝置物件等等)。

  10. NDIS 會將IRP_MN_REMOVE_DEVICE要求傳送至堆疊中的下一個較低裝置物件。

  11. 當 NDIS 收到堆疊中下一個較低裝置物件的已完成 IRP_MN_REMOVE_DEVICE 要求時,NDIS 會銷毀它為 NIC 建立的功能裝置物件 (FDO)。