Compartir a través de


Función WdfDeviceGetSystemPowerAction (wdfdevice.h)

[Se aplica a KMDF y UMDF]

El método WdfDeviceGetSystemPowerAction devuelve la acción de energía 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 siguiente sección Comentarios. 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.

Observaciones

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 energía del sistema cuando el dispositivo es el propietario de la directiva de energía. Los controladores deben volver a compilarse con la versión 31 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 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 reactiva 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 baja potencia.

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 está entrar en un estado de baja potencia o volver a su estado de trabajo.

El valor que WdfDeviceGetSystemPowerAction devuelve depende de las siguientes situaciones:

  • Si el equipo entra en un estado de baja potencia cuando el controlador llama a WdfDeviceGetSystemPowerAction, el método devuelve el motivo por el que el equipo está escribiendo el estado de baja potencia. Por ejemplo, el método devuelve powerActionSleep si el equipo está escribiendo su estado de baja potencia S1, S2 o S3.
  • Si el equipo vuelve a su estado de funcionamiento (S0) desde un estado de baja potencia 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 de inactividad de baja potencia 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 trabajo (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 baja potencia, consulte Un dispositivo Entra en un estado de Low-Power.

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 Valor
de la plataforma de destino de Universal
versión mínima de KMDF 1.9
versión mínima de UMDF 2.0
encabezado de wdfdevice.h (incluya Wdf.h)
biblioteca de Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
irQL <= DISPATCH_LEVEL
reglas de cumplimiento de DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)