Introducción a los recursos de hardware
Los recursos de hardware de un sistema son los puertos de E/S, los vectores de interrupción, los canales de acceso directo a la memoria (DMA) y otras rutas de comunicación que se deben asignar a cada dispositivo conectado al sistema. En los temas de esta sección se describe cómo Kernel-Mode controladores de Driver Framework (KMDF) negocian los requisitos de recursos de hardware para un dispositivo, revise la lista de recursos propuesta y, a continuación, reciba los recursos asignados. En esta sección también se describe cómo los controladores de KMDF y User-Mode Driver Framework (UMDF) acceden a los recursos asignados y asignan recursos asignados.
Después de que un usuario conecte un dispositivo PnP, el controlador que enumera el dispositivo normalmente crea una o varias configuraciones lógicas, que son combinaciones de recursos de hardware que el dispositivo puede usar. Entre ellas, figuran las siguientes:
Configuración de arranque que muestra los recursos de hardware que el dispositivo requiere cuando se inicia el sistema. (En el caso de los dispositivos PnP, esta información la proporciona el BIOS).
Configuraciones adicionales en las que el dispositivo puede funcionar. El controlador agrupa estas configuraciones adicionales en una lista de requisitos de recursos. El administrador de PnP finalmente seleccionará los recursos de esta lista para asignarlos al dispositivo.
Una vez que el controlador crea las configuraciones lógicas, las envía al marco y la plataforma las envía al administrador de PnP.
A continuación, el administrador de PnP determina qué controladores requiere el dispositivo y los carga si aún no están cargados. El administrador de PnP envía la lista de requisitos de hardware del dispositivo a los controladores del dispositivo para su revisión. Los controladores de función y filtro pueden modificar esta lista y enviarlos de vuelta al administrador de PnP.
El administrador de PnP examina la lista de requisitos de hardware modificados y determina cuáles de los recursos especificados están realmente disponibles en el sistema. Si el dispositivo requiere recursos que el administrador de PnP había asignado previamente a otro dispositivo, el administrador de PnP podría intentar redistribuir recursos entre los dispositivos del sistema.
A continuación, el administrador de PnP crea una lista de recursos, que es una lista de recursos que el administrador de PnP pretende asignar al dispositivo. El administrador de PnP envía esta lista a los controladores del dispositivo para su revisión. En este momento, los controladores de filtro y función pueden quitar recursos de la lista, pero no pueden agregar recursos a ella.
Por último, el administrador de PnP asigna recursos al dispositivo. El marco pasa la lista de recursos a los controladores de filtro y función del dispositivo, y el controlador de función del dispositivo realiza cualquier inicialización necesaria para que el dispositivo y el controlador puedan acceder a los recursos.
En los pasos siguientes se describe el proceso con más detalle:
Un controlador de bus detecta el dispositivo y lo enumera .
El marco llama a la función de devolución de llamada EvtDeviceResourcesQuery del controlador de bus, que crea una lista de recursos que describe la configuración de arranque del dispositivo.
El marco llama a la función de devolución de llamada EvtDeviceResourceRequirementsQuery del controlador de bus, que crea una lista de requisitos de recursos para el dispositivo.
El administrador de PnP determina qué controladores requiere el dispositivo y los carga, si aún no están cargados, para crear una pila de controladores para el dispositivo.
El administrador de PnP envía la lista de requisitos de recursos del dispositivo a la pila de controladores para su revisión. A medida que la lista recorre la pila de controladores, el marco llama a cada función y filtra la función de devolución de llamada EvtDeviceFilterRemoveResourceRequirements . A medida que la lista recorre la copia de seguridad de la pila, el marco llama a cada función y filtra la función de devolución de llamada EvtDeviceFilterAddResourceRequirements del controlador. Ambas funciones de devolución de llamada pueden modificar la lista de requisitos de recursos.
El administrador de PnP crea una lista de recursos para el dispositivo y la envía a la pila de controladores para su revisión. El marco llama a cada función y filtra la función de devolución de llamada EvtDeviceRemoveAddedResources del controlador, que quita los recursos que la función de devolución de llamada EvtDeviceFilterAddResourceRequirements del controlador agrega, por lo que el controlador de bus no intentará usarlos.
El marco recibe la lista de recursos final del administrador de PnP y la almacena.
Si un controlador llama a WdfInterruptCreate para crear objetos de interrupción, el marco busca recursos de interrupción en la lista de recursos y los asigna a los objetos de interrupción.
Una vez que el dispositivo ha entrado en un estado D0 sin inicializar, el marco llama a la función de devolución de llamada EvtDevicePrepareHardware de cada controlador, pasando versiones sin procesar y traducidas de la lista de recursos del dispositivo como argumento de entrada. El controlador puede guardar la lista de recursos, que es válida hasta que el marco llame a la función de devolución de llamada EvtDeviceReleaseHardware del controlador.