Administración de energía para colas de E/S
Cuando el marco recibe una solicitud de E/S que se dirige a uno de los dispositivos del controlador, el marco coloca la solicitud en una cola de E/S. El controlador puede obtener solicitudes de E/S de la cola de E/S proporcionando controladores de solicitudes o sondeando la cola. Para obtener más información sobre las colas de E/S, vea Objetos de cola de marco.
A medida que diseñe el controlador, debe agrupar las solicitudes de E/S que recibirá el controlador en dos categorías:
Solicitudes que requieren que un dispositivo esté en su estado de trabajo (D0), entre las que se incluyen:
- Solicitudes de lectura o escritura que requieren que el controlador de funciones del dispositivo lea datos de, o escriba datos en el dispositivo.
- El control de dispositivos solicita que una función o controlador de bus no pueda atenderse sin tener acceso al dispositivo.
Solicitudes que no requieren que un dispositivo esté en su estado de trabajo (D0), entre las que se incluyen:
- El control de dispositivos solicita que una función o controlador de bus pueda atender sin tener acceso al dispositivo.
- Posiblemente todas las solicitudes que recibe un controlador de filtro.
- Todas las solicitudes que reciben todos los controladores de una pila de controladores, si la pila admite un dispositivo de solo software que no se comunica con ningún hardware.
A menos que escriba un controlador de filtro o un controlador para una pila que no se comunique con hardware, es probable que el controlador reciba algunas solicitudes que requieran que el dispositivo esté en su estado de trabajo, junto con algunos que no lo hacen.
Para admitir estos dos tipos de solicitudes, el marco proporciona dos tipos de colas de E/S: las que están administradas por energía y las que no. Cuando el controlador crea cada una de sus colas de E/S, establece el miembro PowerManaged en la estructura WDF_IO_QUEUE_CONFIG de la cola en WdfTrue o WdfFalse para indicar una de las siguientes opciones:
Si el controlador establece PowerManaged en WdfTrue, la cola se administra con energía.
Cuando las solicitudes de E/S están disponibles en una cola administrada por energía, el marco entrega las solicitudes al controlador solo si el dispositivo está en su estado de trabajo (D0). Por lo tanto, siempre que el controlador reciba una solicitud de una cola administrada por energía, el marco garantiza que el dispositivo está disponible. Si el dispositivo no está en su estado de funcionamiento, el marco almacena las solicitudes en la cola hasta que el dispositivo esté disponible.
Si el dispositivo está en un estado de bajo consumo porque está inactivo y si el marco coloca una solicitud de E/S en una de las colas administradas por energía del controlador, el marco pide a la pila de controladores que restaure el dispositivo a su estado de trabajo antes de que entregue la solicitud al controlador.
Si el dispositivo está en estado de baja potencia porque el sistema no está en su estado de trabajo (S0), y si el marco coloca una solicitud de E/S en una de las colas administradas por energía del controlador, el marco espera hasta que el dispositivo vuelva a su estado de trabajo (D0) y luego entregue la solicitud al controlador.
Dado que el marco no entrega solicitudes de E/S desde una cola administrada por energía al controlador si el dispositivo no está en su estado de trabajo, los controladores que se encuentran encima del propietario de la directiva de energía en la pila de controladores no deben usar colas de E/S administradas por energía. Si un controlador que se encuentra encima del propietario de la directiva de energía usa una cola administrada por energía y si el dispositivo está en un estado de bajo consumo, el controlador no recibe la solicitud y no puede pasarlo al propietario de la directiva de energía. Por lo tanto, el propietario de la directiva de energía, que controla el estado de energía del dispositivo, no activa el dispositivo.
Si el controlador establece PowerManaged en WdfFalse, la cola no se administra con energía.
Cuando las solicitudes de E/S están disponibles en una cola que no está administrada por energía, el marco entrega las solicitudes al controlador independientemente de si el dispositivo está en su estado de trabajo (D0). Si ha configurado la cola para que solo reciba solicitudes que no requieran acceso al dispositivo, el controlador puede atender cada solicitud, incluso si el dispositivo no está disponible.
Para obtener más información sobre las colas de E/S administradas por energía, consulte Uso de colas de E/S administradas por energía.
Algunos controladores requieren cierto control directo sobre Plug and Play (PnP) y las operaciones de administración de energía. Estos controladores pueden usar E/S autoadministrado. Para obtener más información, consulte Uso de E/S autoadministrado.