Функция KeCancelTimer (wdm.h)

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

Синтаксис

BOOLEAN KeCancelTimer(
  [in, out] PKTIMER unnamedParam1
);

Параметры

[in, out] unnamedParam1

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

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

Если указанный объект таймера находится в системной очереди таймера, KeCancelTimer возвращает значение TRUE.

Комментарии

Если объект таймера находится в очереди системного таймера, он удаляется из очереди. Если объект DPC связан с таймером, он также отменяется. В противном случае операция не выполняется.

Подпрограмма возвращает значение TRUE , если таймер по-прежнему находится в очереди таймера. Непериодический таймер удаляется из системной очереди по истечении срока его действия. Таким образом, для непериодических таймеров KeCancelTimer возвращает значение FALSE , если таймер DPC был поставлен в очередь. Периодические таймеры всегда находятся в очереди таймеров, поэтому KeCancelTimer всегда возвращает значение TRUE для периодических таймеров.

Обратите внимание, что DPC, который уже выполняется, выполняется до завершения. Драйвер должен убедиться, что DPC завершен, прежде чем освобождать все ресурсы, используемые DPC. Для непериодического таймера можно использовать примитивы синхронизации, например объекты событий, для синхронизации между драйвером и DPC. Драйвер может проверка код возврата KeCancelTimer, чтобы определить, запущен ли DPC. Если это так, DPC может сообщить о событии перед выходом, а драйвер может ждать, пока это событие будет сброшено в состояние без сигнала.

Так как для периодических таймеров KeCancelTimer всегда возвращает значение TRUE, драйверы должны использовать другой метод, чтобы дождаться завершения DPC. Используйте подпрограмму KeFlushQueuedDpcs для блокировки до выполнения DPC.

Драйверам не нужно синхронизировать данные, хранящиеся в глобальных переменных или расширениях объектов драйвера. Система автоматически вызывает KeFlushQueuedDpcs перед освобождением любого из этих регионов.

Дополнительные сведения об объектах таймера см. в разделе Объекты таймера и DPC.

Требования

Требование Значение
Минимальная версия клиента Доступно начиная с Windows 2000.
Целевая платформа Универсальное
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
Правила соответствия DDI HwStorPortProhibitedDIs(storport), IrqlKeDispatchLte(wdm)

См. также раздел

KeInitializeTimer

KeReadStateTimer

KeSetTimer