Condividi tramite


Funzione KeDelayExecutionThread (wdm.h)

La routine KeDelayExecutionThread inserisce il thread corrente in uno stato di attesa avvisabile o non tolleranzabile per un intervallo specificato.

Sintassi

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

Parametri

[in] WaitMode

Specifica la modalità processore in cui il chiamante è in attesa, che può essere KernelMode o UserMode. I driver di livello inferiore devono specificare KernelMode.

[in] Alertable

Specifica TRUE se l'attesa è avvisabile. I driver di livello inferiore devono specificare FALSE.

[in] Interval

Specifica il tempo assoluto o relativo, in unità di 100 nanosecondi, per il quale deve verificarsi l'attesa. Un valore negativo indica il tempo relativo. I tempi di scadenza assoluti tengono traccia delle modifiche apportate al tempo di sistema; le ore di scadenza relative non sono interessate dalle modifiche apportate all'ora di sistema.

Valore restituito

KeDelayExecutionThread restituisce uno dei valori seguenti che descrivono come è stato completato il ritardo:

Codice restituito Descrizione
STATUS_SUCCESS
Ritardo completato perché è trascorso l'intervallo specificato.
STATUS_ALERTED
Ritardo completato perché il thread è stato avvisato.
STATUS_USER_APC
Un APC in modalità utente è stato recapitato prima della scadenza dell'intervallo specificato.
 

Si noti che la macro NT_SUCCESS riconosce tutti questi valori di stato come valori di "esito positivo".

Commenti

L'ora di scadenza viene calcolata e il thread corrente viene inserito in uno stato di attesa. Quando l'intervallo specificato è passato, il thread esce dallo stato di attesa e viene inserito nello stato pronto, diventando idoneo per l'esecuzione.

Il parametro Alertable determina quando il thread può essere avvisato e il relativo stato di attesa interrotto. Per altre informazioni, vedere Waits and APCs.For additional information, see Waits and APCs.

Se il parametro WaitMode è UserMode, lo stack del kernel può essere scambiato durante l'attesa. Di conseguenza, un chiamante non deve mai tentare di passare parametri nello stack quando si chiama KeDelayExecutionThread usando l'argomento UserMode .

È particolarmente importante controllare il valore restituito di KeDelayExecutionThread quando il parametro WaitMode è UserMode o Alertable è TRUE, perché KeDelayExecutionThread potrebbe restituire in anticipo uno stato di STATUS_USER_APC o STATUS_ALERTED.

Tutte le attese a lungo termine che possono essere interrotte da un utente devono essere attese UserMode e Alertable deve essere impostato su FALSE.

Dove possibile, Alertable deve essere impostato su FALSE e WaitMode deve essere impostato su KernelMode, per ridurre la complessità del driver. L'eccezione principale a questa linea guida è quando l'attesa è un'attesa a lungo termine.

L'ora di scadenza del ritardo viene espressa come un'ora assoluta in cui scade il ritardo o un'ora relativa all'ora di sistema corrente. Se il valore del parametro Interval è positivo, l'ora di scadenza è un'ora assoluta. Se questo valore è negativo, l'ora di scadenza è un'ora relativa.

Le ore di scadenza vengono misurate rispetto all'orologio di sistema e l'accuratezza con cui il sistema operativo può rilevare quando un timer scade è limitato dalla granularità dell'orologio di sistema. Per altre informazioni, vedere Accuratezza timer.

Requisiti

Requisito Valore
Client minimo supportato Disponibile a partire da Windows 2000.
Piattaforma di destinazione Universale
Intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL
Regole di conformità DDI HwStorPortProhibitedDDIs(storport), IrqlKeApcLte1(wdm), PowerIrpDDis(wdm)

Vedi anche

KeQuerySystemTime