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


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

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

Синтаксис

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

Параметры

[in] DesiredTime

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

[in] SetResolution

Если TRUE, вызов — это запрос на настройку частоты прерываний часов в значение, указанное DesiredTime. Если FALSE, вызов — это запрос на восстановление частоты прерываний часов в значение по умолчанию системы, которое зависит от платформы.

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

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

Замечания

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

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

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

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

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

ExSetTimerResolution (0, FALSE);

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

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

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

Требования

Требование Ценность
целевая платформа Всеобщий
заголовка wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
библиотеки NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= APC_LEVEL
правил соответствия DDI HwStorPortProhibitedDIs(storport), IrqlExApcLte2(wdm)

См. также

KeSetTimerEx