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


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

Подпрограмма KeDelayExecutionThread переводит текущий поток в состояние ожидания с оповещением или без изменений в течение указанного интервала.

Синтаксис

NTSTATUS KeDelayExecutionThread(
  [in] KPROCESSOR_MODE WaitMode,
  [in] BOOLEAN         Alertable,
  [in] PLARGE_INTEGER  Interval
);

Параметры

[in] WaitMode

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

[in] Alertable

Указывает значение TRUE , если ожидание может быть оповещено. Драйверы более низкого уровня должны указывать значение FALSE.

[in] Interval

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

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

KeDelayExecutionThread возвращает одно из следующих значений, описывающих способ завершения задержки:

Код возврата Описание
STATUS_SUCCESS
Задержка завершена, так как истек указанный интервал.
STATUS_ALERTED
Задержка завершена, так как поток был оповещен.
STATUS_USER_APC
APC в пользовательском режиме был доставлен до истечения указанного интервала .
 

Обратите внимание, что макрос NT_SUCCESS распознает все эти значения состояния как "успешно".

Комментарии

Время окончания срока действия вычисляется, и текущий поток переводится в состояние ожидания. После прохождения указанного интервала поток выходит из состояния ожидания и переводится в состояние готовности, что становится допустимым для выполнения.

Параметр Alertable определяет, когда поток может быть оповещен и его состояние ожидания, следовательно, прервано. Дополнительные сведения см. в разделе Ожидания и APC.

Если параметр WaitMode имеет значение UserMode, стек ядра можно переключить во время ожидания. Следовательно, вызывающий объект не должен пытаться передать параметры в стеке при вызове KeDelayExecutionThread с помощью аргумента UserMode .

Особенно важно проверка возвращаемое значение KeDelayExecutionThread, если параметр WaitMode имеет значение UserMode или Alertable имеет значение TRUE, так как KeDelayExecutionThread может возвращать раннее время с состоянием STATUS_USER_APC или STATUS_ALERTED.

Все долгосрочные ожидания, которые могут быть прерваны пользователем, должны иметь значение UserMode waits, а Alertable должно иметь значение FALSE.

По возможности для параметра Alertable должно быть задано значение FALSE , а для Параметра WaitModeзначение KernelMode, чтобы снизить сложность драйвера. Основное исключение из этого руководства заключается в том, что ожидание является долгосрочным.

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

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

Требования

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

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

KeQuerySystemTime