KeDelayExecutionThread 函数 (wdm.h)

KeDelayExecutionThread 例程将当前线程置于指定间隔的可警报或不可操作的等待状态。

语法

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

参数

[in] WaitMode

指定调用方正在等待的处理器模式,可以是 KernelModeUserMode。 较低级别的驱动程序应指定 KernelMode

[in] Alertable

如果等待是可警报的,则指定 TRUE 。 较低级别的驱动程序应指定 FALSE

[in] Interval

指定以 100 纳秒为单位的绝对时间或相对时间,等待将发生。 负值表示相对时间。 绝对过期时间跟踪系统时间的任何更改;相对过期时间不受系统时间更改的影响。

返回值

KeDelayExecutionThread 返回以下值之一,该值描述延迟的完成方式:

返回代码 说明
STATUS_SUCCESS
延迟已完成,因为指定的间隔已过。
STATUS_ALERTED
延迟已完成,因为线程已发出警报。
STATUS_USER_APC
用户模式 APC 在指定的 间隔 过期之前传递。
 

请注意,NT_SUCCESS宏会将所有这些状态值识别为“成功”值。

注解

计算过期时间,当前线程处于等待状态。 当指定的间隔已传递时,线程将退出等待状态,并处于就绪状态,因此有资格执行。

Alertable 参数确定线程何时可以发出警报及其等待状态,从而中止。 有关详细信息,请参阅 Waits 和 APC

如果 WaitMode 参数为 UserMode,则可以在等待期间交换内核堆栈。 因此,调用方在使用 UserMode 参数调用 KeDelayExecutionThread,绝不能尝试在堆栈上传递参数。

WaitMode 参数为 UserModeAlertableTRUE 时,检查 KeDelayExecutionThread 的返回值尤其重要,因为 KeDelayExecutionThread 可能提前返回状态为 STATUS_USER_APC 或 STATUS_ALERTED。

用户可中止的所有长期等待应为 UserMode 等待, 并且可警报 应设置为 FALSE

如果可能,警报应设置为 FALSE,并且 WaitMode 应设置为 KernelMode,以减少驱动程序复杂性。 此准则的主要例外是等待是长期等待。

延迟的到期时间表示为要过期的绝对时间,或相对于当前系统时间的时间。 如果 Interval 参数值为正值,则过期时间是绝对时间。 如果此值为负值,则过期时间是相对时间。

过期时间相对于系统时钟进行度量,操作系统可以检测计时器过期时间的准确度受系统时钟粒度的限制。 有关详细信息,请参阅 计时器准确性

要求

   
最低受支持的客户端 从 Windows 2000 开始可用。
目标平台 通用
标头 wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL
DDI 符合性规则 HwStorPortProhibitedDDIs (storport) IrqlKeApcLte1 (wdm) PowerIrpDDis (wdm)

另请参阅

KeQuerySystemTime