Compartilhar via


Função KeDelayExecutionThread (wdm.h)

A rotina de 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 verdadeiro 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.

Valor de retorno

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 decorrido.
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 de especificado expirar.
 

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

Observações

O tempo de expiração é computado 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 elegível para execução.

O parâmetro alertável 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 verificar o valor retornado de KeDelayExecutionThread quando o parâmetro WaitMode é UserMode ou alertável é TRUE, porque 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 alertável devem ser definidas como FALSE.

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

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

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 de Precisão do Temporizador.

Requisitos

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

Consulte também

KeQuerySystemTime