Compartir a través de


Método IAdapterPowerManagement::P owerChangeState (portcls.h)

El método PowerChangeState solicita que el dispositivo cambie a un nuevo estado de energía.

Sintaxis

void PowerChangeState(
  [in] POWER_STATE NewState
);

Parámetros

[in] NewState

Especifica el nuevo estado de energía que se solicita para el dispositivo. Este parámetro es una unión de tipo POWER_STATE. El nuevo estado de energía (NewState.DeviceState) puede ser uno de los valores de enumeración DEVICE_POWER_STATE que se muestran en la tabla siguiente.

Estado de energía Significado
PowerDeviceD0 Estado de energía completo (D0). Este código puede ser una función del estado de energía actual. Guarde el nuevo estado. Este valor local se usa para determinar cuándo almacenar en caché los accesos a las propiedades y cuándo permitir que el controlador acceda al hardware.
PowerDeviceD1 Estado de suspensión que tiene la latencia más baja con respecto al tiempo de latencia necesario para volver a D0
PowerDeviceD2 Estado de suspensión de latencia media. En este estado, el controlador de dispositivo no puede suponer que puede tocar el hardware, por lo que los accesos deben almacenarse en caché y el hardware restaurado al escribir D0.
PowerDeviceD3 Un estado de hibernación completo y es el estado de suspensión de latencia más largo. El controlador no puede acceder al hardware en este estado y debe almacenar en caché los accesos de hardware y restaurar el hardware al volver a D0 o D1.

Valor devuelto

Ninguno

Observaciones

PortCls llama al método PowerChangeState en respuesta a un IRP de energía IRP_MN_SET_POWER. Esta llamada no debe producir un error. PortCls y el sistema usan la llamada PowerChangeState para colocar el dispositivo en el estado de alimentación deseado. Cuando el sistema intenta suspender o reanudar una secuencia de audio activa, el controlador debe ser capaz de guardar o restaurar correctamente su contexto de dispositivo.

Para ayudar al controlador, PortCls pausará las secuencias de audio activas antes de llamar a este método para colocar el dispositivo en estado de suspensión. Después de llamar a este método, PortCls despará las secuencias de audio activas para reactivar el dispositivo. Los miniportes pueden optar por recibir notificaciones adicionales mediante el uso de la interfaz IPowerNotify.

El controlador de miniport debe realizar el cambio solicitado en el estado de alimentación del dispositivo antes de que vuelva de la llamada PowerChangeState. Si el controlador de miniporte necesita guardar o restaurar cualquier estado de dispositivo antes de un cambio de estado de energía, el controlador de miniporte debe admitir la interfaz IPowerNotify, lo que le permite recibir una advertencia anticipada de cualquier cambio de este tipo. Antes de volver de una llamada correcta PowerChangeState, el controlador de miniport debe almacenar en caché el nuevo estado de energía.

Aunque el controlador de minipuerto está en uno de los estados de suspensión (cualquier estado distinto de PowerDeviceD0), debe evitar escribir en el hardware. El controlador de miniport debe almacenar en caché los accesos de hardware que deba aplazarse hasta que el dispositivo vuelva a encenderse. Si el estado de energía cambia de uno de los estados de suspensión a PowerDeviceD0, el controlador de miniporte debe realizar cualquier acceso de hardware diferido después de que haya encendido el dispositivo. Si el estado de energía cambia de PowerDeviceD0 a un estado de suspensión, el controlador de miniporte puede realizar los accesos de hardware necesarios durante la llamada PowerChangeState antes de encender el dispositivo.

Mientras se apaga, nunca se pide que un controlador de miniporte cree un objeto de controlador de miniporte o un objeto stream. PortCls siempre coloca el dispositivo en el estado PowerDeviceD0 antes de llamar al método NewStream del controlador de miniporte.

El código de este método debe residir en la memoria paginada.

Requisitos

Requisito Valor
de la plataforma de destino de Universal
encabezado de portcls.h (incluya Portcls.h)

Consulte también

IAdapterPowerManagement

IPowerNotify

IRP_MN_SET_POWER