Функция PoRegisterDeviceForIdleDetection (ntifs.h)
Подпрограмма PoRegisterDeviceForIdleDetection включает или отменяет обнаружение бездействия и задает значения времени ожидания простоя для устройства.
Синтаксис
PULONG PoRegisterDeviceForIdleDetection(
[in] PDEVICE_OBJECT DeviceObject,
[in] ULONG ConservationIdleTime,
[in] ULONG PerformanceIdleTime,
[in] DEVICE_POWER_STATE State
);
Параметры
[in] DeviceObject
Указатель на созданный драйвером DEVICE_OBJECT для устройства. Этот параметр может указывать на объект физического устройства (PDO) или объект функционального устройства (FDO).
[in] ConservationIdleTime
Задает значение времени ожидания (в секундах), применяемое при оптимизации политики питания системы для экономии энергии. Укажите ноль, чтобы отключить обнаружение бездействия при действии политики сохранения.
[in] PerformanceIdleTime
Задает значение времени ожидания (в секундах), которое применяется при оптимизации системной политики питания для повышения производительности. Укажите ноль, чтобы отключить обнаружение бездействия при действии политики производительности.
[in] State
Указывает состояние питания устройства , которое будет запрашиваться в запросе IRP_MN_SET_POWER , если выполнено значение ConservationIdleTime или PerformanceIdleTime . Возможные значения — это DEVICE_POWER_STATE значения.
Возвращаемое значение
PoRegisterDeviceForIdleDetection возвращает указатель на счетчик бездействия, указывающий, что обнаружение простоя включено. Он возвращает значение NULL, указывающее, что обнаружение простоя отключено, что не удалось выделить счетчик простоя или что одно или оба значения времени ожидания были недопустимыми.
Комментарии
PoRegisterDeviceForIdleDetection позволяет драйверам использовать механизм обнаружения простоя, предоставляемый диспетчером питания. Драйверы вызывают PoRegisterDeviceForIdleDetection по одной из следующих причин:
- Включение обнаружения простоя для устройства и установка начальных значений времени ожидания простоя.
- Изменение значений времени ожидания простоя для устройства.
- Отключение обнаружения простоя для устройства.
После включения устройства для обнаружения бездействия драйвер вызывает PoSetDeviceBusy , когда устройство используется, передав указатель бездействия, отличный от NULL, возвращенный PoRegisterDeviceForIdleDetection. Вызов PoSetDeviceBusy перезапускает обратный отсчет простоя. Обратите внимание, что драйвер не должен передавать указатель NULL в PoSetDeviceBusy.
Каждый раз, когда устройство удовлетворяет текущему значению времени ожидания простоя, диспетчер питания отправляет запрос IRP_MN_SET_POWER в верхнюю часть стека устройств, указывая состояние питания устройства. В ответ на IRP каждый драйвер выполняет все задачи, связанные с устройством, перед переходом состояния питания, а затем передает IRP следующему драйверу ниже. Когда IRP достигает водителя шины, этот водитель переводит устройство в запрошенное состояние меньшего питания и завершает IRP.
PoRegisterDeviceForIdleDetection задает значения времени ожидания для сохранения и производительности. Значение ConservationIdleTime применяется, когда политика питания системы оптимизирует для сохранения; Значение PerformanceIdleTime применяется, когда политика питания системы оптимизирует производительность. Как правило, применяемая политика зависит от источника питания: при работе с питанием переменного тока система оптимизирует производительность, а при выключении аккумулятора система оптимизирует для экономии.
Некоторые устройства могут указывать значения времени ожидания -1, чтобы использовать стандартные тайм-ауты политики питания для своего класса устройств. Стандартные значения времени ожидания обеспечивают лучшую интеграцию системы для поддерживаемых стандартных классов устройств. В настоящее время WDM поддерживает эту функцию для устройств типа FILE_DEVICE_DISK и FILE_DEVICE_MASS_STORAGE. PoRegisterDeviceForIdleDetection возвращает значение NULL, если для устройства неподдерживаемого типа задано значение -1. Сведения о типах устройств см. в разделе Указание типов устройств.
Для каждого устройства можно задать только одно обнаружение простоя. Последующие вызовы PoRegisterDeviceForIdleDetection изменяют значения обнаружения простоя.
Если значения ConservationIdleTime и PerformanceIdleTime равны нулю, эта процедура отменяет все обнаружение бездействия для устройства и возвращает значение NULL.
PoRegisterDeviceForIdleDetection может освободить драйвер от необходимости выполнять собственное обнаружение бездействия. Однако драйверы также могут реализовать собственное обнаружение простоя.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 |
Целевая платформа | Универсальное |
Верхняя часть | ntifs.h (включая Wdm.h, Ntddk.h, Ntifs.h) |
Библиотека | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |