Поделиться через


Функция ExSetTimerResolution (wdm.h)

Подпрограмма ExSetTimerResolution изменяет частоту прерывания системных часов. Используйте эту процедуру с особой осторожностью (см. следующий раздел о примечаниях).

Синтаксис

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

Параметры

[in] DesiredTime

Указывает время, которое должно пройти между каждым прерыванием таймера в 100-наносекундных единицах. Минимальное значение составляет примерно 10 000 (1 миллисекунда), но может немного отличаться в зависимости от платформы. (Этот параметр игнорируется, если setResolution имеет значение FALSE.)

[in] SetResolution

Если задано значение TRUE, вызов представляет собой запрос на определение частоты прерывания часов значения, указанного в DesiredTime. Если значение РАВНО FALSE, вызов представляет собой запрос на восстановление частоты прерывания часов до значения по умолчанию системы, которое зависит от платформы.

Возвращаемое значение

ExSetTimerResolution возвращает новое разрешение таймера в 100-наносекундных единицах.

Комментарии

Чтобы задать разрешение таймера, драйвер вызывает эту подпрограмму, передав true в качестве параметра setResolution. Применяются следующие правила.

  • Подпрограмма изменяет частоту прерывания часов, только если указанное значение DesiredTime меньше текущего значения.

  • Если драйвер запрашивает значение DesiredTime , которое больше заданного в данный момент, подпрограмма просто возвращает текущее значение.

  • Если драйвер запрашивает значение DesiredTime , которое меньше, чем поддерживает системные часы, подпрограмма использует наименьшее разрешение, поддерживаемое системой, и возвращает это значение.

Если эта подпрограмма используется для изменения частоты прерываний часов, драйвер должен восстановить частоту прерываний по умолчанию, как правило, путем выполнения следующего вызова перед выгрузки:

ExSetTimerResolution (0, FALSE);

Если несколько драйверов попытались изменить частоту прерывания часов, система не восстанавливает частоту по умолчанию, пока все эти драйверы не вызовут эту подпрограмму со значением SetResolutionfalse.

Результат изменения частоты прерывания часов является общесистемным и может оказать серьезное негативное влияние на производительность системы. Кроме того, обратите внимание, что более высокая частота прерываний часов может сократить время работы батареи системы.

Во время обработки запроса IRP_MJ_POWER диспетчер управления питанием удерживает блокировку ресурса, который exSetTimerResolution должен получить для завершения. Следовательно, взаимоблокировка возникает, если драйвер прямо или косвенно вызывает ExSetTimerResolution при обработке запроса на питание, а затем ожидает возврата вызова ExSetTimerResolution , прежде чем драйвер завершит запрос на питание. Дополнительные сведения о безопасном вызове ExSetTimerResolution при обработке IRP питания см. в разделе Вызов ExSetTimerResolution при обработке power IRP.

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= APC_LEVEL
Правила соответствия DDI HwStorPortProhibitedDIs(storport), IrqlExApcLte2(wdm)

См. также раздел

KeSetTimerEx