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 |
---|---|
|
O atraso foi concluído porque o intervalo especificado passou. |
|
O atraso foi concluído porque o thread foi alertado. |
|
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) |