Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
A partire da Windows 8.1, la routine ExDeleteTimer elimina un oggetto timer creato dalla routine ExAllocateTimer . Questo oggetto timer è una struttura EX_TIMER allocata dal sistema i cui membri sono opachi per i driver. Prima dell'eliminazione di un oggetto timer, ExDeleteTimer disabilita ulteriori operazioni timer sull'oggetto e annulla o completa qualsiasi operazione in sospeso sull'oggetto che potrebbe essere in corso.
Dopo che un driver chiama ExDeleteTimer, questa routine esegue diversi passaggi per assicurarsi che possa eliminare in modo sicuro l'oggetto timer. Prima di tutto, ExDeleteTimer contrassegna l'oggetto timer come disabilitato per impedire al driver di avviare una nuova operazione timer che usa l'oggetto . Dopo aver disabilitato l'oggetto timer, una chiamata alla routine ExSetTimer o ExCancelTimer restituisce immediatamente FALSE e non esegue alcuna operazione. Inoltre, una seconda chiamata a ExDeleteTimer restituisceFALSE e non esegue alcuna operazione.
Successivamente, ExDeleteTimer controlla se un timer è ancora in sospeso da una chiamata precedente a ExDeleteTimer. La disabilitazione di un oggetto timer non annulla un timer impostato prima della disabilitazione dell'oggetto. In uno dei due casi seguenti, un timer impostato in precedenza potrebbe scadere dopo che l'oggetto timer è disabilitato:
- Il timer è periodico.
- Il timer è one-shot (o nonperiodico) e non è ancora scaduto.
Un timer periodico non può mai scadere più volte dopo che l'oggetto timer è disabilitato.
Se il driver implementa una routine di callback ExTimerCallback, si garantisce che il parametro Timer a questa routine sia sempre un puntatore valido al timer (una struttura EX_TIMER), anche se il timer scade dopo che l'oggetto timer è stato disabilitato.
Se non è in sospeso alcun timer, ExDeleteTimer elimina l'oggetto timer e restituisce senza attendere.
Se un timer è in sospeso quando viene chiamato ExDeleteTimer , i valori dei parametri Cancel e Wait forniti dal driver a questa routine controllano il comportamento della routine. Il parametro Cancel indica a ExDeleteTimer se tentare di annullare un timer in sospeso. Il parametro Wait indica a ExDeleteTimer se attendere la restituzione fino all'eliminazione dell'oggetto timer.
Se Cancel è FALSE (in questo caso, Wait deve essere FALSE) e un timer è in sospeso, ExDeleteTimer consente la scadenza del timer prima dell'eliminazione dell'oggetto timer. In questo caso, ExDeleteTimer contrassegna l'oggetto timer per indicare che deve essere eliminato dopo la scadenza del timer in sospeso (e l'ultimo callback alla routine ExTimerCallback termina). ExDeleteTimer restituisce quindi senza attendere che il timer termini la sua scadenza o che l'oggetto venga eliminato.
Se Cancel è TRUE, ExDeleteTimer tenta di annullare un timer in sospeso prima della scadenza. ExDeleteTimer restituisceTRUE se annulla correttamente il timer. ExDeleteTimer restituisceFALSE se non è in grado di annullare il timer, vale a dire il caso di un timer monotono che è già scaduto o è in fase di scadenza. ExDeleteTimer restituisceanche FALSE se il timer (occasionale o periodico) è stato annullato prima della chiamata di ExDeleteTimer o se il timer non è mai stato impostato.
Se Cancel è TRUE e Wait è FALSE, ExDeleteTimer non blocca mai il thread chiamante. Se l'oggetto timer non può essere eliminato immediatamente, ExDeleteTimer contrassegna l'oggetto timer per indicare che deve essere eliminato al termine della scadenza del timer in sospeso e restituisce immediatamente senza attendere che il timer scada o che l'oggetto venga eliminato.
Se Cancel e Wait sono entrambi TRUE, ExDeleteTimer blocca il thread chiamante se l'oggetto timer non può essere eliminato immediatamente. ExDeleteTimer attende, se necessario, affinché il timer finisca di scadere e per il completamento di qualsiasi callback a una routine ExTimerCallback implementata dal driver. Successivamente, ExDeleteTimer elimina l'oggetto timer e chiama la routine ExTimerDeleteCallback , se il driver implementa questa routine. Infine, ExDeleteTimer restituisce.
Un driver può chiamare ExDeleteTimer dalla routine ExTimerCallback del driver, che viene eseguita in IRQL = DISPATCH_LEVEL, ma il driver deve impostare il parametro Wait in questa chiamata su FALSE.
Come opzione, un driver può implementare una routine di callback exTimerDeleteCallback eseguita dopo l'eliminazione di un oggetto timer. In genere, una routine ExTimerDeleteCallback libera tutte le risorse di sistema allocate al driver da usare con l'oggetto timer.
ExDeleteTimer pianifica l'esecuzione di una routine ExTimerDeleteCallback implementata dal driver dopo l'eliminazione dell'oggetto timer, in cui il puntatore a questo oggetto non è più valido. Se il parametro Wait è TRUE nella chiamata a ExDeleteTimer , il callback alla routine ExTimerDeleteCallback termina prima che ExDeleteTimer restituisca. Se Wait è FALSE, la routine ExTimerDeleteCallback potrebbe essere eseguita prima o dopo la restituzione di ExDeleteTimer .
Per altre informazioni, vedere Routine timer exXxxe oggetti EX_TIMER.