Функция 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 при выполнении или PerformanceIdleTime. Возможные значения — это DEVICE_POWER_STATE значения.

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

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

Замечания

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

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

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

Когда устройство удовлетворяет текущему значению времени ожидания простоя, диспетчер питания отправляет запрос IRP_MN_SET_POWER в верхнюю часть стека устройства, указав состояние питания устройства состояние. В ответ на IRPкаждый драйвер выполняет все задачи, необходимые для перехода состояния питания, а затем передает IRP следующему драйверу ниже. Когда IRP достигает водителя шины, этот водитель помещает устройство в запрошенное состояние нижней мощности и завершает IRP.

PoRegisterDeviceForIdleDetection задает значения времени ожидания для сохранения и производительности. Значение ConservationIdleTime применяется при оптимизации системной политики питания для сохранения; значение PerformanceIdleTime применяется при оптимизации системной политики питания для повышения производительности. Как правило, соответствующая политика зависит от источника питания: при работе с питанием AC система оптимизирует производительность и при выключении батареи система оптимизирует для сохранения.

Некоторые устройства могут указывать значения времени ожидания -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

См. также

IRP

IRP_MN_SET_POWER

PoSetDeviceBusy