Freigeben über


IoRequestDeviceEject-Funktion (wdm.h)

Die IoRequestDeviceEject-Routine benachrichtigt den PnP-Manager, dass die Auswurftaste des Geräts gedrückt wurde.

Syntax

void IoRequestDeviceEject(
  [in] PDEVICE_OBJECT PhysicalDeviceObject
);

Parameter

[in] PhysicalDeviceObject

Zeiger auf das PDO für das Gerät.

Rückgabewert

Keine

Bemerkungen

Beachten Sie, dass diese Routine eine Anforderung zum Auswerfen des Geräts und nicht zum Auswerfen von Medien meldet.

In der Regel ruft ein PnP-Bustreiber IoRequestDeviceEject auf, um den PnP-Manager zu benachrichtigen, dass ein Benutzer die Auswurftaste des Geräts auf einem seiner untergeordneten Geräte gedrückt hat.

Ein Treiber ruft diese Routine auf, anstatt eine IRP_MN_EJECT-Anforderung zu senden, da diese Routine es dem PnP-Manager ermöglicht, neben dem Senden des IRP zusätzliche Aktionen für den Auswurf zu koordinieren. Der PnP-Manager benachrichtigt beispielsweise Benutzermodus- und Kernelmoduskomponenten, die sich für die Benachrichtigung über Änderungen auf dem Gerät registriert haben.

Der PnP-Manager leitet ein geordnetes Herunterfahren des Geräts an. Der PnP-Manager:

  1. Erstellt eine Liste mit anderen Geräten, die vom Auswerfen dieses Geräts betroffen sind.

    Der PnP-Manager fragt nach den Entfernungs-, Auswurf- und Busbeziehungen (untergeordnete Geräte) des Geräts ab.

  2. Bestimmt, ob das Gerät und die zugehörigen Geräte softwarefernt werden können.

    Der PnP-Manager sendet IRP_MN_QUERY_REMOVE_DEVICE IRPs an die Treiber für das Gerät und die zugehörigen Geräte. Der PnP-Manager sendet auch Benachrichtigungen an alle Benutzermodus- und Kernelmoduskomponenten, die für Geräteänderungsbenachrichtigungen auf dem Gerät oder einem der zugehörigen Geräte registriert sind. Wenn einer der Treiber oder Benutzermoduskomponenten beim Entfernen der Abfrage fehlschlägt, öffnet der PnP-Manager ein Dialogfeld, um den Benutzer darüber zu informieren, dass der Auswurf fehlgeschlagen ist.

  3. Software entfernt das Gerät und die zugehörigen Geräte.

    Wenn die vorherigen Schritte erfolgreich sind, benachrichtigt der PnP-Manager registrierte Treiber und Anwendungen, dass das Gerät und die zugehörigen Geräte softwarefernt werden. Anschließend sendet der PnP-Manager IRP_MN_REMOVE_DEVICE IRPs an die Treiber für das Gerät und die zugehörigen Geräte. Funktions- und Filtertreiber trennen sich vom Gerätestapel und löschen ihre Geräteobjekte für die Geräte. Die Bustreiber behalten die PDO(s) für die Geräte bei, es sei denn, ein Gerät ist physisch weg und der Bustreiber hat das Gerät in seiner letzten Antwort auf IRP_MN_QUERY_DEVICE_RELATIONS/BusRelations für den übergeordneten Bus des Geräts ausgelassen.

  4. Weist den Bustreiber an, das Gerät auszuwerfen (falls möglich).

    Der PnP-Manager führt verschiedene Schritte aus, abhängig von den Auswurffunktionen des Geräts:

    • Heißauswurf wird unterstützt.

      Wenn die Funktion EjectSupported für das Gerät festgelegt ist, kann das Gerät ausgeworfen werden, wenn das System ausgeführt wird (befindet sich im Zustand PowerSystemWorking ). Der PnP-Manager sendet eine IRP_MN_EJECT Anforderung an den Bustreiber für das Gerät. Alle Funktions- und Filtertreiber, die zuvor als Reaktion auf das Entfernen des IRP aus dem Stapel getrennt wurden, sodass der Bustreiber den Auswurf-IRP verarbeitet. Wenn der Bustreiber die IRP abgeschlossen hat, erwartet der PnP-Manager, dass das Gerät physisch nicht im System vorhanden ist.

    • Heißauswurf wird nicht unterstützt.

      In diesem Fall ist das Gerät herausnehmbar , unterstützt aber kein Auswerfen. Der PnP-Manager kennzeichnet das Gerät als nicht vorhanden/nicht ordnungsgemäß. Der PnP-Manager startet das Gerät erst neu, wenn es von einem Benutzer physisch entfernt und erneut eingesetzt wird. In diesem Fall sendet der PnP-Manager keine IRP_MN_EJECT.

    Der übergeordnete Bustreiber eines Geräts legt die Funktionen für ein Gerät fest, einschließlich seiner Auswurffunktionen, als Reaktion auf eine IRP_MN_QUERY_CAPABILITIES Anforderung. Eine Funktion oder ein Filtertreiber kann optional Funktionen angeben.
Wenn ein Gerät ausgeworfen wird, werden die untergeordneten Geräte zusammen mit ihm physisch aus dem System entfernt.

Eine Anwendung im Benutzermodus kann einen Geräteauswurf initiieren. In diesem Fall ruft kein Treiber diese Routine auf, sondern das Betriebssystem ruft den PnP-Manager auf, um die oben aufgeführten Schritte zu initiieren.

Aufrufer von IoRequestDeviceEject müssen unter IRQL <= DISPATCH_LEVEL ausgeführt werden. Der PnP-Manager führt die meisten der oben unter IRQL = PASSIVE_LEVEL aufgeführten Aufgaben zum Auswerfen von Geräten aus.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar ab Windows 2000.
Zielplattform Universell
Header wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (siehe Abschnitt Hinweise)

Weitere Informationen

IRP_MN_EJECT

IRP_MN_QUERY_DEVICE_RELATIONS

IRP_MN_QUERY_REMOVE_DEVICE

IRP_MN_REMOVE_DEVICE