Share via


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

El PowerChangeState método solicita que el dispositivo cambie a un nuevo estado de alimentación.

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. Nuevo estado de energía (NewState.DeviceState) puede ser uno de los DEVICE_POWER_STATE valores de enumeración que se muestran en la tabla siguiente.

Estado de energía Significado
PowerDeviceD0 Estado de potencia completa (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

None

Observaciones

PortCls llama al PowerChangeState método en respuesta a un IRP de energía de IRP_MN_SET_POWER . Esta llamada no debe producir un error. PortCls y el sistema usan la PowerChangeState llamada 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 desapase las secuencias de audio activas para reactivar el dispositivo. Los miniportes pueden optar por recibir notificaciones adicionales mediante la interfaz IPowerNotify .

El controlador de minipuerto debe realizar el cambio solicitado en el estado de alimentación del dispositivo antes de que vuelva de la PowerChangeState llamada. Si el controlador de minipuerto necesita guardar o restaurar cualquier estado de dispositivo antes de un cambio de estado de energía, el controlador de minipuerto 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 minipuerto 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 minipuerto debe almacenar en caché los accesos de hardware que deba aplazarse hasta que el dispositivo vuelva a encenderse. Si el estado de alimentación 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 haber encendido el dispositivo. Si el estado de alimentación cambia de PowerDeviceD0 a un estado de suspensión, el controlador de miniporte puede realizar los accesos de hardware necesarios durante la PowerChangeState llamada antes de apagar el dispositivo.

Mientras se apaga, nunca se pide que un controlador de miniporte cree un objeto de controlador de minipuerto o un objeto de flujo. 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 Value
Plataforma de destino Universal
Encabezado portcls.h (incluir Portcls.h)

Consulte también

IAdapterPowerManagement

IPowerNotify

IRP_MN_SET_POWER