Het schrijven van een herinitialisatieroutine
Elk stuurprogramma dat zichzelf in fasen moet initialiseren, kan een Opnieuw initialiseren routine bevatten. Een Reinitialize-routine wordt aangeroepen nadat de DriverEntry-routine de controle heeft geretourneerd en andere stuurprogramma's zichzelf hebben geïnitialiseerd. Normaal gesproken voert de routine opnieuw initialiseren taken uit die moeten worden uitgevoerd nadat een ander stuurprogramma is gestart.
Het toetsenbordklassestuurprogramma van het systeem, kbdclass, ondersteunt bijvoorbeeld zowel PnP- als verouderde toetsenbordpoorten. Als een systeem een of meer legacy-poorten bevat die de PnP-manager niet kan detecteren, moet het stuurprogramma van de toetsenbordklasse toch een apparaatobject maken voor elke poort en zichzelf boven stuurprogramma's op lager niveau voor de poort plaatsen. Daarom heeft het klassestuurprogramma een Reinitialize routine die moet worden aangeroepen nadat de DriverEntry- en AddDevice-routines zijn aangeroepen en andere stuurprogramma's zijn geladen. De heritialiseren routine detecteert de poort, maakt er een apparaatobject voor en plaatst het stuurprogramma boven andere stuurprogramma's op een lager niveau voor het apparaat.
De DriverEntry routine roept IoRegisterDriverReinitialization aan om een Reinitialize routine in de wachtrij te plaatsen voor uitvoering. De routine opnieuw initialiseren kan ook IoRegisterDriverReinitialization zelf aanroepen, waardoor de routine opnieuw in de wachtrij wordt geplaatst. Een van de parameters voor Opnieuw initialiseren geeft het aantal keren aan dat deze is aangeroepen.
De aanroep van IoRegisterDriverReinitialization kan een aanwijzer bevatten naar door het stuurprogramma gedefinieerde contextgegevens, die het systeem levert als invoer voor Reinitialize. Als de routine opnieuw initialiseren het register gebruikt, moeten de contextgegevens de RegistryPath aanwijzer bevatten die is doorgegeven aan de DriverEntry- routine, omdat deze aanwijzer geen invoerparameter is voor de routine opnieuw initialiseren.
De routine opnieuw initialiseren wordt niet aangeroepen als DriverEntry- geen STATUS_SUCCESS retourneert.
Meestal is een stuurprogramma met een Reinitialize routine een stuurprogramma op een hoger niveau is waarmee zowel PnP- als oudere apparaten worden beheerd. Naast het maken van apparaatobjecten voor de apparaten die de PnP-manager detecteert (en waarvoor de PnP-manager de AddDevice- routine aanroept), moet het stuurprogramma ook apparaatobjecten maken voor oudere apparaten die de PnP-manager niet opsommen. De routine Initieert opnieuw, waarbij deze apparaatobjecten worden gecreëerd en het stuurprogramma boven het lagere stuurprogramma voor het onderliggende apparaat wordt geplaatst.
Als een stuurprogramma een Herinitialiseert routine, initialiseert deze met dezelfde basisstappen zoals beschreven in Een DriverEntry Routineschrijven, en heeft dezelfde basisvereisten als de DriverEntry routine.