Condividi tramite


Routine exXxxTimer e oggetti EX_TIMER

A partire da Windows 8.1, è disponibile un set completo di routine ExXxxTimer per gestire i timer. Queste routine usano oggetti timer basati sulla struttura EX_TIMER . Le routine ExXxxTimer sono sostituzioni per le routine KeXxxTimer , disponibili a partire da Windows 2000. I driver destinati a essere eseguiti solo in Windows 8.1 e versioni successive di Windows possono usare le routine Timer ExXxx anziché le routine KeXxxTimer. Windows 8.1 e versioni successive di Windows continuano a supportare le routine KeXxxTimer.

Le routine ExXxxTimer hanno tutte le funzionalità importanti fornite dalle routine KeXxxTimer . Inoltre, le routine ExXxxTimer supportano due tipi di timer, timer ad alta risoluzione e timer senza riattivazione, che non sono supportati dalle routine KeXxxTimer . I timer ad alta risoluzione sono timer i cui tempi di scadenza possono essere specificati con maggiore accuratezza rispetto a quelli dei timer la cui accuratezza è limitata dalla risoluzione predefinita dell'orologio di sistema. I timer senza riattivazione sono timer che evitano inutilmente di svegliare i processori da stati a basso consumo. Per altre informazioni, vedere gli argomenti seguenti:

Timer ad alta risoluzione

Timer di riattivazione no

A partire da Windows 8.1, sono disponibili le routine ExXxxTimer seguenti:

ExAllocateTimer

ExSetTimer

ExCancelTimer

ExDeleteTimer

La routine ExSetTimer può essere utilizzata anziché la routine KeSetTimer o KeSetTimerEx. La routine ExCancelTimer può essere utilizzata invece della routine KeCancelTimer .

Le routine ExAllocateTimer e ExDeleteTimer non hanno controparti KeXxxTimer dirette. Queste due routine allocano e liberano un oggetto timer. Questo oggetto timer è una struttura EX_TIMER allocata dal sistema i cui membri sono opachi ai driver. Al contrario, l'oggetto timer utilizzato dalle routine KeXxxTimer è una struttura KTIMER allocata dal driver. Il driver chiama la routine KeInitializeTimer o KeInitializeTimerEx per inizializzare questo oggetto. ExAllocateTimer inizializza gli oggetti timer allocati. Per altre informazioni su ExDeleteTimer, vedere Eliminazione di un oggetto timer System-Allocated.

EX_TIMER e le strutture KTIMER sono oggetti waitable. Dopo che un driver chiama ExSetTimer, KeSetTimer o KeSetTimerEx per impostare un timer, il driver può chiamare una routine come KeWaitForSingleObject o KeWaitForMultipleObjects per attendere la scadenza del timer. L'oggetto timer viene segnalato alla scadenza del timer. Come opzione, un driver può fornire un puntatore a una routine di callback ExTimerCallback o CustomTimerDpc implementata dal driver che il sistema operativo chiama dopo la scadenza del timer.

Le routine KeXxxTimer hanno due funzionalità che non sono fornite dalle routine ExXxxTimer , ma queste funzionalità non sono necessarie per la maggior parte dei driver.

In primo luogo, la struttura KTIMER utilizzata come oggetto timer dalle routine KeXxxTimer viene allocata dal driver. Il driver può preallocare questo oggetto per garantire che l'oggetto sia disponibile anche in circostanze in cui le risorse sono vincolate e le allocazioni di memoria possono avere esito negativo. Al contrario, una chiamata a ExAllocateTimer per allocare un oggetto timer potrebbe non riuscire in un ambiente vincolato a risorse. Tuttavia, alcuni driver devono essere progettati per funzionare in ambienti in cui le allocazioni di memoria hanno esito negativo e la maggior parte dei driver traggono vantaggio dalla praticità di una routine ExAllocateTimer che alloca e inizializza un oggetto timer.

In secondo luogo, non esiste un equivalente ExXxxTimer della routine KeReadStateTimer , che indica se un oggetto timer si trova nello stato segnalato. Tuttavia, questa routine viene usata raramente. Se necessario, un driver che utilizza le routine ExXxxTimer può controllare se un oggetto timer si trova nello stato segnalato leggendo un valore booleano impostato dalla routine di callback ExTimerCallback fornita dal driver alla routine ExAllocateTimer .