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) |