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, facoltativamente fornisce una routine CustomTimerDpc da eseguire quando tale intervallo scade 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 il tempo assoluto o relativo in cui scade il timer. 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 viene espressa nelle unità temporali 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 nonperiodic che non esegue automaticamente la coda stessa.

[in, optional] Dpc

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

Valore restituito

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

Commenti

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 timer di sistema.

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

I tempi di scadenza vengono misurati rispetto 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, un oggetto DPC è associato all'oggetto timer. Al termine del timer, l'oggetto timer viene rimosso dalla coda 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 del sistema da eseguire non appena le condizioni consentite dopo la scadenza dell'intervallo di timer.

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

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 in esecuzione contemporaneamente su due processori.

Una sola istanza di un determinato oggetto DPC può essere accodata in qualsiasi momento. Per evitare potenziali condizioni di gara, il DPC passato a KeSetTimerEx non deve essere passato a KeInsertQueueDpc.

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

Per altre informazioni sugli oggetti timer, vedere Oggetti timer e schede di rete.

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

Vedi anche

KeCancelTimer

KeInitializeDpc

KeInitializeTimer

KeInitializeTimerEx

KeReadStateTimer

KeWaitForMultipleObjects

KeWaitForSingleObject