Compartir a través de


Uso de E/S de Self-Managed

La mayoría de los controladores basados en marcos aprovechan las funcionalidades de administración de energía y PnP del marco para los dispositivos que admiten. En otras palabras, la mayoría de los controladores basados en marcos permiten que el marco administre el PnP de un dispositivo y los estados de energía haciendo lo siguiente:

  • Proporcionar funciones de devolución de llamada EvtDeviceD0Entry y EvtDeviceD0Exit .

  • Proporcionar funciones de devolución de llamada EvtDevicePrepareHardware y EvtDeviceReleaseHardware .

  • Uso de colas administradas por energía para solicitudes de E/S que requieren que el dispositivo esté en su estado de trabajo y que use colas que no estén administradas con energía para todas las demás solicitudes.

Sin embargo, algunos controladores basados en marcos requerirán un mayor conocimiento del estado de sus dispositivos, incluidos los controladores en las situaciones siguientes:

  • Las operaciones que realiza un controlador no están determinadas por un conjunto de solicitudes de E/S que el controlador recibe de las colas de E/S del marco.

  • Un controlador se comunica con controladores antiguos que no son de marco y se ocupa directamente de las interfaces WDM.

  • Las solicitudes de E/S que recibe un controlador no se pueden dividir en dos grupos: aquellos que requieren que el dispositivo esté en su estado de trabajo y los que no lo hagan.

La mayoría de los controladores no están en una de las situaciones anteriores, pero si el controlador es, es posible que tenga que tener más control directo sobre las operaciones PnP y administración de energía del dispositivo. Estos controladores pueden usar E/S autoadministrado. El uso de E/S autoadministrado significa que se notifica al controlador (por medio de un conjunto de funciones de devolución de llamada) siempre que se conecte o desconecte sus dispositivos, y cada vez que el dispositivo se detenga temporalmente.

Tenga en cuenta que un controlador puede usar E/S autoadministrado y seguir usando las colas de E/S del marco, ya sea como colas administradas por energía o no. Por ejemplo, un controlador puede usar las colas de E/S del marco, no administradas por energía, con un conjunto de funciones de devolución de llamada de E/S autoadministradas.

Para usar E/S autoadministrada, el controlador registra un conjunto adicional de funciones de devolución de llamada de eventos cuando llama a WdfDeviceInitSetPnpPowerEventCallbacks. Estas funciones de devolución de llamada de eventos son:

Cuando el dispositivo entra en su estado de trabajo (D0) por primera vez, el marco llama a la función de devolución de llamada EvtDeviceSelfManagedIoInit del controlador. Esto sucede cada vez que un usuario conecta el dispositivo al sistema y cada vez que se reinicia el sistema.

Hay tres circunstancias en las que un controlador debe detener las operaciones de E/S de un dispositivo: el dispositivo está a punto de entrar en un estado de bajo consumo, está a punto de quitarse o ya se ha quitado inesperadamente. En la lista siguiente se examina cada una de estas circunstancias en detalle:

  • El dispositivo está a punto de entrar en un estado de bajo consumo y finalmente volverá a su estado de trabajo.

    Cuando el dispositivo está a punto de entrar en un estado de bajo consumo (porque el dispositivo ha estado inactivo, todo el sistema entra en un estado de bajo consumo o el administrador de PnP redistribuye los recursos de hardware del sistema), el marco llama a la función de devolución de llamada EvtDeviceSelfManagedIoSuspend del controlador. Después de que el dispositivo vuelva a escribir su estado de trabajo, el marco llama a la función de devolución de llamada EvtDeviceSelfManagedIoRestart del controlador.

  • El dispositivo está a punto de quitarse.

    Para controlar la eliminación de dispositivos solicitados por el usuario, el marco llama a la función de devolución de llamada EvtDeviceSelfManagedIoSuspend del controlador antes de detener el dispositivo. Después de detener el dispositivo, el marco llama a la función de devolución de llamada EvtDeviceSelfManagedIoFlush del controlador. Una vez quitado el dispositivo, el marco llama a la función de devolución de llamada EvtDeviceSelfManagedIoCleanup .

  • El dispositivo ya se ha quitado inesperadamente (eliminación sorpresa).

    Si el controlador del bus del dispositivo determina que el dispositivo ya no está presente, o si otro controlador de la pila determina que el dispositivo no responde, el controlador que detectó el problema informa al administrador de PnP. A continuación, el administrador de PnP informa al resto de los controladores de que el dispositivo ha desaparecido. En el caso de los controladores basados en marcos, el marco recibe el mensaje del administrador de PnP y llama a las funciones de devolución de llamada EvtDeviceSelfManagedIoSuspend, EvtDeviceSelfManagedIoFlush y EvtDeviceSelfManagedIoCleanup .

    (El controlador también puede registrar una función de devolución de llamada EvtDeviceSurpriseRemoval . Si el dispositivo estaba en su estado de trabajo (D0) cuando se quitó, el marco llama a EvtDeviceSurpriseRemoval antes de llamar a las funciones de devolución de llamada de E/S autoadministradas. Si el dispositivo estaba en un estado de bajo consumo cuando se quitó, se llama a EvtDeviceSurpriseRemoval después de EvtDeviceSelfManagedIoSuspend)

Para obtener más información sobre el orden en que el marco llama a las funciones de devolución de llamada de eventos de un controlador, consulte Escenarios de administración de energía y PnP.

Aunque rara vez es necesario, el marco permite a los controladores tener aún más control sobre el PnP de un dispositivo y los estados de energía, accediendo a las máquinas de estado en el marco.