Condividi tramite


Rilascio di oggetti dispositivo e controller

Prima che un driver elimini un dispositivo o un oggetto controller, deve liberare le sue referenze a risorse esterne, come puntatori a oggetti di altri driver o a oggetti di gestione delle interruzioni, memorizzati nell'estensione del dispositivo o del controller corrispondente. Può quindi chiamare IoDeleteDevice per ogni oggetto dispositivo creato dal driver. Un driver non appartenente a WDM che in precedenza ha chiamato IoCreateController deve anche chiamare IoDeleteController.

Qualsiasi oggetto definito dal kernel per il quale il driver fornisce spazio di archiviazione in un'estensione del dispositivo viene liberato automaticamente quando la routine Unload chiama IoDeleteDevice con l'oggetto dispositivo corrispondente. In generale, qualsiasi oggetto configurato dalla routine DriverEntry o Reinitialize chiamando KeInitializeXxx può essere liberato da una chiamata a IoDeleteDevice se il driver ha fornito spazio di archiviazione per tale oggetto nell'estensione del dispositivo. Ad esempio, se un driver ha una routine CustomTimerDpc e ha fornito spazio di archiviazione per gli oggetti DPC e timer necessari nell'estensione del dispositivo, la chiamata a IoDeleteDevice rilascia queste risorse di sistema.

Analogamente, qualsiasi oggetto definito dal kernel per il quale il driver fornisce spazio di archiviazione in un'estensione del controller viene liberato automaticamente quando la routine Unload chiama IoDeleteController con l'oggetto controller corrispondente.

Se la routine DriverEntry o la routine Reinitialize ha chiamato IoGetConfigurationInformation per incrementare il conteggio per un determinato tipo di dispositivo, allora la routine Unload deve anche chiamare IoGetConfigurationInformation e decrementare il conteggio per i propri dispositivi nella struttura globale delle informazioni di configurazione del gestore I/O mentre elimina gli oggetti dispositivo corrispondenti.

Prima di restituire il controllo, una routine Scaricamento è anche responsabile della liberazione di altre risorse allocate dal driver che non sono ancora state liberate da altre routine del driver.