Функция 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 возвращает одно из следующих значений, описывающих способ завершения задержки:
Код возврата | Описание |
---|---|
|
Задержка завершена, так как истек указанный интервал. |
|
Задержка завершена, так как поток был оповещен. |
|
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) |