Función KeDelayExecutionThread (wdm.h)

La rutina KeDelayExecutionThread coloca el subproceso actual en un estado de espera alertable o nonalertable para un intervalo especificado.

Sintaxis

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

Parámetros

[in] WaitMode

Especifica el modo de procesador en el que el autor de la llamada está esperando, que puede ser KernelMode o UserMode. Los controladores de nivel inferior deben especificar KernelMode.

[in] Alertable

Especifica TRUE si la espera es alertable. Los controladores de nivel inferior deben especificar FALSE.

[in] Interval

Especifica el tiempo absoluto o relativo, en unidades de 100 nanosegundos, para los que se va a producir la espera. Un valor negativo indica el tiempo relativo. Los tiempos de expiración absolutos realizan un seguimiento de los cambios en la hora del sistema; los tiempos de expiración relativos no se ven afectados por los cambios de hora del sistema.

Valor devuelto

KeDelayExecutionThread devuelve uno de los siguientes valores que describe cómo se completó el retraso:

Código devuelto Descripción
STATUS_SUCCESS
Retraso completado porque ha transcurrido el intervalo especificado.
STATUS_ALERTED
Retraso completado porque se alertó al subproceso.
STATUS_USER_APC
Se entregó un APC en modo de usuario antes de que expire el intervalo especificado.
 

Tenga en cuenta que la macro NT_SUCCESS reconoce todos estos valores de estado como valores "correctos".

Comentarios

La hora de expiración se calcula y el subproceso actual se coloca en un estado de espera. Cuando se ha superado el intervalo especificado, el subproceso sale del estado de espera y se coloca en el estado listo, convirtiéndose en apto para su ejecución.

El parámetro Alertable determina cuándo se puede alertar al subproceso y su estado de espera, por lo tanto, anulado. Para obtener más información, consulte Waits and APCs (Esperas y API).

Si el parámetro WaitMode es UserMode, la pila del kernel se puede intercambiar durante la espera. Por lo tanto, un llamador nunca debe intentar pasar parámetros en la pila al llamar a KeDelayExecutionThread mediante el argumento UserMode .

Es especialmente importante comprobar el valor devuelto de KeDelayExecutionThread cuando el parámetro WaitMode es UserMode o Alertable es TRUE, ya que KeDelayExecutionThread puede devolverse temprano con un estado de STATUS_USER_APC o STATUS_ALERTED.

Todas las esperas a largo plazo que un usuario puede anular deben ser esperas UserMode y Alertable debe establecerse en FALSE.

Siempre que sea posible, Alertable debe establecerse en FALSE y WaitMode debe establecerse en KernelMode para reducir la complejidad del controlador. La excepción principal a esta guía es cuando la espera es una espera a largo plazo.

El tiempo de expiración del retraso se expresa como un momento absoluto en el que el retraso expira o una hora relativa a la hora actual del sistema. Si el valor del parámetro Interval es positivo, la hora de expiración es una hora absoluta. Si este valor es negativo, la hora de expiración es una hora relativa.

Los tiempos de expiración se miden en relación con el reloj del sistema y la precisión con la que el sistema operativo puede detectar cuándo expira un temporizador está limitado por la granularidad del reloj del sistema. Para obtener más información, consulte Precisión del temporizador.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible a partir de Windows 2000.
Plataforma de destino Universal
Encabezado wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL <= APC_LEVEL
Reglas de cumplimiento de DDI HwStorPortProhibitedDIs(storport), IrqlKeApcLte1(wdm), PowerIrpDDis(wdm)

Consulte también

KeQuerySystemTime