IRP_MN_POWER_SEQUENCE
Este IRP devuelve los valores de secuencia de energía de un dispositivo.
Código principal
Cuándo se envió
Un controlador envía este IRP como una optimización para determinar si su dispositivo entró realmente en un estado de alimentación específico. La compatibilidad con este IRP es opcional.
Para enviar este IRP, un controlador debe llamar a IoAllocateIrp para asignar el IRP, especificando el código IRP principal IRP_MJ_POWER y el código IRP secundario IRP_MN_POWER_SEQUENCE. A continuación, el controlador debe llamar a IoCallDriver (Windows Vista) o PoCallDriver (Windows Server 2003, Windows XP y Windows 2000) para pasar el IRP al siguiente controlador inferior. El administrador de energía no puede enviar este IRP.
Los remitentes de este IRP deben ejecutarse en IRQL <= DISPATCH_LEVEL.
Parámetros de entrada
Ninguno.
Parámetros de salida
Parameters.PowerSequence apunta a una estructura de POWER_SEQUENCE con los miembros siguientes:
SequenceD1
Número de veces que el dispositivo ha estado en estado de alimentación D1 o inferior.
SequenceD2
Número de veces que el dispositivo ha estado en estado de alimentación D2 o inferior.
SequenceD3
Número de veces que el dispositivo ha estado en estado de alimentación D3.
Los valores de secuencia realizan un seguimiento del número mínimo de veces que un dispositivo ha estado en el estado de alimentación correspondiente o en un estado de potencia inferior.
El controlador de bus incrementa los valores de SequenceD1, SequenceD2 y SequenceD3 al menos cada vez que el dispositivo entra en el estado de alimentación correspondiente o en un estado de potencia inferior.
Bloque de estado de entrada/salida
Un controlador establece Irp-IoStatus.Status> en STATUS_SUCCESS para indicar que ha devuelto la información solicitada o que STATUS_NOT_IMPLEMENTED para indicar que no admite este IRP.
Operación
Este IRP devuelve los valores de secuencia de energía de un dispositivo. Los conductores de autobús pueden controlarlo opcionalmente; Opcionalmente, los controladores de función y filtro pueden enviarlos.
Para un dispositivo que tarda mucho tiempo en cambiar el estado, este IRP proporciona una optimización útil. Cada vez que el dispositivo cambia su estado de alimentación, su controlador de bus incrementa el valor de secuencia para ese estado de alimentación. El controlador de autobús inicializa los valores de secuencia en tiempo de arranque y los incrementa continuamente posteriormente; no deben restablecerse a cero.
Un propietario de la directiva de dispositivo puede enviar este IRP una vez para obtener los valores de secuencia antes de apagar el dispositivo y una vez más para obtener nuevos valores al restaurar la energía en el dispositivo. Al comparar los dos conjuntos de valores, el controlador puede determinar si el dispositivo entró realmente en el estado de menor potencia. Si el dispositivo no perdió energía, el controlador puede evitar una reinicialización con mucho tiempo cuando el dispositivo vuelve al estado D0.
Por ejemplo, si el dispositivo tarda mucho tiempo en restaurar la energía al alcanzar el estado D2, el controlador puede almacenar el valor SequenceD2 antes de establecer el estado del dispositivo en D2 o inferior. Más adelante, cuando se restaura la alimentación en el dispositivo, el controlador puede comparar el nuevo valor SequenceD2 con su valor almacenado para determinar si el estado del dispositivo realmente se quitó por debajo de D2. Si los valores coinciden, el dispositivo no entró realmente en estado de alimentación D2 o un estado inferior, y el controlador puede evitar reinicializar el dispositivo.
Requisitos
Encabezado |
Wdm.h (incluya Wdm.h, Ntddk.h o Ntifs.h) |