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 参数确定线程何时可以发出警报,其等待状态因此中止。 有关其他信息,请参阅 等待和 APC

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

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

用户可中止的所有长期等待都应为 UserMode 等待, 而 Alertable 应设置为 FALSE

在可能的情况下, 应将 Alertable 设置为 FALSE ,而 WaitMode 应设置为 KernelMode,以降低驱动程序的复杂性。 此准则的主要例外是等待是长期等待。

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

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

要求

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

另请参阅

KeQuerySystemTime