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


функция обратного вызова IO_TIMER_ROUTINE (wdm.h)

Подпрограмма IoTimer — это DPC, который при регистрации вызывается один раз в секунду.

Синтаксис

IO_TIMER_ROUTINE IoTimerRoutine;

void IoTimerRoutine(
  [in]           _DEVICE_OBJECT *DeviceObject,
  [in, optional] PVOID Context
)
{...}

Параметры

[in] DeviceObject

Указатель на структуру DEVICE_OBJECT , предоставленный вызывающим. Это объект устройства для целевого устройства, ранее созданный подпрограммой AddDevice драйвера.

[in, optional] Context

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

Возвращаемое значение

None

Remarks

Подпрограмма IoTimer драйвера выполняется в контексте DPC в irQL = DISPATCH_LEVEL.

Драйвер может связать подпрограмму IoTimer с каждым объектом устройства, который он создает. (Можно использовать одну подпрограмму IoTimer с несколькими объектами устройства или отдельную подпрограмму для каждого объекта устройства.) Чтобы зарегистрировать подпрограмму IoTimer , драйвер должен вызвать IoInitializeTimer, указав адрес подпрограммы IoTimer и указатель объекта устройства.

Чтобы поставить в очередь подпрограмму IoTimer для выполнения, подпрограмма драйвера должна вызвать IoStartTimer. Система вызывает подпрограмму IoTimer один раз в секунду, пока драйвер не вызовет IoStopTimer.

Дополнительные сведения о процедурах IoTimer см. в разделе Подпрограммы IoTimer.

Примеры

Чтобы определить подпрограмму обратного вызова IoTimer , необходимо сначала предоставить объявление функции, определяющее тип определяемой процедуры обратного вызова. Windows предоставляет набор типов функций обратного вызова для драйверов. Объявление функции с помощью типов функций обратного вызова помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки, и это требование для написания драйверов для операционной системы Windows.

Например, чтобы определить подпрограмму обратного вызова IoTimer с именем MyIoTimer, используйте тип IO_TIMER_ROUTINE, как показано в следующем примере кода:

IO_TIMER_ROUTINE MyIoTimer;

Затем реализуйте процедуру обратного вызова следующим образом:

_Use_decl_annotations_
VOID
  MyIoTimer(
    struct DEVICE_OBJECT  *DeviceObject,
    PVOID  Context
    )
  {
      // Function body
  }

Тип функции IO_TIMER_ROUTINE определен в файле заголовка Wdm.h. Чтобы более точно определить ошибки при запуске средств анализа кода, не забудьте добавить заметку _Use_decl_annotations_ в определение функции. Заметка _Use_decl_annotations_ гарантирует, что будут использоваться заметки, которые применяются к типу функции IO_TIMER_ROUTINE в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в статье Объявление функций с помощью типов ролей функций для драйверов WDM. Сведения о _Use_decl_annotations_см. в статье Поведение функции с заметками.

Требования

Требование Значение
Целевая платформа Персональный компьютер
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
IRQL Вызывается по адресу DISPATCH_LEVEL (см. раздел "Замечания").