функция обратного вызова EXT_CALLBACK (wdm.h)
Подпрограмма обратного вызова ExTimerCallback выполняется после истечения интервала времени объекта таймера EX_TIMER.
Синтаксис
EXT_CALLBACK ExtCallback;
void ExtCallback(
[in] PEX_TIMER Timer,
[in] PVOID Context
)
{...}
Параметры
[in] Timer
Указатель на структуру EX_TIMER . Эта структура представляет собой объект таймера, который ранее был выделен подпрограммой ExAllocateTimer .
[in] Context
Значение контекста, которое драйвер ранее предоставил в качестве параметра CallbackContext подпрограммы ExAllocateTimer .
Возвращаемое значение
None
Remarks
В качестве варианта драйвер может указать указатель на подпрограмму ExTimerCallback в параметре Callback , который драйвер передает в подпрограмму ExAllocateTimer . После истечения срока действия таймера операционная система вызывает подпрограмму ExTimerCallback .
Чтобы начать операцию таймера, драйвер передает объект таймера в качестве входного параметра в подпрограмму ExSetTimer . После истечения срока действия таймера операционная система планирует выполнение подпрограммы ExTimerCallback .
Объект таймера является объектом для ожидания. Поток драйвера может вызывать подпрограмму , например KeWaitForSingleObject или KeWaitForMultipleObjects , чтобы дождаться истечения срока действия таймера. По истечении срока действия таймера операционная система сообщает объекту таймера.
Таймер может быть отменен до истечения срока его действия. Драйвер может вызвать подпрограмму ExCancelTimer , чтобы явно отменить таймер. Если драйвер вызывает подпрограмму ExSetTimer для запуска нового таймера для объекта таймера до истечения срока действия ранее установленного таймера для этого объекта, этот вызов неявно отменяет предыдущий таймер, а затем запускает новый таймер.
Подпрограмма ExTimerCallback может вызывать подпрограмму, например ExSetTimer или ExDeleteTimer. Если подпрограмма ExTimerCallback вызывает ExDeleteTimer, параметр Wait , указанный в этом вызове, должен иметь значение FALSE. Дополнительные сведения см. в разделе Удаление объекта таймера System-Allocated.
В многопроцессорной системе обратные вызовы ExTimerCallback для двух последовательных истечения срока действия периодического таймера могут одновременно выполняться на двух разных процессорах.
Дополнительные сведения см. в статье Подпрограммы ExXxxTimer и объекты EX_TIMER.
Примеры
Чтобы определить подпрограмму обратного вызова ExTimerCallback , необходимо сначала предоставить объявление функции, определяющее тип определяемой процедуры обратного вызова. Windows предоставляет набор типов функций обратного вызова для драйверов. Объявление функции с помощью типа функции обратного вызова помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки, и это требование для написания драйверов для операционной системы Windows.
Например, чтобы определить подпрограмму обратного вызова ExTimerCallback с именем MyExTimerCallback
, используйте тип функции EXT_CALLBACK, как показано в следующем примере кода:
EXT_CALLBACK MyExTimerCallback;
Затем реализуйте процедуру обратного вызова следующим образом:
_Use_decl_annotations_
VOID
MyExTimerCallback(
PEX_TIMER Timer,
PVOID Context
)
{...}
Тип функции EXT_CALLBACK определен в файле заголовка Wdm.h. Чтобы более точно определить ошибки при запуске средств анализа кода, не забудьте добавить заметку _Use_decl_annotations_
в определение функции. Заметка _Use_decl_annotations_
гарантирует использование заметок, которые применяются к типу функции EXT_CALLBACK в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в статье Объявление функций с помощью типов ролей функций для драйверов WDM. Дополнительные сведения о см. в разделе Заметки о _Use_decl_annotations_
поведении функции.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Доступно начиная с Windows 8.1. |
Целевая платформа | Персональный компьютер |
Верхняя часть | wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h) |
IRQL | Вызывается на DISPATCH_LEVEL. |