Partager via


Fonction ExSetTimer (wdm.h)

La routine ExSetTimer démarre une opération de minuterie et définit le minuteur pour qu’il expire à l’heure d’échéance spécifiée.

Syntaxe

BOOLEAN ExSetTimer(
  [in]           PEX_TIMER           Timer,
  [in]           LONGLONG            DueTime,
  [in]           LONGLONG            Period,
  [in, optional] PEXT_SET_PARAMETERS Parameters
);

Paramètres

[in] Timer

Pointeur vers une structure EX_TIMER . Cette structure est un objet de minuteur qui a été précédemment alloué par la routine ExAllocateTimer .

[in] DueTime

Heure absolue ou relative à laquelle le minuteur doit expirer. Si la valeur du paramètre DueTime est négative, l’heure d’expiration est relative à l’heure système actuelle. Sinon, le délai d’expiration est absolu. Le temps d’expiration est exprimé en unités de temps système (intervalles de 100 nanosecondes). Les heures d’expiration absolues suivent les modifications apportées à l’heure système ; les heures d’expiration relatives ne sont pas affectées par les changements d’heure système. Un temps absolu est exprimé comme le temps passé, en unités de temps système, depuis le début de l’année 1601.

Le paramètre DueTime d’un minuteur à haute résolution doit être une heure relative (valeur négative) ou des vérifications de bogues de routine.

[in] Period

Période facultative pour le minuteur dans les unités de temps système (intervalles de 100 nanosecondes). Doit être inférieur ou égal à MAXLONG. Pour un minuteur qui est one-shot au lieu de périodique, définissez Période sur zéro.

[in, optional] Parameters

Pointeur vers une structure EXT_SET_PARAMETERS . Le pilote appelant appelait précédemment la routine ExInitializeSetTimerParameters pour initialiser cette structure.

Valeur retournée

Cette routine retourne TRUE si elle annule un minuteur qui était en attente au moment où la routine a été appelée. Sinon, la routine retourne FALSE. Pour plus d'informations, consultez la section Notes.

Remarques

Votre pilote peut appeler cette routine pour définir un minuteur pour qu’il expire à un moment ultérieur. Le pilote peut alors attendre l’expiration du minuteur. Le pilote peut également implémenter une routine de rappel appelée à l’expiration du minuteur.

Une fois qu’un pilote appelle ExSetTimer, le pilote peut appeler une routine telle que KeWaitForSingleObject ou KeWaitForMultipleObjects pour attendre l’expiration du minuteur. Lorsque le minuteur expire, le système d’exploitation signale l’objet minuteur.

En option, le pilote peut implémenter une routine de rappel ExTimerCallback et fournir un pointeur vers cette routine en tant que paramètre d’entrée vers la routine ExAllocateTimer . Lorsque le minuteur expire, le système d’exploitation appelle la routine ExTimerCallback .

Un appel ExSetTimer annule implicitement toute opération set-timer précédemment démarrée sur l’objet minuteur spécifié par Timer. Si votre pilote a précédemment appelé ExSetTimer pour définir un minuteur qui utilise le minuteur et que ce minuteur n’a pas encore expiré quand ExSetTimer est appelé une deuxième fois, le deuxième appel annule le minuteur du premier appel, puis démarre le nouveau minuteur. Dans ce cas, le deuxième appel retourne TRUE. Toutefois, si le minuteur démarré par le premier appel expire avant que le deuxième appel puisse annuler ce minuteur, le deuxième appel démarre le nouveau minuteur et retourne FALSE.

Si le paramètre Period est différent de zéro, le minuteur est périodique. Pour un minuteur périodique, le paramètre DueTime spécifie l’heure d’expiration du minuteur initial et Period spécifie l’intervalle entre les expirations suivantes.

Le minuteur matériel utilisé pour l’horloge système signale les demandes d’interruption à intervalles uniformes, mais la gestion de ces interruptions peut être retardée par le traitement des interruptions pour d’autres appareils. Ainsi, pour un minuteur périodique, le délai entre une heure d’expiration périodique et l’heure à laquelle l’objet du minuteur est signalé ou à laquelle la routine ExTimerCallback s’exécute peut varier d’une période à l’autre. Pour plus d’informations, consultez Précision du minuteur.

Un minuteur périodique ne peut pas expirer plus d’une fois par horloge système. Le fait de définir la période d’un minuteur sur une valeur inférieure à l’intervalle entre les cycles d’horloge système n’entraîne pas l’expiration de la minuterie plusieurs fois par le coche d’horloge système, mais peut entraîner la variation des intervalles entre les expirations successives si le taux d’horloge système change. Par exemple, le système d’exploitation peut augmenter temporairement la fréquence d’horloge du système pour répondre aux exigences de minutage d’un minuteur haute résolution. Pour plus d’informations, consultez Minuteurs haute résolution.

Pour un minuteur périodique qui n’est pas un minuteur à haute résolution, un pilote peut obtenir des expirations périodiques relativement uniformes en définissant Period sur un multiple entier de l’intervalle par défaut entre les cycles d’horloge système.

Pour éviter une consommation excessive d’énergie, un pilote ne doit pas définir la période d’un minuteur à haute résolution de longue durée sur une valeur inférieure à l’intervalle par défaut entre les cycles d’horloge système. Dans le cas contraire, le minuteur d’horloge système génère en permanence des interruptions à la fréquence d’horloge système maximale autorisée.

Pour plus d’informations, consultez Routines et EX_TIMER Objects ExXxxTimer.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible à partir de Windows 8.1.
Plateforme cible Universal
En-tête wdm.h (inclure Wdm.h, Ntddk.h, Ntifs.h)
Bibliothèque Ntoskrnl.lib
IRQL <= DISPATCH_LEVEL

Voir aussi

EXT_SET_PARAMETERS

EX_TIMER

ExAllocateTimer

ExInitializeSetTimerParameters

ExTimerCallback

KeWaitForMultipleObjects

KeWaitForSingleObject