Compartilhar via


Função KeDelayExecutionThread (wdm.h)

A rotina KeDelayExecutionThread coloca o thread atual em um estado de espera alertável ou não inerte para um intervalo especificado.

Sintaxe

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

Parâmetros

[in] WaitMode

Especifica o modo de processador no qual o chamador está aguardando, que pode ser KernelMode ou UserMode. Drivers de nível inferior devem especificar KernelMode.

[in] Alertable

Especifica TRUE se a espera for alertável. Drivers de nível inferior devem especificar FALSE.

[in] Interval

Especifica o tempo absoluto ou relativo, em unidades de 100 nanossegundos, para o qual a espera deve ocorrer. Um valor negativo indica tempo relativo. Os tempos de expiração absolutos acompanham as alterações no tempo do sistema; os tempos de expiração relativos não são afetados pelas alterações de tempo do sistema.

Retornar valor

KeDelayExecutionThread retorna um dos seguintes valores que descreve como o atraso foi concluído:

Código de retorno Descrição
STATUS_SUCCESS
O atraso foi concluído porque o intervalo especificado passou.
STATUS_ALERTED
O atraso foi concluído porque o thread foi alertado.
STATUS_USER_APC
Um APC no modo de usuário foi entregue antes do intervalo especificado expirar.
 

Observe que a macro NT_SUCCESS reconhece todos esses valores status como valores de "êxito".

Comentários

O tempo de expiração é calculado e o thread atual é colocado em um estado de espera. Quando o intervalo especificado tiver passado, o thread sairá do estado de espera e será colocado no estado pronto, tornando-se qualificado para execução.

O parâmetro Alertable determina quando o thread pode ser alertado e seu estado de espera, consequentemente, anulado. Para obter informações adicionais, consulte Esperas e APCs.

Se o parâmetro WaitMode for UserMode, a pilha de kernel poderá ser trocada durante a espera. Consequentemente, um chamador nunca deve tentar passar parâmetros na pilha ao chamar KeDelayExecutionThread usando o argumento UserMode .

É especialmente importante marcar o valor retornado de KeDelayExecutionThread quando o parâmetro WaitMode for UserMode ou Alertable for TRUE, pois KeDelayExecutionThread pode retornar antecipadamente com um status de STATUS_USER_APC ou STATUS_ALERTED.

Todas as esperas de longo prazo que podem ser anuladas por um usuário devem ser esperas usermode e Alertable devem ser definidas como FALSE.

Sempre que possível, Alertable deve ser definido como FALSE e WaitMode deve ser definido como KernelMode, a fim de reduzir a complexidade do driver. A exceção principal a essa diretriz é quando a espera é uma espera de longo prazo.

O tempo de expiração do atraso é expresso como um tempo absoluto em que o atraso deve expirar ou um tempo relativo ao tempo atual do sistema. Se o valor do parâmetro Interval for positivo, o tempo de expiração será um tempo absoluto. Se esse valor for negativo, o tempo de expiração será um tempo relativo.

Os tempos de expiração são medidos em relação ao relógio do sistema e a precisão com que o sistema operacional pode detectar quando um temporizador expira é limitada pela granularidade do relógio do sistema. Para obter mais informações, consulte Precisão do temporizador.

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível a partir do Windows 2000.
Plataforma de Destino Universal
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL
Regras de conformidade de DDI HwStorPortProhibitedDIs(storport), IrqlKeApcLte1(wdm), PowerIrpDDis(wdm)

Confira também

KeQuerySystemTime