Partilhar via


Escrever uma rotina de reinicialização

Qualquer driver que precise se inicializar em estágios pode conter uma rotina de reinicialização . Uma rotina Reinitializar é chamada depois que a rotina DriverEntry retornou o controle e outros drivers se inicializaram. Normalmente, a rotina Reinitializar executa tarefas que devem ser feitas após o início de outro driver.

Por exemplo, o driver de classe de teclado do sistema, kbdclass, dá suporte a portas de teclado PnP e herdadas. Se um sistema incluir uma ou mais portas herdadas que o gerenciador PnP não pode detectar, o driver de classe de teclado deverá, no entanto, criar um objeto de dispositivo para cada porta e camada em si sobre drivers de nível inferior para a porta. Consequentemente, o driver de classe tem uma rotina Reinitializar a ser chamada depois que suas rotinas DriverEntry e AddDevice foram chamadas e outros drivers foram carregados. A rotina Reinitializar detecta a porta, cria um objeto de dispositivo para ela e camadas do driver sobre outros drivers de nível inferior para o dispositivo.

A rotina DriverEntry de um driver chama IoRegisterDriverReinitialization para enfileirar uma rotina de Reinicialização para execução. A rotina Reinitializar também pode chamar IoRegisterDriverReinitialization em si, o que faz com que a rotina seja requeuída. Um dos parâmetros para Reinicializar indica o número de vezes que foi chamado.

A chamada para IoRegisterDriverReinitialization pode incluir um ponteiro para dados de contexto definidos pelo driver, que o sistema fornece como entrada para Reinitializar. Se a rotina Reinitializar usar o registro, os dados de contexto deverão incluir o ponteiro RegistryPath que foi passado para a rotina DriverEntry porque esse ponteiro não é um parâmetro de entrada para a rotina Reinitializar .

A rotina Reinicializar não será chamada se DriverEntry não retornar STATUS_SUCCESS.

Normalmente, um driver com uma rotina Reinitializar é um driver de nível superior que controla dispositivos PnP e herdados. Além de criar objetos de dispositivo para os dispositivos que o gerenciador PnP detecta (e para os quais o gerenciador PnP chama a rotina AddDevice do driver), o driver também deve criar objetos de dispositivo para dispositivos herdados que o gerenciador PnP não enumera. A rotina Reinitializar cria esses objetos de dispositivo e camadas o driver sobre o driver mais baixo para o dispositivo subjacente.

Se um driver tiver uma rotina Reinitializar , ele será inicializado nas mesmas etapas básicas descritas em Escrever uma Rotina driverEntry e também terá os mesmos requisitos básicos de sua rotina driverEntry .