處理 NIC 的意外移除
當使用者從執行中的系統移除網路介面卡 (NIC) ,而不需事先透過使用者介面 (UI) 通知系統時,就會發生意外移除。
適用于 Windows Vista 和更新版本的作業系統迷你埠驅動程式應該能夠處理意外移除。 特別是,具有 Windows 驅動程式模型 (WDM) 下邊緣的 NDIS 迷你埠驅動程式應該能夠處理這類事件。 如果 NDIS-WDM 迷你埠驅動程式未處理意外移除,迷你埠驅動程式在無法完成意外移除之前傳送至基礎匯流排驅動程式的任何擱置 IRP。
針對 Windows Vista 和更新版本,迷你埠驅動程式 (例如具有 WDM 下邊緣的迷你埠驅動程式) ,不會直接控制硬體時,應該在呼叫 NdisMSetMiniportAttributes時設定NDIS_MINIPORT_ATTRIBUTES_SURPRISE_REMOVE_OK屬性旗標。 設定此旗標可防止當使用者執行意外移除 NIC 時顯示警告。 無法處理意外移除的迷你埠驅動程式不應設定此旗標。
支援意外移除的迷你埠驅動程式應該本身嘗試在一般作業期間偵測意外移除- -MiniportDevicePnPEventNotify的內容之外。 移除 NIC 之後,嘗試讀取 NIC 的 I/O 埠通常會導致所有位都設定為一的傳回值。 如果迷你埠驅動程式讀取這類值,它應該檢查硬體是否存在具有更完整測試。 例如,迷你埠驅動程式可以將值寫入 I/O 埠,然後嘗試從該埠讀取值。 迷你埠驅動程式也可以檢查 NIC I/O 暫存器中的有效值。 以這種方式偵測意外移除,可防止迷你埠驅動程式在嘗試讀取中斷 DPC 中移除的 NIC 暫存器時,在無限迴圈中掛斷。 以這種方式停止回應的迷你埠驅動程式會停止 NDIS 呼叫驅動程式的 MiniportDevicePnPEventNotify 函式 。