Freigeben über


Unload-Routineumgebung

Das Betriebssystem entlädt einen Treiber, wenn der Treiber ersetzt wird oder wenn alle Geräte, die vom Treiber bedient werden, entfernt wurden. Der PnP-Manager ruft die Unload-Routine eines PnP-Treibers auf, wenn der Treiber nach der Verarbeitung einer IRP_MN_REMOVE_DEVICE Anforderung keine weiteren Geräteobjekte aufweist.

Am Anfang der Entladungssequenz kennzeichnet der E/A-Manager oder PnP-Manager das Treiberobjekt und dessen Geräteobjekte als "Entladen ausstehend". Nachdem ein Treiber als "Entladen ausstehend" gekennzeichnet wurde, können keine zusätzlichen Treiber an diesen Treiber angefügt werden, und es können auch keine zusätzlichen Verweise auf die Geräteobjekte des Treibers vorgenommen werden. Der Treiber kann herausragende IRPs abschließen, aber das System sendet keine neuen IRPs an den Treiber.

Der E/A-Manager ruft die Unload-Routine eines Treibers auf, wenn alle folgenden Bedingungen zutreffen:

  • Es bleiben keine Verweise auf eines der Geräteobjekte, die der Treiber erstellt hat. Mit anderen Worten, es dürfen keine Dateien geöffnet sein, die dem zugrunde liegenden Gerät zugeordnet sind, und es dürfen keine IRPs für die Geräteobjekte des Treibers ausstehen.

  • Keine weiteren Treiber sind mit diesem Treiber verbunden.

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

Beachten Sie, dass die Unload-Routine nicht aufgerufen wird, wenn die DriverEntry-Routine eines Treibers einen Fehlerstatus 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 Unload-Routinen während des Herunterfahrens des Systems auf. Ein Treiber, der die Verarbeitung des Herunterfahrens durchführen muss, sollte eine DispatchShutdown-Routine registrieren.