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


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

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

Синтаксис

BOOLEAN KeSetTimerEx(
  [in, out]      PKTIMER       Timer,
  [in]           LARGE_INTEGER DueTime,
  [in]           LONG          Period,
  [in, optional] PKDPC         Dpc
);

Параметры

[in, out] Timer

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

[in] DueTime

Указывает абсолютное или относительное время истечения срока действия таймера. Если значение параметра DueTime отрицательное, время окончания срока действия будет относительно текущего системного времени. В противном случае время окончания срока действия будет абсолютным. Время окончания срока действия выражается в единицах системного времени (100-наносекундные интервалы). Абсолютное время окончания срока действия отслеживает любые изменения системного времени; изменения системного времени не влияют на относительный срок действия.

[in] Period

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

[in, optional] Dpc

Указатель на объект DPC, инициализированный keInitializeDpc. Этот параметр является необязательным.

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

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

Комментарии

Подпрограмма KeSetTimerEx выполняет следующие действия:

  • Вычисляет срок действия.

  • Задает состояние таймера без сигнала.

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

  • Вставляет объект таймера в очередь системного таймера.

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

Время истечения срока действия измеряется относительно системных часов, а точность, с которой операционная система может определить, когда истекает таймер, ограничена степенью детализации системных часов. Дополнительные сведения см. в разделе Точность таймера.

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

Подпрограмма DPC не может освободить периодический таймер. Подпрограмма DPC может освободить непериодический таймер.

Обратите внимание, что периодический таймер автоматически перезапускается по истечении срока его действия. Таким образом, на многопроцессорном компьютере DPC для периодического таймера может работать одновременно на двух процессорах.

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

Драйверы должны отменить все активные таймеры в своих подпрограммах выгрузки . Используйте KeCancelTimer для отмены любых таймеров.

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

Требования

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

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

KeCancelTimer

KeInitializeDpc

KeInitializeTimer

KeInitializeTimerEx

KeReadStateTimer

KeWaitForMultipleObjects

KeWaitForSingleObject