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


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

Подпрограмма PoRegisterDeviceForIdleDetection включает или отменяет обнаружение бездействия и задает значения времени ожидания простоя для устройства.

Синтаксис

PULONG PoRegisterDeviceForIdleDetection(
  [in] PDEVICE_OBJECT     DeviceObject,
  [in] ULONG              ConservationIdleTime,
  [in] ULONG              PerformanceIdleTime,
  [in] DEVICE_POWER_STATE State
);

Параметры

[in] DeviceObject

Указатель на созданный драйвером DEVICE_OBJECT для устройства. В системах Windows 2000 и более поздних версий этот параметр может указывать на объект физического устройства (PDO) или объект функционального устройства (FDO). В Windows 98/Me этот параметр должен указывать на PDO базового устройства.

[in] ConservationIdleTime

Задает значение времени ожидания (в секундах), применяемое при оптимизации политики питания системы для экономии энергии. Укажите ноль, чтобы отключить обнаружение бездействия при действии политики сохранения.

[in] PerformanceIdleTime

Задает значение времени ожидания (в секундах), которое применяется при оптимизации системной политики питания для повышения производительности. Укажите ноль, чтобы отключить обнаружение бездействия при действии политики производительности.

[in] State

Указывает состояние питания устройства , запрашиваемое в запросе IRP_MN_SET_POWER , если выполнено значение ConservationIdleTime или PerformanceIdleTime . Возможные значения — это DEVICE_POWER_STATE значения.

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

PoRegisterDeviceForIdleDetection возвращает указатель на счетчик бездействия, указывающий, что обнаружение простоя включено. Он возвращает значение NULL , указывающее, что обнаружение простоя отключено, что не удалось выделить счетчик простоя или что одно или оба значения времени ожидания были недопустимыми.

Комментарии

PoRegisterDeviceForIdleDetection позволяет драйверам использовать механизм обнаружения простоя, предоставляемый диспетчером питания. Драйверы вызывают PoRegisterDeviceForIdleDetection по одной из следующих причин:

  • Включение обнаружения простоя для устройства и установка начальных значений времени ожидания простоя
  • Изменение значений времени ожидания простоя для устройства
  • Отключение обнаружения простоя для устройства
После включения устройства для обнаружения бездействия драйвер вызывает [PoSetDeviceBusy](./nf-wdm-posetdevicebusy.md) всякий раз, когда устройство используется, передавая указатель бездействия, отличный от 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.
Целевая платформа Универсальное
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

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

IRP

IRP_MN_SET_POWER

PoSetDeviceBusy