Condividi tramite


Funzione KeSetTimerEx (wdm.h)

La routine KeSetTimerEx imposta l'intervallo assoluto o relativo in cui un oggetto timer deve essere impostato su uno stato segnalato, fornisce facoltativamente un CustomTimerDpc routine da eseguire alla scadenza di tale intervallo e, facoltativamente, fornisce un intervallo ricorrente per il timer.

Sintassi

BOOLEAN KeSetTimerEx(
  [in, out]      PKTIMER       Timer,
  [in]           LARGE_INTEGER DueTime,
  [in]           LONG          Period,
  [in, optional] PKDPC         Dpc
);

Parametri

[in, out] Timer

Puntatore a un oggetto timer inizializzato con KeInitializeTimer o KeInitializeTimerEx.

[in] DueTime

Specifica l'ora assoluta o relativa in cui il timer deve scadere. Se il valore del parametro DueTime è negativo, l'ora di scadenza è relativa all'ora di sistema corrente. In caso contrario, l'ora di scadenza è assoluta. L'ora di scadenza è espressa in unità di tempo di sistema (intervalli di 100 nanosecondi). I tempi di scadenza assoluti tengono traccia delle modifiche apportate all'ora di sistema; le ore di scadenza relative non sono interessate dalle modifiche all'ora di sistema.

[in] Period

Specifica un intervallo ricorrente facoltativo per il timer in millisecondi. Deve essere un valore maggiore o uguale a zero. Se il valore di questo parametro è zero, il timer è un timer nonperiodico che non si accoda automaticamente.

[in, optional] Dpc

Puntatore a un oggetto DPC inizializzato da KeInitializeDpc. Questo parametro è facoltativo.

Valore restituito

Se l'oggetto timer era già presente nella coda del timer di sistema, KeSetTimerEx restituisce TRUE.

Osservazioni

La routine KeSetTimerEx esegue le operazioni seguenti:

  • Calcola l'ora di scadenza.

  • Imposta il timer su uno stato non segnalato.

  • Imposta l'intervallo ricorrente per il timer, se specificato.

  • Inserisce l'oggetto timer nella coda del timer di sistema.

Se l'oggetto timer era già presente nella coda timer, viene annullato in modo implicito prima di essere impostato sulla nuova ora di scadenza. Una chiamata a KeSetTimerEx prima della DueTime specificata in precedenza annulla sia il timer che la chiamata al Dpc, se presente, associata alla chiamata precedente.

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

Se viene specificato il parametro Dpc, all'oggetto timer viene associato un oggetto DPC. Quando il timer scade, l'oggetto timer viene rimosso dalla coda del timer di sistema e viene impostato su uno stato segnalato. Se un oggetto DPC è stato associato al timer quando è stato impostato, l'oggetto DPC viene inserito nella coda DPC di sistema da eseguire non appena le condizioni consentono la scadenza dell'intervallo timer.

Una routine DPC non può deallocare un timer periodico. Una routine DPC può deallocare un timer nonperiodico.

Si noti che un timer periodico viene riavviato automaticamente non appena scade. Pertanto, in un computer multiprocessore, il DPC per un timer periodico può essere eseguito contemporaneamente su due processori.

È possibile accodare una sola istanza di un determinato oggetto DPC in qualsiasi momento. Per evitare potenziali race condition, il DPC passato a KeSetTimerEx non deve essere passato a KeInsertQueueDpc.

I driver devono annullare tutti i timer attivi nelle routine Scarica. Usare KeCancelTimer per annullare i timer.

Per altre informazioni sugli oggetti timer, vedere oggetti timer e controller di dominio.

Fabbisogno

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 <= DISPATCH_LEVEL
regole di conformità DDI HwStorPortProhibitedDDIs(storport), IrqlKeDispatchLte(wdm)

Vedere anche

KeCancelTimer

KeInitializeDpc

KeInitializeTimer

KeInitializeTimerEx

KeReadStateTimer

KeWaitForMultipleObjects

KeWaitForSingleObject