Freigeben über


Entladeroutine des PnP-Treibers

Ein PnP-Treiber muss über eine Unload-Routine verfügen, die alle treiberspezifischen Ressourcen wie Arbeitsspeicher, Threads und Ereignisse entfernt, die von der DriverEntry-Routine erstellt werden. Wenn keine treiberspezifischen Ressourcen entfernt werden können, muss der Treiber weiterhin über eine Entladeroutine verfügen, aber er kann einfach zurückgegeben werden.

Die Entladeroutine eines Treibers kann jederzeit aufgerufen werden, nachdem alle Geräte des Treibers entfernt wurden. Der PnP-Manager ruft die Unload-Routine eines Treibers im Kontext eines Systemthreads unter IRQL = PASSIVE_LEVEL auf.

PnP-Treiber kostenlose gerätespezifische Ressourcen und Geräteobjekte als Reaktion auf PnP-Geräteentfernungs-IRPs. Der PnP-Manager sendet diese IRPs im Namen jedes PnP-Geräts, das er aufzählt, sowie aller root-enumerierten Legacygeräte, die ein Treiber mithilfe von IoReportDetectedDevice meldet.

Daher sind die Entladeroutinen von PnP-Treibern in der Regel einfach und bestehen häufig nur aus einer Return-Anweisung . Wenn der Treiber jedoch treiberweite Ressourcen in seiner DriverEntry-Routine zugeordnet hat, muss er die Zuordnung dieser Ressourcen in seiner Unload-Routine aufheben, sofern dies nicht bereits geschehen ist. Im Allgemeinen ist das Entladen eines PnP-Treibers ein synchroner Vorgang.

Der E/A-Manager gibt das Treiberobjekt und alle Treiberobjekterweiterungen frei, die der Treiber mithilfe von IoAllocateDriverObjectExtension zugewiesen hat.