Behandeln des überraschenden Entfernens einer NIC
Eine überraschende Entfernung tritt auf, wenn ein Benutzer eine Netzwerkschnittstelle Karte (NIC) aus einem ausgeführten System entfernt, ohne das System zuvor über die Benutzeroberfläche (UI) zu benachrichtigen.
Miniport-Treiber für Windows Vista und höhere Versionen des Betriebssystems sollten in der Lage sein, überraschende Entfernungen zu verarbeiten. Insbesondere sollten NDIS-Miniporttreiber mit einem unteren Rand des Windows-Treibermodells (WINDOWS Driver Model, WDM) in der Lage sein, solche Ereignisse zu verarbeiten. Wenn ein NDIS-WDM-Miniporttreiber keine überraschende Entfernung verarbeitet, können alle ausstehenden IRPs, die der Miniporttreiber vor der überraschenden Entfernung an den zugrunde liegenden Bustreiber gesendet hat, nicht abgeschlossen werden.
Für Windows Vista und höhere Versionen sollte ein Miniporttreiber (z. B. ein Miniporttreiber mit einem unteren WDM-Rand), der die Hardware nicht direkt steuert, das NDIS_MINIPORT_ATTRIBUTES_SURPRISE_REMOVE_OK-Attributflag festlegen, wenn NdisMSetMiniportAttributes aufgerufen wird. Durch Festlegen dieses Flags wird verhindert, dass eine Warnung angezeigt wird, wenn ein Benutzer eine überraschende Entfernung einer NIC durchführt. Ein Miniporttreiber, der eine überraschende Entfernung nicht verarbeiten kann, sollte dieses Flag nicht festlegen.
Ein Miniporttreiber, der das Entfernen von Überraschungen unterstützt, sollte selbst versuchen, eine überraschende Entfernung während normaler Vorgänge zu erkennen - außerhalb des Kontexts von MiniportDevicePEventNotify. Nachdem eine NIC entfernt wurde, führt ein Versuch, die E/A-Ports einer NIC zu lesen, in der Regel zu Rückgabewerten, für die alle Bits auf 1 festgelegt sind. Wenn ein Miniporttreiber einen solchen Wert liest, sollte er überprüfen, ob die Hardware vorhanden ist und einen schlüssigeren Test enthält. Beispielsweise könnte der Miniporttreiber einen Wert in einen E/A-Port schreiben und dann versuchen, den Wert von diesem Port zu lesen. Der Miniporttreiber kann auch in den E/A-Registern der NIC nach gültigen Werten suchen. Die Erkennung einer überraschenden Entfernung auf diese Weise verhindert, dass der Miniporttreiber in einer Endlosschleife hängen bleibt, wenn er versucht, die Register einer entfernten NIC in einem Interrupt-DPC zu lesen. Ein Miniporttreiber, der auf diese Weise nicht mehr reagiert, verhindert, dass NDIS die MiniportDevicePnPEventNotify-Funktion des Treibers aufruft.