функция обратного вызова 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.
Возвращаемое значение
Никакой
Замечания
Программа 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 (include Wdm.h, Ntddk.h, Ntifs.h) |
IRQL | Вызывается в DISPATCH_LEVEL (см. раздел "Примечания"). |