Freigeben über


Grundlegendes zum Zeitpunkt der Ausgabe von IRPs zum Entfernen

Die folgende Abbildung zeigt die typische Abfolge von IRPs, die beim Entfernen der Treiber für ein Gerät beteiligt sind.

Diagramm zur Veranschaulichung typischer irp-Übergänge.

Die folgenden Hinweise entsprechen den eingekreisten Zahlen in der vorherigen Abbildung:

  1. Abfrage entfernen

    Der PnP-Manager gibt eine IRP_MN_QUERY_REMOVE_DEVICE aus, um zu fragen, ob ein Gerät entfernt werden kann, ohne den Computer zu stören. Außerdem wird diese IRP gesendet, wenn ein Benutzer die Aktualisierung der Treiber für das Gerät anfordert, und (unter Windows 2000 und höher), wenn Geräte-Manager das Gerät deaktiviert. (Unter Windows 98/Me sendet der PnP-Manager in dieser Situation Stopp-IRPs. Weitere Informationen finden Sie unter Beenden eines Geräts .)

    Wenn alle Treiber im Gerätestapel STATUS_SUCCESS zurückgeben, haben die Treiber das Gerät in den Zustand "Entfernen ausstehend" versetzt. In diesem Zustand dürfen die Treiber keine Vorgänge starten, die verhindern, dass das Gerät entfernt wird.

    In diesem "sauber"-Entfernungsfall sendet der PnP-Manager ein Abfrage-Entfernen-IRP, bevor er ein Remove-IRP sendet. Eine Beschreibung der Entfernung von "Überraschung" finden Sie unter Schritt 5.

    Obwohl dies im obigen Diagramm nicht dargestellt ist, erhält ein Bustreiber möglicherweise eine IRP_MN_QUERY_REMOVE_DEVICE für ein Gerät, das nicht gestartet wurde. Dies kann passieren, wenn ein Benutzer anfordert, ein Gerät dynamisch zu entfernen, das physisch auf dem Computer vorhanden, aber deaktiviert ist.

  2. Entfernen nach erfolgreicher Abfrage

    Der PnP-Manager gibt eine IRP_MN_REMOVE_DEVICE aus, um die Treiber für ein Gerät zu entfernen.

    Treiber müssen diese Anforderung erfolgreich ausführen. Die Treiber für das Gerät führen alle erforderlichen sauber aus, trennen sie vom Gerätestapel und löschen die FDO und alle Filter-DOs. Der übergeordnete Bustreiber behält die PDO bei, bis der Benutzer das Gerät physisch vom Computer entfernt.

    Beachten Sie, dass Treiber vor einer Entfernungs-IRP möglicherweise eine IRP_MN_STOP_DEVICE erhalten, dies ist jedoch nicht erforderlich. Unter Windows 2000 und höher wird IRP_MN_STOP_DEVICE nur verwendet, um ein Gerät zum Ausgleich von Ressourcen anzuhalten. es ist kein Schritt in Richtung Entfernung. Wenn ein Benutzer die Gerätehardware entfernt, während das Gerät beendet wird, sendet der PnP-Manager irgendwann nach dem Beenden-IRP eine Entfernungs-IRP, aber ein Stopp ist keine Voraussetzung für eine Entfernung.

  3. Erneutes Aufzählen des Geräts

    Wenn das Gerät neu aufgezählt wird, nachdem Treiber ihre Geräteobjekte gelöscht haben, ruft der PnP-Manager die AddDevice-Routinen der Treiber auf und gibt einen IRP_MN_START_DEVICE aus, um das Gerät wiederhergestellt zu werden. (Siehe auch die Abbildung Gerätestatus aus der PnP-Perspektive .)

  4. Abbrechen einer Abfrage entfernen

    Der PnP-Manager gibt eine IRP_MN_CANCEL_REMOVE_DEVICE aus, um eine Abfrage-Entfernungsanforderung abzubrechen.

    Als Reaktion auf eine IRP_MN_CANCEL_REMOVE_DEVICE versetzen die Treiber das Gerät in den Startzustand zurück.

  5. Überraschendes Entfernen (Windows 2000 und höhere Versionen von Windows)

    Wenn ein Benutzer auf Windows 2000- und höher-Systemen ein Gerät vom Computer absteckt, ohne das Programm Hardware trennen oder auswerfen zu verwenden, sendet der PnP-Manager eine IRP_MN_SURPRISE_REMOVAL IRP.

    Dieser Fall wird als "Überraschungsentfernung" bezeichnet, da die Treiber keine Vorabwarnung erhalten.

    Als Reaktion auf eine IRP_MN_SURPRISE_REMOVAL IRP schlagen die Treiber für das Gerät ausstehende E/A-Vorgänge fehl und geben die vom Gerät verwendeten Hardwareressourcen frei. Die Treiber müssen sicherstellen, dass keine Komponenten versuchen, auf das Gerät zuzugreifen, da es nicht mehr vorhanden ist.

    Alle Treiber müssen eine IRP_MN_SURPRISE_REMOVAL IRP verarbeiten und status auf STATUS_SUCCESS festlegen.

    Ein IRP_MN_SURPRISE_REMOVAL kann nicht abgebrochen werden.

  6. Entfernen nach überraschender Entfernung (Windows 2000 und höhere Versionen von Windows)

    Wenn alle geöffneten Handles für das Gerät geschlossen sind, sendet der PnP-Manager eine IRP_MN_REMOVE_DEVICE-Anforderung an die Treiber für das Gerät. Jeder Treiber trennt sich vom Gerätestapel und löscht sein Geräteobjekt.

  7. Überraschung entfernen (Windows 98/Me)

    Unter Windows 98/Me erhält ein Treiber keine IRP_MN_SURPRISE_REMOVAL , wenn ein Gerät ohne Warnung entfernt wird. Der PnP-Manager sendet nur eine IRP_MN_REMOVE_DEVICE. WDM-Treiber müssen über Code verfügen, um sowohl eine IRP_MN_SURPRISE_REMOVAL gefolgt von einer IRP_MN_REMOVE_DEVICE (das Verhalten von Windows 2000 und höher für die überraschende Entfernung) als auch einen IRP_MN_REMOVE_DEVICE ohne vorheriges Überraschend-Entfernen-IRP (das Verhalten von Windows 98/Me) zu verarbeiten.

  8. Entfernen nach einem fehlerhaften Start (Windows 2000 und höher)

    Wenn einer der Treiber für ein Gerät einen IRP_MN_START_DEVICE ausfällt, sendet der PnP-Manager eine IRP_MN_REMOVE_DEVICE-Anforderung an den Gerätestapel. Eine solche Entfernungs-IRP stellt sicher, dass alle Treiber für das Gerät benachrichtigt werden, dass das Gerät nicht erfolgreich gestartet wurde. Als Reaktion auf die IRP_MN_REMOVE_DEVICE IRP machen die Treiber für das Gerät ihre Startvorgänge rückgängig (wenn sie den Start-IRP erfolgreich waren) und machen ihre AddDevice-Vorgänge rückgängig. Der PnP-Manager markiert ein solches Gerät als "Fehlgeschlagener Start".

    Dieses Verhalten gilt nur für Plattformen unter Windows 2000 und höher. Unter Windows 98/Me sendet der PnP-Manager eine IRP_MN_STOP_DEVICE als Reaktion auf einen fehlgeschlagenen Start.

Ein Treiber für ein PnP-Gerät kann in mehr Situationen eine IRP_MN_SURPRISE_REMOVAL erhalten, als in der Abbildung, die typische IRP-Übergänge zum Entfernen veranschaulicht. Beispielsweise könnte ein Benutzer eine PC-Karte in den Computer einfügen und dann entfernen, bevor das Gerät gestartet wird. In diesem Fall gibt der PnP-Manager nach dem Aufrufen der AddDevice-Routinen des Treibers, aber vor dem Ausstellen der IRP_MN_START_DEVICE-Anforderung eine Überraschungs-IRP aus. Ein Treiber für ein PnP-Gerät muss darauf vorbereitet sein, IRPs jederzeit nach dem Aufruf der AddDevice-Routine des Treibers zu verarbeiten.