Поделиться через


Регистрация и включение процедуры IoTimer

Любой драйвер может зарегистрировать подпрограмму IoTimer после создания одного или нескольких объектов устройства, вызвав IoInitializeTimer. Затем драйвер может запустить таймер, вызвав IoStartTimer. На следующем рисунке показаны эти вызовы.

схема, иллюстрирующая использование процедуры iotimer.

После вызова IoCreateDevice для создания объектов устройства драйвер может вызвать IoInitializeTimer с точкой входа своей подпрограммы IoTimer , а также указателями на созданный драйвером объект устройства и область контекста, в которой драйвер поддерживает любой контекст, который используется его подпрограммой IoTimer . Диспетчер ввода-вывода связывает объект устройства с объектом таймера, выделенным ядром, и настраивает для объекта таймера время ожидания каждую секунду.

После того как драйвер вызывает IoStartTimer, его подпрограмма IoTimer вызывается один раз в секунду, пока драйвер не вызовет IoStopTimer. Драйвер может повторно включить вызовы к своей подпрограмме IoTimer с помощью IoStartTimer. (Часто, когда драйвер вызывает IoStartTimer, он предоставляет указатель объекта устройства, полученный из расположения стека ввода-вывода текущего IRP.)

При входе подпрограмме IoTimer передается указатель объекта устройства вместе с указателем контекста, который драйвер указал при вызове IoInitializeTimer.

Драйверы не должны вызывать IoStopTimer из подпрограммы IoTimer .

Диспетчер ввода-вывода отменяет регистрацию подпрограммы таймера для указанного объекта устройства и освобождает связанный с ним контекст, когда драйвер вызывает IoDeleteDevice.