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 |
---|---|
|
Ritardo completato perché è trascorso l'intervallo specificato. |
|
Ritardo completato perché il thread è stato avvisato. |
|
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) |