Nodos de dispositivo y pilas de dispositivos

En Windows, los dispositivos se representan mediante nodos de dispositivo en el árbol de dispositivos Plug and Play (PnP). Normalmente, cuando se envía una solicitud de E/S a un dispositivo, varios controladores ayudan a controlar la solicitud. Cada uno de estos controladores está asociado a un objeto de dispositivo y los objetos de dispositivo se organizan en una pila. La secuencia de objetos de dispositivo junto con sus controladores asociados se denomina pila de dispositivos. Cada nodo de dispositivo tiene su propia pila de dispositivos.

Nodos de dispositivo y el árbol de dispositivos Plug and Play

Windows organiza los dispositivos en una estructura de árbol denominada Plug and Play árbol de dispositivos, o simplemente el árbol de dispositivos. Normalmente, un nodo del árbol de dispositivos representa un dispositivo o una función individual en un dispositivo compuesto. Sin embargo, algunos nodos representan componentes de software que no tienen ninguna asociación con dispositivos físicos.

Un nodo del árbol de dispositivos se denomina nodo de dispositivo. El nodo raíz del árbol de dispositivos se denomina nodo de dispositivo raíz. Por convención, el nodo del dispositivo raíz se dibuja en la parte inferior del árbol de dispositivos, como se muestra en el diagrama siguiente.

diagrama del árbol de dispositivos, en el que se muestran los nodos del dispositivo.

El árbol de dispositivos muestra las relaciones primarias o secundarias inherentes al entorno de PnP. Varios de los nodos del árbol de dispositivos representan buses que tienen dispositivos secundarios conectados a ellos. Por ejemplo, el nodo PCI Bus representa el bus PCI físico en la placa base. Durante el inicio, el administrador de PnP pide al controlador de bus PCI que enumere los dispositivos conectados al bus PCI. Esos dispositivos se representan mediante nodos secundarios del nodo PCI Bus. En el diagrama anterior, el nodo PCI Bus tiene nodos secundarios para varios dispositivos conectados al bus PCI, incluidos los controladores de host USB, un controlador de audio y un puerto PCI Express.

Algunos de los dispositivos conectados al bus PCI son autobuses por sí mismos. El administrador de PnP pide a cada uno de estos buses que enumere los dispositivos que están conectados a él. En el diagrama anterior, podemos ver que el controlador de audio es un bus que tiene un dispositivo de audio conectado a él. Podemos ver que el puerto PCI Express es un bus que tiene un adaptador de pantalla conectado a él y el adaptador de pantalla es un bus que tiene un monitor conectado a él.

Tanto si piensa en un nodo como si representa un dispositivo o un bus depende del punto de vista. Por ejemplo, puede considerar el adaptador de pantalla como un dispositivo que desempeña un papel clave en la preparación de fotogramas que aparecen en la pantalla. Sin embargo, también puede considerar el adaptador de pantalla como un bus capaz de detectar y enumerar monitores conectados.

Objetos de dispositivo y pilas de dispositivos

Un objeto de dispositivo es una instancia de una estructura de DEVICE_OBJECT . Cada nodo de dispositivo del árbol de dispositivos PnP tiene una lista ordenada de objetos de dispositivo y cada uno de estos objetos de dispositivo está asociado a un controlador. La lista ordenada de objetos de dispositivo, junto con sus controladores asociados, se denomina pila de dispositivos para el nodo de dispositivo.

Puede pensar en una pila de dispositivos de varias maneras. En el sentido más formal, una pila de dispositivos es una lista ordenada de pares (objeto de dispositivo, controlador). Sin embargo, en determinados contextos puede resultar útil pensar en la pila de dispositivos como una lista ordenada de objetos de dispositivo. En otros contextos, puede ser útil pensar en la pila de dispositivos como una lista ordenada de controladores.

Por convención, una pila de dispositivos tiene una parte superior y una parte inferior. El primer objeto de dispositivo que se va a crear en la pila de dispositivos está en la parte inferior y el último objeto de dispositivo que se va a crear y adjuntar a la pila de dispositivos está en la parte superior.

En el diagrama siguiente, el nodo de dispositivo Gizmo de Proseware tiene una pila de dispositivos que contiene tres pares (objeto de dispositivo, controlador). El objeto de dispositivo superior está asociado al controlador AfterThought.sys, el objeto de dispositivo central está asociado al controlador Proseware.sys y el objeto de dispositivo inferior está asociado al controlador Pci.sys. El nodo bus PCI del centro del diagrama tiene una pila de dispositivos que contiene dos pares (objeto de dispositivo, controlador), un objeto de dispositivo asociado a Pci.sys y un objeto de dispositivo asociado a Acpi.sys.

Diagrama que muestra los objetos de dispositivo ordenados en pilas de dispositivos en los nodos de dispositivo gizmo y pci de proseware.

¿Cómo se construye una pila de dispositivos?

