Pila de dispositivos WDM de ejemplo
En esta sección se describen los objetos de dispositivo creados por un posible conjunto de controladores para el hardware USB para ilustrar los objetos de dispositivo WDM y cómo se superponen.
En la ilustración siguiente se muestran los objetos de dispositivo creados por los controladores de ejemplo descritos en Capas de controladores de WDM: un ejemplo.
A partir de la parte inferior de esta figura, los objetos de dispositivo de las pilas de dispositivos de ejemplo incluyen:
Un PDO y un FDO para el bus PCI.
El controlador de bus raíz enumera el bus del sistema interno (el bus raíz) y crea un PDO para cada dispositivo que encuentra. Uno de estos PPO es para el bus PCI. (El PDO y el FDO para el bus raíz no se muestran en la ilustración).
El administrador de PnP identifica el controlador PCI como controlador de función para el bus PCI, carga el controlador (si aún no está cargado) y pasa el PDO al controlador PCI. En su rutina AddDevice , el controlador PCI crea un FDO para el bus PCI (IoCreateDevice) y conecta el FDO a la pila de dispositivos (IoAttachDeviceToDeviceStack) para el bus PCI. El controlador PCI crea y adjunta este FDO como parte de sus responsabilidades como controlador de función para el bus PCI.
En este ejemplo no hay controladores de filtro para el bus PCI.
Un PDO y un FDO para el controlador de host USB.
El administrador PnP dirige al controlador PCI para iniciar su dispositivo (IRP_MN_START_DEVICE) y, a continuación, consulta al controlador PCI para sus elementos secundarios (IRP_MN_QUERY_DEVICE_RELATIONS con el tipo de relación busRelations). En respuesta, el controlador PCI enumera los dispositivos en su bus. En este ejemplo, el controlador PCI busca un controlador de host USB y crea un PDO para ese dispositivo. La flecha ancha de la ilustración indica que el controlador de host USB es un "secundario" del bus PCI. El controlador PCI crea PPO para sus dispositivos secundarios como parte de sus responsabilidades como controlador de autobús para el bus PCI.
El administrador de PnP identifica el par de controladores de clase y miniclase del controlador de host USB como controlador de función para el controlador de host USB y carga el par de controladores. El administrador de PnP llama al par de controladores en el momento adecuado para crear y conectar un FDO para el controlador de host USB.
En este ejemplo no hay controladores de filtro para el controlador de host USB.
Un PDO y un FDO para el concentrador USB.
El controlador de host USB enumera su bus, localiza el concentrador USB en el único puerto y crea un PDO para el concentrador. El controlador del concentrador USB crea y conecta un FDO para el concentrador.
En este ejemplo no hay controladores de filtro para el concentrador USB.
Un PDO, un FDO y dos DO de filtro para el dispositivo joystick.
El controlador del concentrador USB enumera su bus, localiza un dispositivo HID (el joystick) y crea un PDO para el joystick.
En este ejemplo, se ha configurado un controlador de filtro de nivel inferior en el registro para dispositivos de joystick, por lo que el administrador de PnP carga el controlador de filtro. El controlador de filtro determina que es relevante para el dispositivo y crea y adjunta un do de filtro a la pila de dispositivos.
El administrador PnP determina que el controlador de función para el dispositivo joystick es el par de controladores de clase/miniclase HID y carga esos controladores. El par de controladores consta de un controlador de miniclase vinculado a un archivo DLL de controlador de clase; juntos actúan como un controlador de función para el dispositivo. El par de controladores de clase/miniclase crea un objeto de dispositivo, el FDO y lo adjunta a la pila de dispositivos.
Un controlador de filtro de nivel superior crea y adjunta un filtro DO a la pila de dispositivos, de forma similar al filtro de nivel inferior.
Tenga en cuenta que el PDO creado por el controlador de bus primario siempre está en la parte inferior de la pila de dispositivos para un dispositivo determinado. Cuando los controladores controlan PnP o IRP de alimentación, deben pasar cada IRP todo el camino hacia abajo de la pila del dispositivo al PDO y a su controlador de autobús asociado.
En la ilustración siguiente se muestran las mismas pilas de dispositivos que la ilustración anterior, pero hace hincapié en qué objetos de dispositivo se crean y administran los controladores.
Un controlador de autobús abarca más de una pila de dispositivos. Un controlador de bus crea el FDO para su adaptador o controlador de bus y crea un PDO para cada uno de sus dispositivos secundarios.