Registrieren und Aktivieren einer IoTimer-Routine
Jeder Treiber kann eine IoTimer-Routine registrieren, nachdem er ein oder mehrere Geräteobjekte erstellt hat, indem er IoInitializeTimer aufruft. Der Treiber kann dann den Timer starten, indem er IoStartTimer aufruft. Die folgende Abbildung veranschaulicht diese Aufrufe.
Nach dem Aufrufen von IoCreateDevice zum Erstellen von Geräteobjekten kann ein Treiber IoInitializeTimer mit dem Einstiegspunkt seiner IoTimer-Routine aufrufen, zusammen mit Zeigern auf ein vom Treiber erstelltes Geräteobjekt und einen Kontextbereich, in dem der Treiber den Kontext verwaltet, den seine IoTimer-Routine verwendet. Der E/A-Manager ordnet das Geräteobjekt einem vom Kernel zugeordneten Timerobjekt zu und richtet das Timerobjekt so ein, dass jede Sekunde ein Timeout erfolgt.
Nachdem der Treiber IoStartTimer aufgerufen hat, wird seine IoTimer-Routine einmal pro Sekunde aufgerufen, bis der Treiber IoStopTimer aufruft. Ein Treiber kann Aufrufe seiner IoTimer-Routine mit IoStartTimer wiederherstellen. (Wenn ein Treiber IoStartTimer aufruft, stellt er häufig den Geräteobjektzeiger bereit, der vom E/A-Stapelspeicherort des aktuellen IRP abgerufen wurde.)
Beim Einstieg wird die IoTimer-Routine den Geräteobjektzeiger zusammen mit dem Kontextzeiger übergeben, den der Treiber beim Aufrufen von IoInitializeTimer bereitgestellt hat.
Treiber dürfen IoStopTimer nicht innerhalb einer IoTimer-Routine aufrufen.
Der E/A-Manager hebt die Registrierung der Timerroutine für ein angegebenes Geräteobjekt auf und gibt den zugeordneten Kontext frei, wenn der Treiber IoDeleteDevice aufruft.