IRP_MN_QUERY_POWER
Este IRP consulta un dispositivo para determinar si se puede cambiar el estado de alimentación del sistema o el estado de alimentación del dispositivo.
Código principal
Cuándo se envió
El administrador de energía o un propietario de la directiva de energía del dispositivo envía este IRP para determinar si puede cambiar el estado de alimentación del sistema o del dispositivo, normalmente para dormir. Un controlador debe llamar a PoRequestPowerIrp para asignar y enviar este IRP.
El administrador de energía envía este IRP en IRQL = PASSIVE_LEVEL a las pilas de dispositivos que establecen la marca DO_POWER_PAGABLE en el PDO.
El administrador de energía puede enviar el IRP en IRQL = DISPATCH_LEVEL si se establece la marca de DO_POWER_INRUSH. Estos controladores no pueden acceder directa o indirectamente a ningún código paginado o datos.
Parámetros de entrada
Parameters.Power.Type especifica el tipo de estado de energía que se establece, ya sea SystemPowerState o DevicePowerState.
Parameters.Power.State especifica el propio estado de energía, como se indica a continuación:
Si Parameters.Power.Type es SystemPowerState, el valor es un enumerador del tipo SYSTEM_POWER_STATE .
Si Parameters.Power.Type es DevicePowerState, el valor es un enumerador del tipo DEVICE_POWER_STATE .
Parameters.Power.ShutdownType especifica información adicional sobre la transición solicitada. Los valores posibles son enumeradores del tipo POWER_ACTION .
Parámetros de salida
Ninguno.
Bloque de estado de entrada/salida
Un controlador establece Irp-IoStatus.Status> en STATUS_SUCCESS para indicar que el dispositivo puede entrar en el estado solicitado. Un controlador establece cualquier estado de error adecuado para indicar que no puede entrar en el estado solicitado.
Operación
Los parámetros de IRP_MN_QUERY_POWER son idénticos a los de IRP_MN_SET_POWER. En lugar de notificar a los conductores un cambio irrevocable en el estado de energía, sin embargo, IRP_MN_QUERY_POWER consulta si el sistema o un dispositivo pueden entrar en un estado de alimentación determinado.
Un controlador no debe cambiar el estado de alimentación de su dispositivo en respuesta a una solicitud de IRP_MN_QUERY_POWER .
Una vez que un controlador recibe una solicitud de IRP_MN_QUERY_POWER en Windows Server 2003, Windows XP y Windows 2000, un controlador debe llamar a PoStartNextPowerIrp, como se describe en Llamada a PoStartNextPowerIrp. A partir de Windows Vista, no se requiere llamar a PoStartNextPowerIrp y esta llamada no realiza ninguna operación de administración de energía.
IRP_MN_QUERY_POWER de un estado de energía del sistema
El administrador de energía envía este IRP para asegurarse de que puede cambiar el estado de alimentación del sistema sin interrumpir el trabajo, como la eliminación de conexiones de red.
Siempre que sea posible, el administrador de energía consulta antes de enviar IRP_MN_SET_POWER para solicitar un estado de suspensión del sistema o un apagado normal del sistema. Sin embargo, en algunas condiciones críticas (por ejemplo, el usuario que presiona el botón Apagar o una batería expira), el administrador de energía podría enviar una solicitud de IRP_MN_SET_POWER sin enviar primero una solicitud de alimentación de consulta. El administrador de energía solo consulta para los estados de suspensión; nunca consulta antes de volver al estado de trabajo.
Cuando un controlador recibe un IRP de consulta de energía del sistema, debe producir un error en el IRP si no admite ninguno de los estados del dispositivo que son válidos para el estado del sistema consultado. Para obtener más información, consulte DeviceState. De lo contrario, el controlador debe pasar el IRP al siguiente controlador inferior. El conductor del autobús completa el IRP.
A partir de Windows Vista, la transición a un estado de suspensión del sistema se considera una operación crítica. Aunque un controlador podría producir un error en un IRP de alimentación de consulta del sistema, el administrador de energía podría cambiar el estado de alimentación del sistema a un estado de suspensión. Después de que un controlador reciba un IRP de alimentación de consulta del sistema, el controlador siempre debe estar preparado para un cambio posterior en el estado de alimentación del sistema.
Cuando el propietario de una directiva de energía de dispositivo recibe un IRP de consulta de energía del sistema, debe establecer una rutina de IoCompletion en irP antes de pasarla hacia abajo. En la rutina IoCompletion , debe enviar un IRP_MN_QUERY_POWER para un estado de dispositivo válido para el estado del sistema consultado. Para obtener más información, consulte Control de un IRP del sistema Query-Power en un propietario de directiva de energía de dispositivo.
Cuando IRP especifica PowerSystemShutdown (S5), el valor de Parameters.Power.ShutdownType proporciona un motivo para el apagado. ShutdownType indica al controlador si el sistema está restableciendo (PowerActionShutdownReset) o apagando indefinidamente para reiniciarlo más adelante (PowerActionShutdownOff). En el caso de los controladores de la mayoría de los dispositivos, la diferencia es inconsecuente. Sin embargo, para determinados dispositivos, como un dispositivo de streaming de vídeo que realiza DMA, un controlador puede optar por apagar su dispositivo cuando se restablezca el sistema, deteniendo así cualquier E/S en curso.
En los sistemas de Microsoft Windows 2000 y versiones posteriores, el valor de ShutdownType también puede ser PowerActionShutdown. En este caso, el controlador no puede indicar qué tipo de apagado se solicita y, por lo tanto, debe continuar como para un restablecimiento.
Si un controlador produce un error en una solicitud de IRP_MN_QUERY_POWER para un estado de alimentación del sistema, el administrador de energía suele responder emitiendo un IRP de IRP_MN_SET_POWER . Normalmente, este IRP reafirmará el estado actual del sistema. Sin embargo, es posible que los controladores reciban un IRP_MN_SET_POWER al estado consultado o a algún otro estado intermedio. Los controladores deben estar preparados para controlar estas situaciones.
IRP_MN_QUERY_POWER de un estado de alimentación del dispositivo
Un propietario de la directiva de energía del dispositivo envía este IRP a su pila en respuesta a una solicitud de IRP_MN_QUERY_POWER del sistema.
Si un controlador puede colocar su dispositivo en el estado del dispositivo solicitado, establece IoStatus.Status en STATUS_SUCCESS y pasa el IRP al siguiente controlador inferior, etc. hasta que el IRP llegue al controlador de autobús. Si algún controlador de la pila debe producir un error en el IRP, ese controlador debe completar el IRP inmediatamente llamando a IoCompleteRequest y devolviendo un estado de error. Los controladores que no superan el IRP no lo pasan más abajo en la pila.
Al devolver STATUS_SUCCESS, el controlador garantiza que no iniciará ninguna operación que cambiaría su capacidad para establecer el estado de energía solicitado. El controlador debe poner en cola los IRP que requieran estas operaciones hasta que complete un IRP de potencia establecida que devuelva el dispositivo a un estado de alimentación aceptable.
En los sistemas Windows 2000 y versiones posteriores, cuando IRP especifica PowerDeviceD1, PowerDeviceD2 o PowerDeviceD3, el valor de Parameters.Power.ShutdownType proporciona información sobre el IRP de alimentación del sistema actual, si un IRP de alimentación del sistema está activo. En este caso, el valor de ShutdownType indica el estado de alimentación del sistema solicitado actualmente, o PowerActionNone si una solicitud del sistema no está pendiente. En Windows 98/Me, este campo siempre contiene PowerActionNone cuando irP solicita un estado de alimentación del dispositivo.
Requisitos
Encabezado |
Wdm.h (incluya Wdm.h, Ntddk.h o Ntifs.h) |