Partager via


Routines et objets EX_TIMER ExXxxTimer

À compter de Windows 8.1, un ensemble complet de routines ExXxxTimer est disponible pour gérer les minuteurs. Ces routines utilisent des objets minuteurs basés sur la structure EX_TIMER . Les routines ExXxxTimer remplacent les routines KeXxxTimer , qui sont disponibles à partir de Windows 2000. Les pilotes destinés à s’exécuter uniquement sur Windows 8.1 et versions ultérieures de Windows peuvent utiliser les routines ExXxxTimer au lieu des routines KeXxxTimer. Windows 8.1 et versions ultérieures de Windows continuent de prendre en charge les routines KeXxxTimer.

Les routines ExXxxTimer ont toutes les fonctionnalités importantes fournies par les routines KeXxxTimer . En outre, les routines ExXxxTimer prennent en charge deux types de minuteurs, les minuteurs haute résolution et les minuteurssans éveil, qui ne sont pas pris en charge par les routines KeXxxTimer . Les minuteurs à haute résolution sont des minuteurs dont les heures d’expiration peuvent être spécifiées avec une précision supérieure à celle des minuteurs dont la précision est limitée par la résolution par défaut de l’horloge système. Les minuteurs sans éveil sont des minuteurs qui évitent de réveiller inutilement les processeurs à partir d’états de faible puissance. Pour plus d'informations, voir les rubriques suivantes :

Minuteurs haute résolution

Minuteurs sans éveil

À compter de Windows 8.1, les routines ExXxxTimer suivantes sont disponibles :

ExAllocateTimer

ExSetTimer

ExCancelTimer

ExDeleteTimer

La routine ExSetTimer peut être utilisée à la place de la routine KeSetTimer ou KeSetTimerEx . La routine ExCancelTimer peut être utilisée à la place de la routine KeCancelTimer .

Les routines ExAllocateTimer et ExDeleteTimer n’ont pas d’équivalents KeXxxTimer directs. Ces deux routines allouent et libèrent un objet minuteur. Cet objet minuteur est une structure de EX_TIMER allouée par le système dont les membres sont opaques aux pilotes. En revanche, l’objet minuteur utilisé par les routines KeXxxTimer est une structure KTIMER allouée par le pilote. Le pilote appelle la routine KeInitializeTimer ou KeInitializeTimerEx pour initialiser cet objet. ExAllocateTimer initialise les objets du minuteur qu’il alloue. Pour plus d’informations sur ExDeleteTimer, consultez Suppression d’un objet timer System-Allocated.

les structures EX_TIMER et KTIMER sont des objets pouvant être attendus. Une fois qu’un pilote a appelé ExSetTimer, KeSetTimer ou KeSetTimerEx pour définir un minuteur, le pilote peut appeler une routine telle que KeWaitForSingleObject ou KeWaitForMultipleObjects pour attendre l’expiration du minuteur. L’objet minuteur est signalé lorsque le minuteur expire. En option, un pilote peut fournir un pointeur vers une routine de rappel ExTimerCallback ou CustomTimerDpc implémentée par le pilote que le système d’exploitation appelle après l’expiration du minuteur.

Les routines KeXxxTimer ont deux fonctionnalités qui ne sont pas fournies par les routines ExXxxTimer , mais ces fonctionnalités ne sont pas nécessaires par la plupart des pilotes.

Tout d’abord, la structure KTIMER utilisée comme objet de minuteur par les routines KeXxxTimer est allouée par le pilote. Le pilote peut préallouer cet objet pour s’assurer que l’objet est disponible même dans des circonstances où les ressources sont limitées et les allocations de mémoire peuvent échouer. En revanche, un appel à ExAllocateTimer pour allouer un objet minuteur peut échouer dans un environnement limité en ressources. Toutefois, peu de pilotes doivent être conçus pour fonctionner dans des environnements dans lesquels les allocations de mémoire échouent, et la plupart des pilotes bénéficient de la commodité d’une routine ExAllocateTimer qui alloue et initialise un objet de minuteur.

Deuxièmement, il n’existe pas d’équivalent ExXxxTimer de la routine KeReadStateTimer , ce qui indique si un objet de minuteur est à l’état signalé. Toutefois, cette routine est rarement utilisée. Si nécessaire, un pilote qui utilise les routines ExXxxTimer peut case activée si un objet de minuteur est à l’état signalé en lisant une valeur booléenne définie par la routine de rappel ExTimerCallback que le pilote fournit à la routine ExAllocateTimer.