NIC の突然の取り外しの処理

ユーザーが実行中のシステムからネットワーク インターフェイス カード (NIC) をユーザー インターフェイス (UI) 経由で事前に通知せずに削除すると、突然の削除が発生します。

Windows Vista 以降のバージョンのオペレーティング システムのミニポート ドライバーは、突然の削除を処理できる必要があります。 特に、Windows ドライバー モデル (WDM) の下端を持つ NDIS ミニポート ドライバーは、このようなイベントを処理できる必要があります。 NDIS-WDM ミニポート ドライバーが突然の削除を処理しない場合は、ミニポート ドライバーが突然の削除を完了する前に基になるバス ドライバーに送信したすべての保留中の IRP は完了できません。

Windows Vista 以降のバージョンでは、ハードウェアを直接制御しないミニポート ドライバー (WDM 下端を持つミニポート ドライバーなど) は、NdisMSetMiniportAttributes を呼び出すときに NDIS_MINIPORT_ATTRIBUTES_SURPRI Standard Edition_REMOVE_OK 属性フラグを設定する必要があります。 このフラグを設定すると、ユーザーが NIC の突然の削除を実行したときに警告が表示されなくなります。 突然の削除を処理できないミニポート ドライバーは、このフラグを設定しないでください。

突然の削除をサポートするミニポート ドライバーは、MiniportDevicePnPEventNotifyのコンテキスト外でそれ自体が通常の操作中に突然の削除を検出しようと試みる必要があります。 NIC が削除されると、通常、NIC の I/O ポートを読み取ろうとすると、すべてのビットが 1 に設定された戻り値が返されます。 ミニポート ドライバーがこのような値を読み取る場合は、より決定的なテストでハードウェアの存在をチェックする必要があります。 たとえば、ミニポート ドライバーは、I/O ポートに値を書き込み、そのポートから値を読み取ろうとします。 ミニポート ドライバーは、NIC の I/O レジスタの有効な値をチェックすることもできます。 このような方法で突然の削除を検出すると、割り込み DPC で削除された NIC のレジスタを読み取ろうとする時に、ミニポート ドライバーが無限ループに陥るのを防げます。 この方法で応答を停止するミニポート ドライバーは、NDIS がドライバーの MiniportDevicePnPEventNotify 関数を呼び出すのを防ぎます。