Durante el inicio, el administrador de PnP solicita al controlador que cada bus enumere los dispositivos secundarios que están conectados al bus. Por ejemplo, el administrador de PnP pide al controlador de bus PCI (Pci.sys) que enumere los dispositivos conectados al bus PCI. En respuesta a esta solicitud, Pci.sys crea un objeto de dispositivo para cada dispositivo conectado al bus PCI. Cada uno de estos objetos de dispositivo se denomina objeto de dispositivo físico (PDO). Poco después de Pci.sys crea el conjunto de PDO, el árbol de dispositivos es similar al que se muestra en el diagrama siguiente.

diagrama de objetos de nodo pci y dispositivo físico para dispositivos secundarios.

El administrador de PnP asocia un nodo de dispositivo a cada PDO recién creado y busca en el registro para determinar qué controladores deben formar parte de la pila de dispositivos para el nodo. La pila de dispositivos debe tener un controlador de función (y solo uno) y, opcionalmente, puede tener uno o varios controladores de filtro. El controlador de función es el controlador principal de la pila de dispositivos y es responsable de controlar las solicitudes de lectura, escritura y control de dispositivos. Los controladores de filtro desempeñan roles auxiliares en el procesamiento de solicitudes de lectura, escritura y control de dispositivos. A medida que se carga cada función y controlador de filtro, crea un objeto de dispositivo y se asocia a la pila de dispositivos. Un objeto de dispositivo creado por el controlador de funciones se denomina objeto de dispositivo funcional (FDO) y un objeto de dispositivo creado por un controlador de filtro se denomina objeto de dispositivo de filtro (Filter DO). Ahora el árbol de dispositivos tiene un aspecto similar a este diagrama.

diagrama de un árbol de dispositivos que muestra los objetos de filtro, función y dispositivo físico en el nodo de dispositivo gizmo de proseware.

En el diagrama, observe que en un nodo, el controlador de filtro está por encima del controlador de función y, en el otro nodo, el controlador de filtro está debajo del controlador de función. Un controlador de filtro situado encima del controlador de funciones de una pila de dispositivos se denomina controlador de filtro superior. Un controlador de filtro que está debajo del controlador de función se denomina controlador de filtro inferior.

El PDO es siempre el objeto de dispositivo inferior de una pila de dispositivos. Esto resulta de la forma en que se construye una pila de dispositivos. El PDO se crea primero y, a medida que se conectan objetos de dispositivo adicionales a la pila, se adjuntan a la parte superior de la pila existente.

Nota Cuando se instalan los controladores de un dispositivo, el instalador usa información en un archivo de información (INF) para determinar qué controlador es el controlador de función y qué controladores son filtros. Normalmente, Microsoft proporciona el archivo INF o el proveedor de hardware. Una vez instalados los controladores de un dispositivo, el administrador de PnP puede determinar la función y filtrar los controladores del dispositivo buscando en el registro.

Conductores de autobús

En el diagrama anterior, puede ver que el controlador Pci.sys desempeña dos roles. En primer lugar, Pci.sys está asociado al FDO en el nodo del dispositivo PCI Bus. De hecho, creó el FDO en el nodo del dispositivo PCI Bus. Por lo tanto, Pci.sys es el controlador de función del bus PCI. En segundo lugar, Pci.sys está asociado al PDO en cada elemento secundario del nodo PCI Bus. Recuerde que creó los PPO para los dispositivos secundarios. El controlador que crea el PDO para un nodo de dispositivo se denomina controlador de bus para el nodo.

Si el punto de referencia es el bus PCI, Pci.sys es el controlador de función. Pero si su punto de referencia es el dispositivo Proseware Gizmo, Pci.sys es el controlador de autobús. Este rol dual es típico en el árbol de dispositivos PnP. Un controlador que actúa como controlador de función para un autobús también sirve como controlador de autobús para un dispositivo secundario del bus.

Pilas de dispositivos en modo de usuario

Hasta ahora hemos hablado de las pilas de dispositivos en modo kernel. Es decir, los controladores de las pilas se ejecutan en modo kernel y los objetos de dispositivo se asignan al espacio del sistema, que es el espacio de direcciones que solo está disponible para el código que se ejecuta en modo kernel. Para obtener información sobre la diferencia entre el modo kernel y el modo de usuario, vea Modo de usuario y modo kernel.

En algunos casos, un dispositivo tiene una pila de dispositivos en modo de usuario además de su pila de dispositivos en modo kernel. Los controladores en modo de usuario se basan a menudo en el marco de controlador de User-Mode (UMDF), que es uno de los modelos de controlador proporcionados por windows Driver Frameworks (WDF). En UMDF, los controladores son archivos DLL en modo de usuario y los objetos de dispositivo son objetos COM que implementan la interfaz IWDFDevice. Un objeto de dispositivo en una pila de dispositivos UMDF se denomina objeto de dispositivo WDF (WDF DO).

En el diagrama siguiente se muestra el nodo de dispositivo, la pila de dispositivos en modo kernel y la pila de dispositivos en modo de usuario para un dispositivo USB-FX-2. Los controladores de las pilas de modo de usuario y modo kernel participan en solicitudes de E/S dirigidas al dispositivo USB-FX-2.

diagrama que muestra las pilas de dispositivos en modo de usuario y modo kernel.

Conceptos para todos los desarrolladores de controladores

Pilas de controladores