RemoveDevice-Routine des Speicherklassentreibers
Wenn ein Gerät entfernt werden soll, ruft der PnP-Manager zuerst die DispatchPnP-Routine des Klassentreibers mit einer PnP-Abfrage-Entfernungsanforderung (IRP_MJ_PNP mit IRP_MN_QUERY_REMOVE_DEVICE auf. Der Speicherklassentreiber sollte die Abfrage-Remove-Anforderung in einem der folgenden Fälle fehlschlagen:
Das Gerät enthält die Auslagerungsdatei des Systems oder die Ruhezustandsdatei.
Der Treiber führt einen langen Vorgang aus, der nicht abgebrochen werden sollte (z. B. das Zurückspulen oder Formatieren eines Bandes).
Es gibt hervorragende Handles für das Gerät (CREATEs).
Der Speicherklassentreiber schlägt möglicherweise auch eine Abfrage-Entfernungsanforderung fehl, wenn das Gerät als Absturzabbild beansprucht wird, da das Entfernen eines solchen Geräts absturzabbild deaktiviert.
Wenn der Speicherklassentreiber als Antwort auf eine Abfrage zum Entfernen STATUS_SUCCESS zurückgibt, ruft der PnP-Manager die DispatchPnP-Routine des Klassentreibers mit einer PnP-Entfernungsanforderung (IRP_MJ_PNP mit IRP_MN_REMOVE_DEVICE) auf. Die DispatchPnP-Routine des Speicherklassentreibers ruft entweder eine interne RemoveDevice-Routine auf oder implementiert dieselbe Funktionalität inline.
Die RemoveDevice-Routine eines Speicherklassentreibers muss die folgenden Schritte ausführen:
Geben Sie alle ausstehenden Ressourcen wie Arbeitsspeicher oder Ereignisse frei, die vom Treiber zugewiesen werden.
Löschen Sie ggf. vom Treiber erstellte symbolische Links.
Löschen Sie das Geräteobjekt (FDO).
Leiten Sie die Anforderung an den nächstniedrigen Treiber weiter.
Wenn der Speicherklassentreiber beim Start PDOs erstellt hat (z. B. zur Darstellung von Partitionen auf einem partitionierten Mediengerät), wurden diese PDOs bereits entfernt, wenn der PnP-Manager die Entfernungsanforderung an den Speicherklassentreiber sendet.
Selbst nachdem ein Geräteobjekt gelöscht wurde, bleibt das Geräteobjekt im System erhalten, bis seine Verweisanzahl 0 erreicht hat, und verschwindet dann im Hintergrund. Ein Speicherklassentreiber darf nicht versuchen, den Geräteobjektzeiger zu verwenden, nachdem das Geräteobjekt gelöscht wurde.
Weitere Informationen zum Behandeln einer Entfernungsanforderung finden Sie unter Entfernen eines Geräts.