Partager via


Fonction ExSetTimerResolution (wdm.h)

La routine ExSetTimerResolution modifie la fréquence à laquelle l’horloge système s’interrompt. Utilisez cette routine avec une extrême prudence (voir la section Remarques suivante).

Syntaxe

ULONG ExSetTimerResolution(
  [in] ULONG   DesiredTime,
  [in] BOOLEAN SetResolution
);

Paramètres

[in] DesiredTime

Spécifie la durée qui doit s’écouler entre chaque interruption du minuteur, en unités de 100 nanosecondes. La valeur minimale est d’environ 10 000 (1 milliseconde), mais peut varier légèrement selon la plateforme. (Ce paramètre est ignoré si SetResolution a la valeur FALSE.)

[in] SetResolution

Si la valeur est TRUE, l’appel est une demande permettant de définir la fréquence d’interruption d’horloge sur la valeur spécifiée par DesiredTime. Si la valeur est FALSE, l’appel est une demande de restauration de la fréquence d’interruption d’horloge à la valeur par défaut du système, qui est propre à la plateforme.

Valeur retournée

ExSetTimerResolution retourne la nouvelle résolution du minuteur, en unités de 100 nanosecondes.

Remarques

Pour définir la résolution du minuteur, un pilote appelle cette routine en passant TRUE comme paramètre pour SetResolution. Les règles suivantes s’appliquent :

  • La routine modifie la fréquence d’interruption d’horloge uniquement si la valeur DesiredTime spécifiée est inférieure au paramètre actuel.

  • Si un pilote demande une valeur DesiredTime supérieure à ce qui est actuellement défini, la routine retourne simplement le paramètre actuel.

  • Si un pilote demande une valeur DesiredTime inférieure à ce que l’horloge système peut prendre en charge, la routine utilise la plus petite résolution que le système peut prendre en charge et retourne cette valeur.

Si vous utilisez cette routine pour modifier la fréquence des interruptions d’horloge, votre pilote doit restaurer la fréquence d’interruption par défaut, généralement en effectuant l’appel suivant avant d’être déchargé :

ExSetTimerResolution (0, FALSE);

Si plusieurs pilotes ont tenté de modifier la fréquence des interruptions d’horloge, le système ne restaure pas la fréquence par défaut tant que tous ces pilotes n’ont pas appelé cette routine avec une valeur SetResolutionFALSE.

Le résultat de la modification de la fréquence des interruptions d’horloge est à l’échelle du système et peut avoir un effet gravement négatif sur les performances du système. Notez également que des fréquences d’interruption d’horloge plus élevées peuvent réduire l’autonomie de la batterie d’un système.

Pendant le traitement d’une demande de IRP_MJ_POWER , le gestionnaire d’alimentation détient un verrou sur une ressource que ExSetTimerResolution doit acquérir pour terminer. Par conséquent, un blocage se produit si un pilote appelle directement ou indirectement ExSetTimerResolution lors du traitement d’une demande d’alimentation, puis attend que l’appel à ExSetTimerResolution soit retourné avant que le pilote termine la demande d’alimentation. Pour plus d’informations sur l’appel sécurisé d’ExSetTimerResolution lors du traitement d’un IRP de puissance, consultez Appel d’ExSetTimerResolution lors du traitement d’un IRP de puissance.

Configuration requise

Condition requise Valeur
Plateforme cible Universal
En-tête wdm.h (inclure Wdm.h, Ntddk.h, Ntifs.h)
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= APC_LEVEL
Règles de conformité DDI HwStorPortProhibitedDDIs(storport),IrqlExApcLte2(wdm)

Voir aussi

KeSetTimerEx