Condividi tramite


Scrittura di una routine di reinizializzazione

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

Ad esempio, il driver di classe della tastiera del sistema, kbdclass, supporta sia le porte PnP che le porte della tastiera legacy. Se un sistema include una o più porte legacy che il gestore PnP non è in grado di rilevare, il driver della classe tastiera deve comunque creare un oggetto dispositivo per ogni porta e sovrapporsi ai driver di livello inferiore per la porta. Di conseguenza, il driver di classe ha una routine di reinizializzare da chiamare dopo il DriverEntry e routine AddDevice sono state chiamate e sono stati caricati altri driver. Il Reinizializzare routine rileva la porta, crea un oggetto dispositivo per esso e layera il 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 se stessa, il che fa sì che la routine venga rilocalizzata. Uno dei parametri per Reinitialize 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 Reinizializzare utilizza 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 Reinizializzare.

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

In genere, un driver con un reinizializzare routine è un driver di livello superiore che controlla sia i dispositivi PnP che i dispositivi legacy. Oltre a creare oggetti dispositivo per i dispositivi rilevati dal manager PnP (e per cui il manager PnP chiama la routine addDevice AddDevice del driver), il driver deve anche creare oggetti dispositivo per i dispositivi legacy che il manager PnP non enumera. La routine di reinizializzazione crea gli oggetti dispositivo e stratifica il driver sul driver immediatamente inferiore del dispositivo sottostante.

Se un driver ha una routine Reinitialize, si inizializza secondo gli stessi passaggi fondamentali descritti in Scrivere una routine DriverEntrye ha anche gli stessi requisiti fondamentali della routine DriverEntry.