Scrittura di una routine reinizializzare

Qualsiasi driver che deve inizializzare se stesso in fasi può contenere una routine Reinitialize . Una routine Reinitialize viene chiamata dopo che la routine DriverEntry ha restituito il controllo e altri driver sono stati inizializzati. In genere, la routine Reinitialize esegue attività che devono essere eseguite dopo l'avvio di un altro driver.

Ad esempio, il driver della classe della tastiera del sistema, kbdclass, supporta sia porte da tastiera PnP che legacy. Se un sistema include una o più porte legacy che il gestore PnP non può rilevare, il driver della classe di tastiera deve tuttavia creare un oggetto dispositivo per ogni porta e livello stesso su driver di livello inferiore per la porta. Di conseguenza, il driver di classe ha una routine Reinitialize da chiamare dopo che sono state chiamate le routine DriverEntry e AddDevice e altri driver sono stati caricati. La routine Reinitialize rileva la porta, crea un oggetto dispositivo per esso e esegue il layer del driver su altri driver di livello inferiore per il dispositivo.

La routine DriverEntry di un driver chiama IoRegisterDriverReinitialization per accodare una routine Reinitialize per l'esecuzione. La routine Reinitialize può anche chiamare IoRegisterDriverReinitialization stessa, che causa la ripetizione della routine. Uno dei parametri da reinizializzare indica il numero di volte in cui è stato chiamato.

La chiamata a IoRegisterDriverReinitialization può includere un puntatore ai dati di contesto definiti dal driver, che il sistema fornisce come input per Reinitialize. Se la routine Reinitialize usa il Registro di sistema, i dati di contesto devono includere il puntatore RegistryPath passato alla routine DriverEntry perché questo puntatore non è un parametro di input per la routine Reinitialize .

La routine Reinitialize non verrà chiamata se DriverEntry non restituisce STATUS_SUCCESS.

In genere, un driver con una routine Reinitialize è un driver di livello superiore che controlla sia i dispositivi PnP che legacy. Oltre alla creazione di oggetti dispositivo per i dispositivi rilevati dal gestore PnP (e per il quale il gestore PnP chiama la routine AddDevice del driver), il driver deve anche creare oggetti dispositivo per i dispositivi legacy che il gestore PnP non enumera. La routine Reinitialize crea tali oggetti dispositivo e livelli il driver sul driver inferiore successivo per il dispositivo sottostante.

Se un driver ha una routine Reinitialize, inizializza gli stessi passaggi di base descritti in Scrittura di una routine DriverEntry e ha anche gli stessi requisiti di base della routine DriverEntry .