ExSetTimerResolution, fonction (wdm.h)
La routine ExSetTimerResolution modifie la fréquence à laquelle l’horloge système interrompt. Utilisez cette routine avec une prudence extrême (consultez la section Remarques suivante).
ULONG ExSetTimerResolution(
[in] ULONG DesiredTime,
[in] BOOLEAN SetResolution
);
[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 par plateforme. (Ce paramètre est ignoré si SetResolution est FALSE.)
[in] SetResolution
Si TRUE, l’appel est une requête pour définir la fréquence d’interruption d’horloge sur la valeur spécifiée par DesiredTime. Si FAUX, l’appel est une demande de restauration de la fréquence d’interruption de l’horloge à la valeur par défaut du système, qui est spécifique à la plateforme.
ExSetTimerResolution retourne la nouvelle résolution du minuteur, en unités de 100 nanosecondes.
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 de l’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 à l’horloge système, 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 d’interruption 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 d’interruption de l’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 SetResolution valeur de FALSE.
Le résultat de la modification de la fréquence d’interruption 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 les fréquences d’interruption d’horloge plus élevées peuvent raccourcir la durée de vie de la batterie d’un système.
Pendant le traitement d’une demande de IRP_MJ_POWER, le gestionnaire de l’alimentation conserve un verrou sur une ressource qui 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 retourner avant que le pilote termine la demande d’alimentation. Pour plus d’informations sur l’appel sécurisé ExSetTimerResolution lors du traitement d’un IRP de puissance, consultez Appel d’ExSetTimerResolution lors du traitement d’unPower IRP .
Exigence | Valeur |
---|---|
plateforme cible | Universel |
d’en-tête | wdm.h (include 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) |