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