Freigeben über


Freigeben von Geräte- und Controllerobjekten

Bevor ein Treiber ein Gerät oder Controllerobjekt löscht, muss er seine Verweise auf externe Ressourcen freigeben, z. B. Zeiger auf Objekte anderer Treiber oder zum Unterbrechen von Objekten, die in der entsprechenden Geräte- oder Controllererweiterung gespeichert sind. Anschließend kann ioDeleteDevice für jedes Vom Treiber erstellte Geräteobjekt aufgerufen werden. Ein Nicht-WDM-Treiber, der zuvor IoCreateController genannt hat, muss auch IoDeleteController aufrufen.

Jedes vom Kernel definierte Objekt, für das der Treiber Speicher in einer Geräteerweiterung bereitstellt, wird automatisch freigegeben, wenn die Unload-RoutineIoDeleteDevice mit dem entsprechenden Geräteobjekt aufruft. Im Allgemeinen kann jedes Objekt, das von der DriverEntry - oder Reinitialize-Routine durch Aufrufen von KeInitializeXxx eingerichtet wurde, durch einen Aufruf von IoDeleteDevice freigegeben werden, wenn der Treiber Speicher für dieses Objekt in seiner Geräteerweiterung bereitgestellt hat. Wenn ein Treiber beispielsweise über eine CustomTimerDpc-Routine verfügt und Speicher für die erforderlichen DPC- und Timer-Objekte in seiner Geräteerweiterung bereitgestellt hat, gibt der Aufruf von IoDeleteDevice diese Systemressourcen frei.

Ebenso wird jedes vom Kernel definierte Objekt, für das der Treiber Speicher in einer Controllererweiterung bereitstellt, automatisch freigegeben, wenn die Unload-RoutineIoDeleteController mit dem entsprechenden Controllerobjekt aufruft.

Wenn die DriverEntry - oder Reitialize-Routine namens IoGetConfigurationInformation die Anzahl für einen bestimmten Gerätetyp erhöht, muss die Unload-Routine auch IoGetConfigurationInformation aufrufen und die Anzahl ihrer Geräte in der globalen Konfigurationsinformationsstruktur des E/A-Managers dekrementieren, während sie die entsprechenden Geräteobjekte löscht.

Bevor sie die Steuerung zurückgibt, ist eine Entladeroutine auch dafür verantwortlich, alle anderen vom Treiber zugewiesenen Ressourcen freizugeben, die noch nicht von anderen Treiberroutinen freigegeben wurden.