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


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

Программа ExAllocateTimer выделяет и инициализирует объект таймера.

Синтаксис

PEX_TIMER ExAllocateTimer(
  [in, optional] PEXT_CALLBACK Callback,
  [in, optional] PVOID         CallbackContext,
  [in]           ULONG         Attributes
);

Параметры

[in, optional] Callback

Указатель на подпрограмму обратного вызова, реализованного драйвером, ExTimerCallback. Операционная система вызывает эту подпрограмму при истечении срока действия таймера. Этот параметр является необязательным и может быть null, если не требуется подпрограмма обратного вызова.

[in, optional] CallbackContext

Значение контекста для подпрограммы обратного вызова, на которое указывает параметр обратного вызова. Операционная система передает это значение в качестве параметра в подпрограмму обратного вызова ExTimerCallback, если он указан. Обычно этот параметр является указателем на определяемую вызывающим объектом структуру, содержащую сведения о контексте, используемые подпрограммой обратного вызова. Этот параметр является необязательным и может иметь значение NULL, если сведения о контексте не требуются.

[in] Attributes

Атрибуты таймера. Задайте для этого параметра значение нуля или битовое значение OR одного или нескольких битов флага таймера.

Бит флага таймера Описание
EX_TIMER_HIGH_RESOLUTION Таймер высокого разрешения. Сделайте таймер более точным, используя часы с более высоким разрешением для диска таймера.
EX_TIMER_NO_WAKE Таймер без пробуждения. До истечения срока действия таймера до истечения срока действия таймера и превышения допустимости задержки.
EX_TIMER_NOTIFICATION Таймер уведомлений. Сделайте таймер таймером уведомлений вместо таймера синхронизации. Если этот флаг не задан, таймер является таймером синхронизации.
 

Бит флага EX_TIMER_NOTIFICATION можно задать независимо от того, какие другие биты флагов заданы.

Биты флагов EX_TIMER_HIGH_RESOLUTION и EX_TIMER_NO_WAKE являются взаимоисключающими. Если вызывающий задает оба этих бита флага, выполняется проверка обычной ошибки.

Дополнительные сведения об атрибутах таймера см. в разделе "Примечания".

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

Эта подпрограмма возвращает указатель на структуру EX_TIMER, если вызов выполнен успешно. Эта структура — это объект таймера, выделенный и инициализированный подпрограммой. Если вызов завершается ошибкой, подпрограмма возвращает NULL.

Замечания

Эта подпрограмма возвращает указатель на новый объект таймера. Чтобы использовать таймер, вызывающий драйвер предоставляет этот указатель в последующих вызовах ExSetTimer, ExCancelTimerи подпрограмм exDeleteTimer. Если драйвер предоставляет указатель на подпрограмму ExTimerCallback обратный вызов в качестве входного параметра в подпрограмму ExAllocateTimer, операционная система передает этот объект таймера в качестве входного параметра в подпрограмму ExTimerCallback.

Таймер может быть таймером уведомлений или таймером синхронизации. Когда таймер уведомлений сигнализирует, все потоки ожидания удовлетворены. Состояние этого таймера остается сигналом до явного сброса. Когда истекает срок действия таймера синхронизации, его состояние будет сигнализировать до тех пор, пока не будет освобожден один поток ожидания. Затем таймер сбрасывается в состояние без сигнала.

Если бит флага EX_TIMER_HIGH_RESOLUTION задан в Атрибуты, операционная система увеличивает разрешение системных часов по мере необходимости, чтобы время истечения срока действия таймера соответствовало номинальному времени истечения срока действия, указанному в DueTime и периоде к подпрограмме ExSetTimer. Дополнительные сведения см. в High-Resolution таймерах.

Если бит флага EX_TIMER_NO_WAKE задан в Атрибуты, таймер не позволяет без необходимости просыпать процессор из состояния низкой мощности. Дополнительные сведения см. в No-Wake таймерах.

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

Параметр обратного вызова необязателен. Драйвер, который не предоставляет подпрограмму ExTimerCallback, может вместо этого инициировать операцию ожидания для объекта таймера. Поток драйвера может вызывать подпрограмму, например KeWaitForSingleObject или KeWaitForMultipleObjects ожидания истечения срока действия таймера. По истечении срока действия таймера объект таймера сигнализирует.

Дополнительные сведения см. в подпрограммах ExXxxTimer и EX_TIMER объектах.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Доступно начиная с Windows 8.1.
целевая платформа Всеобщий
заголовка wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
библиотеки Ntoskrnl.lib
IRQL <= DISPATCH_LEVEL

См. также

EX_TIMER

ExCancelTimer

ExDeleteTimer

ExSetTimer

ExTimerCallback