Partager via


ExSetTimer, fonction (wdm.h)

La routine ExSetTimer démarre une opération de minuteur et définit le minuteur à expirer à 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 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 temps 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 modifications de temps système. Un temps absolu est exprimé comme la durée passée, dans les 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 un temps relatif (valeur négative) ou les 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 un coup à la place de périodique, définissez Période sur zéro.

[in, optional] Parameters

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

Valeur de retour

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

Remarques

Votre pilote peut appeler cette routine pour définir un minuteur à expirer à un moment ultérieur. Le pilote peut alors attendre que le minuteur expire. Ou bien, le pilote peut implémenter une routine de rappel appelée lorsque le minuteur expire.

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

En guise d’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 pour la routine ExAllocateTimer. Lorsque le minuteur expire, le système d’exploitation appelle la routine ExTimerCallback.

Un appel ExSetTimer annule implicitement toute opération de minuteur défini précédemment démarrée sur l’objet minuteur spécifié par Minuteur. Si votre pilote a précédemment appelé ExSetTimer pour définir un minuteur qui utilise minuteur, et ce minuteur n’a pas encore expiré lorsque ExSetTimer est appelé une deuxième fois, le deuxième appel annule le minuteur à partir 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 FAUX.

Si le paramètre période n’est pas 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 initiale du minuteur et Période 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. Par conséquent, pour un minuteur périodique, le délai entre un délai d’expiration périodique et l’heure à laquelle l’objet du minuteur est signalé ou l’exécution de routine ExTimerCallback peut varier d’une période à l’autre. Pour plus d’informations, consultez précision du minuteur.

Un minuteur périodique ne peut expirer qu’une fois par cycles d’horloge système. La définition de 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 du minuteur plusieurs fois par cycles 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 le taux d’horloge du système pour répondre aux exigences de minutage d’un minuteur haute résolution. Pour plus d’informations, consultez High-Resolution minuteurs.

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 Période sur un multiple entier de l’intervalle par défaut entre les cycles d’horloge système.

Pour éviter une consommation excessive d’alimentation, un pilote ne doit pas définir la période d’un minuteur à haute résolution longue sur une valeur inférieure à l’intervalle par défaut entre les cycles d’horloge système. Sinon, le minuteur d’horloge système génère en permanence des interruptions au taux d’horloge système maximal autorisé.

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

Exigences

Exigence Valeur
client minimum pris en charge Disponible à partir de Windows 8.1.
plateforme cible Universel
d’en-tête wdm.h (include 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