Beenden eines Geräts, um Ressourcen neu auszugleichen

Die folgende Abbildung zeigt die Abfolge der IRPs, die beim Beenden und Neustarten eines Geräts zum Erneuten Ausgleich der Ressourcen beteiligt sind.

Diagramm, das das Beenden eines Geräts zeigt, um Ressourcen neu auszugleichen.

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

  1. Der PnP-Manager gibt eine IRP_MN_QUERY_STOP_DEVICE aus, um zu fragen, ob die Treiber für ein Gerät das Gerät beenden und seine Hardwareressourcen freigeben können.

    Wenn alle Treiber im Gerätestapel STATUS_SUCCESS zurückgeben, haben die Treiber das Gerät in einen Zustand versetzt (Ausstehend), aus dem das Gerät schnell beendet werden kann.

    Wenn ein Gerätestapel etwas anderes als STATUS_SUCCESS zurückgibt, nimmt er nicht am Neuausgleichsprozess teil. Da das Erneute Ausbalancieren von Ressourcen ein Best-Effort-Vorgang ist, versucht das System in diesem Fall weiterhin einen Ausgleichsvorgang, um die Ressourcenanforderungen von Geräten im System zu erfüllen. Wenn Geräte jedoch keine Abfragestopps durchführen, können möglicherweise keine gewünschten Ergebnisse erzielt werden (z. B. wenn ein neues Gerät aufgezählt wird und eine Neuverteilung auslöst, erhält es möglicherweise nicht die erforderlichen Ressourcen, sodass es schließlich nicht gestartet werden kann).

    Ein Gerät, bei dem ein Abfragestoppvorgang fehlschlägt, befindet sich weiterhin in einem Betriebszustand, auch wenn der Abfragestopp fehlgeschlagen ist.

    Der PnP-Manager fragt so viele Gerätestapel ab, wie erforderlich, um die erforderlichen Ressourcen auszugleichen.

  2. Der PnP-Manager gibt eine IRP_MN_STOP_DEVICE aus, um das Gerät zu beenden.

    Unter Windows 2000 und höheren Versionen von Windows sendet der PnP-Manager nur dann einen Stopp-IRP, wenn ein vorheriger Abfragestopp-IRP für das Gerät erfolgreich abgeschlossen wurde. Als Reaktion auf einen IRP-Stopp geben Treiber die Hardwareressourcen des Geräts (z. B. die E/A-Ports) frei und enthalten alle IRPs, die Zugriff auf das Gerät erfordern.

  3. Nach der erfolgreichen Ausbalancierung der Ressourcen gibt der PnP-Manager IRP_MN_START_DEVICE Anforderungen aus, um alle Geräte neu zu starten, die während des Ausgleichs angehalten wurden.

  4. Andernfalls bricht der PnP-Manager eine Abfragestopp-IRP ab, indem er eine IRP_MN_CANCEL_STOP_DEVICE sendet.

    Als Reaktion auf eine IRP_MN_CANCEL_STOP_DEVICE versetzen die Treiber für ein Gerät das Gerät in den Startzustand zurück und setzen die Verarbeitung von E/A-Anforderungen für das Gerät fort.

    Der PnP-Manager bricht den Abfragestopp für einen Gerätestapel ab, wenn ein Treiber im Stapel die Anforderung nicht erfolgreich ausgeführt hat oder wenn der gesamte Ausgleichsvorgang fehlgeschlagen ist und alle Abfragestoppanforderungen abgebrochen werden. Wenn der PnP-Manager den Abfragestopp für nur einen Gerätestapel abbricht, sendet er die IRP_MN_CANCEL_STOP_DEVICE Anforderung, da alle Treiber, die über dem Treiber angefügt werden, der die Abfrage fehlgeschlagen hat, das Gerät im Status "Ausstehend" befindet. Wenn die IRP_MN_CANCEL_STOP_DEVICE erfolgreich ist, haben die Treiber das Gerät in den Startzustand versetzt.

  5. Wenn ein Treiber das Gerät nach dem Erneuten Ausgleich der Ressourcen nicht neu starten kann, sendet der PnP-Manager entfernte IRPs an den Gerätestapel (unter Windows 2000 und höheren Versionen von Windows).

    Der PnP-Manager sendet zuerst eine IRP_MN_SURPRISE_REMOVAL-Anforderung . Anschließend wird eine IRP_MN_REMOVE_DEVICE-Anforderung gesendet, aber erst, nachdem alle geöffneten Handles an das Gerät geschlossen wurden.

Das Erneute Ausgleichen der Hardwareressourcen eines PnP-Geräts muss für Anwendungen und Endbenutzer transparent sein. Benutzer können eine vorübergehende Verzögerung des Betriebs feststellen, aber Daten dürfen nicht verloren gehen. Sie müssen dies berücksichtigen, wenn Sie Beenden von IRPs behandeln.