Registrando e habilitando uma rotina IoTimer
Qualquer driver pode registrar uma rotina IoTimer , depois de criar um ou mais objetos de dispositivo, chamando IoInitializeTimer. Em seguida, o driver pode iniciar o temporizador chamando IoStartTimer. A figura a seguir ilustra essas chamadas.
Depois de chamar IoCreateDevice para criar objetos de dispositivo, um driver pode chamar IoInitializeTimer com o ponto de entrada de sua rotina IoTimer , juntamente com ponteiros para um objeto de dispositivo criado pelo driver e uma área de contexto na qual o driver mantém qualquer contexto que sua rotina IoTimer usa. O gerenciador de E/S associa o objeto de dispositivo a um objeto de temporizador alocado por kernel e configura o objeto de temporizador para o tempo limite a cada segundo.
Depois que o driver chama IoStartTimer, sua rotina IoTimer é chamada uma vez por segundo até que o driver chame IoStopTimer. Um driver pode reabilitar chamadas para sua rotina IoTimer com IoStartTimer. (Frequentemente, quando um driver chama IoStartTimer, ele fornece o ponteiro de objeto do dispositivo obtido do local da pilha de E/S do IRP atual.)
Na entrada, a rotina IoTimer é passada pelo ponteiro do objeto do dispositivo, juntamente com o ponteiro de contexto que o driver forneceu quando chamou IoInitializeTimer.
Os drivers não devem chamar IoStopTimer de dentro de uma rotina IoTimer .
O gerenciador de E/S cancela o registro da rotina de temporizador de um objeto de dispositivo especificado e libera seu contexto associado quando o driver chama IoDeleteDevice.