Share via


Entladen der Routineumgebung

Das Betriebssystem entladen einen Treiber, wenn der Treiber ersetzt wird oder wenn alle Geräte, die von den Treiberdiensten entfernt wurden, entfernt wurden. Der PnP-Manager ruft die Entladeroutine eines PnP-Treibers auf, wenn der Treiber keine Geräteobjekte mehr hat, nachdem er eine IRP_MN_REMOVE_DEVICE-Anforderung verarbeitet hat.

Zu Beginn der Entladungssequenz markiert der E/A-Manager oder PnP-Manager das Treiberobjekt und seine Geräteobjekte als "Entladen ausstehend". Nachdem ein Treiber als "Entladen ausstehend" markiert wurde, können keine zusätzlichen Treiber an diesen Treiber angefügt werden, noch können zusätzliche Verweise auf die Geräteobjekte des Treibers vorgenommen werden. Der Treiber kann ausstehende IRPs abschließen, aber das System sendet keine neuen IRPs an den Treiber.

Der E/A-Manager ruft die Entladeroutine eines Treibers auf, wenn alle folgenden Punkte zutrifft:

  • Es verbleiben keine Verweise auf die vom Treiber erstellten Geräteobjekte. Mit anderen Worten, keine Dateien, die dem zugrunde liegenden Gerät zugeordnet sind, können geöffnet werden, noch können IRPs für die Geräteobjekte des Treibers ausstehen.

  • An diesen Treiber sind keine anderen Treiber angefügt.

  • Der Treiber hat IoUnregisterPlugPlayNotification aufgerufen, um die Registrierung aller PnP-Benachrichtigungen aufzuheben, für die er sich zuvor registriert hat.

Beachten Sie, dass die Entladen-Routine nicht aufgerufen wird, wenn die DriverEntry-Routine eines Treibers einen Fehler status zurückgibt. In diesem Fall gibt der E/A-Manager einfach den vom Treiber belegten Speicherplatz frei.

Weder der PnP-Manager noch der E/A-Manager ruft Zum Zeitpunkt des Herunterfahrens des Systems Entladeroutinen auf. Ein Treiber, der die Herunterfahrensverarbeitung ausführen muss, sollte eine DispatchShutdown-Routine registrieren.