Función WdfDeviceGetSystemPowerAction (wdfdevice.h)

[Se aplica a KMDF y UMDF]

El método WdfDeviceGetSystemPowerAction devuelve la acción de alimentación del sistema, si existe, que se está produciendo actualmente para el equipo.

Sintaxis

POWER_ACTION WdfDeviceGetSystemPowerAction(
  [in] WDFDEVICE Device
);

Parámetros

[in] Device

Identificador de un objeto de dispositivo de marco.

Valor devuelto

WdfDeviceGetSystemPowerAction devuelve un valor de enumerador con tipo POWER_ACTION. El valor indica la acción de alimentación del sistema que se está produciendo actualmente para el equipo. Para obtener más información, vea la sección Comentarios que se muestra más adelante. La enumeración POWER_ACTION se define en wdm.h.

Se produce una comprobación de errores si el controlador proporciona un identificador de objeto no válido.

Comentarios

A partir de la versión 1.31/2.31 de WDF (denominada "v31"), WdfDeviceGetSystemPowerAction se ha actualizado para notificar con más precisión la acción de alimentación del sistema cuando el dispositivo es el propietario de la directiva de energía. Los controladores deben volver a compilarse con v31 o posterior para obtener el siguiente comportamiento nuevo:

  • Si el dispositivo entra o sale de D0 debido a S0 Idle (consulte WdfDeviceAssignS0IdleSettings) mientras una transición de energía del sistema no relacionada está en curso, WdfDeviceGetSystemPowerAction podría devolver PowerActionSleep. Esto se ha corregido en v31 y ahora devuelve PowerActionNone.

  • Cuando el sistema se reactiva desde suspensión híbrida (suspensión con un archivo de hibernación), antes de la versión v31, WdfDeviceGetSystemPowerAction siempre devolvió PowerActionHibernate. Esto se ha corregido en v31 y ahora devuelve:

    • PowerActionSleep si se activa sin pérdida de energía, lo que significa que el sistema permaneció en S3.
    • PowerActionHibernate si se activa después de la pérdida de energía, lo que significa que el sistema se reanudó desde el archivo de hibernación.

El método WdfDeviceGetSystemPowerAction permite a un controlador determinar si se está produciendo la transición de energía de un dispositivo porque el dispositivo está inactivo (o despertando), o porque todo el equipo entra (o sale) un estado de bajo consumo.

El controlador debe llamar a WdfDeviceGetSystemPowerAction solo desde las funciones de devolución de llamada de eventos a las que llama el marco cuando el dispositivo entra en un estado de bajo consumo o vuelve a su estado de trabajo.

El valor que devuelve WdfDeviceGetSystemPowerAction depende de las siguientes situaciones:

  • Si el equipo entra en un estado de bajo consumo cuando el controlador llama a WdfDeviceGetSystemPowerAction, el método devuelve el motivo por el que el equipo entra en estado de baja potencia. Por ejemplo, el método devuelve PowerActionSleep si el equipo entra en su estado de baja potencia S1, S2 o S3.
  • Si el equipo vuelve a su estado de funcionamiento (S0) desde un estado de bajo consumo cuando el controlador llama a WdfDeviceGetSystemPowerAction, el método devuelve el motivo por el que el equipo entró en el estado de baja potencia. Por ejemplo, el método devuelve PowerActionSleep si el equipo deja su estado de baja potencia S1, S2 o S3.
  • Si el equipo está encendido (después de haberse desactivado) cuando el controlador llama a WdfDeviceGetSystemPowerAction, el método devuelve PowerActionNone.
  • Si el dispositivo entra en un estado inactivo de bajo consumo o vuelve a su estado de trabajo (D0) cuando el controlador llama a WdfDeviceGetSystemPowerAction, mientras que el resto del sistema permanece en su estado de funcionamiento (S0), el método devuelve PowerActionNone.
  • Si el equipo y el dispositivo están en sus estados de trabajo cuando el controlador llama a WdfDeviceGetSystemPowerAction, el método devuelve PowerActionNone.
Para obtener más información sobre los estados de bajo consumo, consulta A Device Enters a Low-Power State.

Ejemplos

En el ejemplo de código siguiente se obtiene la actividad de transición de energía que se está produciendo actualmente para el equipo.

POWER_ACTION SysPowerAction;

SysPowerAction = WdfDeviceGetSystemPowerAction(device);

Requisitos

Requisito Value
Plataforma de destino Universal
Versión mínima de KMDF 1,9
Versión mínima de UMDF 2.0
Encabezado wdfdevice.h (incluir Wdf.h)
Library Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL <= DISPATCH_LEVEL
Reglas de cumplimiento de DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)