Функция 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) |