Condividi tramite


Errori nella gestione delle operazioni di pulizia e chiusura

Alcuni driver non riescono a distinguere le attività necessarie nelle routine DispatchCleanup e DispatchClose . Il gestore di I/O chiama la routine DispatchCleanup di un driver quando l'ultimo handle a un oggetto file viene chiuso. La routine DispatchClose viene chiamata quando l'ultimo riferimento viene rilasciato dall'oggetto file. Un driver non deve tentare di liberare risorse nella routine DispatchCleanup collegata a un oggetto file o potrebbe essere usato da altre routine DispatchXxx.

Quando si chiamano routine dispatch, il gestore di I/O contiene un riferimento all'oggetto file per le normali chiamate di I/O. Di conseguenza, un driver può ricevere richieste di I/O per un oggetto file dopo la chiamata della routine DispatchCleanup , ma prima della chiamata della routine DispatchClose . Ad esempio, un chiamante in modalità utente potrebbe chiudere l'handle di file mentre è in corso una richiesta di gestione di I/O da un altro thread. Se il driver ha eliminato o liberato risorse necessarie prima che il gestore di I/O chiami la routine DispatchClose , potrebbero verificarsi riferimenti puntatori non validi e altri problemi.