Función PoRegisterDeviceForIdleDetection (ntifs.h)

La rutina PoRegisterDeviceForIdleDetection habilita o cancela la detección de inactividad y establece valores de tiempo de espera de inactividad para un dispositivo.

Sintaxis

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

Parámetros

[in] DeviceObject

Puntero al DEVICE_OBJECT creado por el controlador para el dispositivo. Este parámetro puede apuntar a un objeto de dispositivo físico (PDO) o a un objeto de dispositivo funcional (FDO).

[in] ConservationIdleTime

Establece el valor de tiempo de espera (en segundos) que se aplicará cuando la directiva de energía del sistema optimiza para la conservación de la energía. Especifique cero para deshabilitar la detección de inactividad cuando la directiva de conservación esté en vigor.

[in] PerformanceIdleTime

Establece el valor de tiempo de espera (en segundos) que se aplicará cuando la directiva de energía del sistema optimiza el rendimiento. Especifique cero para deshabilitar la detección de inactividad cuando la directiva de rendimiento esté en vigor.

[in] State

Especifica el estado de alimentación del dispositivo que se va a solicitar en una solicitud de IRP_MN_SET_POWER cuando se ha cumplido ConservationIdleTime o PerformanceIdleTime . Los valores posibles son los valores de DEVICE_POWER_STATE .

Valor devuelto

PoRegisterDeviceForIdleDetection devuelve un puntero al contador inactivo para indicar que se ha habilitado la detección de inactividad. Devuelve NULL para indicar que se ha deshabilitado la detección de inactividad, que no se pudo asignar un contador inactivo o que uno o ambos valores de tiempo de espera no eran válidos.

Comentarios

PoRegisterDeviceForIdleDetection permite a los controladores usar el mecanismo de detección de inactividad proporcionado por el administrador de energía. Los controladores llaman a PoRegisterDeviceForIdleDetection por cualquiera de los siguientes motivos:

  • Para habilitar la detección de inactividad para el dispositivo y establecer los valores de tiempo de espera de inactividad iniciales.
  • Para cambiar los valores de tiempo de espera de inactividad de un dispositivo.
  • Para deshabilitar la detección de inactividad para un dispositivo.

Después de habilitar un dispositivo para la detección de inactividad, un controlador llama a PoSetDeviceBusy cada vez que el dispositivo está en uso, pasando el puntero inactivo no NULL devuelto por PoRegisterDeviceForIdleDetection. Al llamar a PoSetDeviceBusy , se reinicia la cuenta atrás inactiva. Tenga en cuenta que un controlador no debe pasar un puntero NULL a PoSetDeviceBusy.

Cada vez que el dispositivo satisface el valor de tiempo de espera de inactividad actual, el administrador de energía envía una solicitud de IRP_MN_SET_POWER a la parte superior de la pila de dispositivos, especificando el estado de energía del dispositivo. En respuesta al IRP, cada controlador realiza las tareas específicas del dispositivo necesarias antes de la transición del estado de energía y, a continuación, pasa el IRP al controlador inferior siguiente. Cuando el IRP llega al controlador de bus, ese controlador coloca el dispositivo en el estado de energía inferior solicitado y completa el IRP.

PoRegisterDeviceForIdleDetection establece valores de tiempo de espera para la conservación y el rendimiento. El valor ConservationIdleTime se aplica cuando la política de energía del sistema optimiza para la conservación; El valor PerformanceIdleTime se aplica cuando la directiva de energía del sistema optimiza el rendimiento. Normalmente, la directiva aplicable depende de la fuente de alimentación: cuando se ejecuta con alimentación de CA, el sistema optimiza el rendimiento y cuando se apaga una batería, el sistema se optimiza para la conservación.

Algunos dispositivos pueden especificar valores de tiempo de espera de -1 para usar los tiempos de espera de la directiva de energía estándar para su clase de dispositivo. Los valores de tiempo de espera estándar proporcionan una mejor integración del sistema para las clases de dispositivo estándar admitidas. En la actualidad, WDM admite esta característica para dispositivos de tipo FILE_DEVICE_DISK y FILE_DEVICE_MASS_STORAGE. PoRegisterDeviceForIdleDetection devuelve NULL si se especifica -1 para un dispositivo de un tipo no admitido. Para obtener información sobre los tipos de dispositivo, vea Especificar tipos de dispositivo.

Solo se puede establecer una detección de inactividad por dispositivo. Las llamadas posteriores a PoRegisterDeviceForIdleDetection cambian los valores de detección de inactividad.

Si conservationIdleTime y PerformanceIdleTime son cero, esta rutina cancela toda la detección de inactividad para el dispositivo y devuelve NULL.

PoRegisterDeviceForIdleDetection puede liberar un controlador de la necesidad de realizar su propia detección de inactividad. Sin embargo, los controladores también pueden implementar su propia detección de inactividad.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000
Plataforma de destino Universal
Encabezado ntifs.h (incluye Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL <= APC_LEVEL

Consulte también

IRP

IRP_MN_SET_POWER

PoSetDeviceBusy