Terminología de audio de WDM

En esta sección se describen las diferencias en la terminología entre la arquitectura del controlador de audio de Microsoft Windows Driver Model (WDM) y la arquitectura genérica del controlador en capas de Windows. La arquitectura del controlador genérico se ejemplifica mediante controladores de puerto o miniport SCSI (consulte Arquitectura del controlador de almacenamiento).

Los términos definidos por las arquitecturas genéricas y del controlador de audio WDM son similares, pero tienen algunas diferencias importantes, como se describe a continuación.

Controlador de minipuerto (genérico)

El controlador de miniporte (genérico) es el controlador específico del hardware para un adaptador que reside en un bus del sistema (por ejemplo, PCI o ISA). Este controlador tiene un único punto de entrada, DriverEntry y registra una tabla de funciones con un controlador de puerto. Esta tabla de funciones actúa como interfaz superior del controlador de minipuerto.

El controlador de minipuerto se encuentra debajo del controlador de puerto en la pila del controlador. Es decir, todas las llamadas al controlador de minipuerto se realizan desde el controlador de puerto y todas las llamadas fuera del controlador de minipuerto son a la interfaz inferior del controlador del puerto.

En la ilustración siguiente se muestra el significado de la pila de términos, la interfaz de borde superior y la interfaz de borde inferior a medida que se usan en este contexto. El bloque que representa el controlador de puerto se apila en la parte superior del bloque que representa el controlador de minipuerto. Por lo tanto, el controlador de minipuerto se encuentra debajo del controlador de puerto en la "pila".

Diagrama que ilustra la pila de controladores con el controlador de puerto en la parte superior y el controlador de minipuerto que se muestra a continuación, en el que se muestran las interfaces de borde superior e inferior.

Los controladores de puerto y minipuerto se comunican a través de las interfaces de software que se exponen entre sí. En la ilustración anterior, estas interfaces están asociadas al borde inferior del bloque que representa el controlador de puerto y el borde superior del bloque que representa el controlador de minipuerto. Esta representación es el origen de los términos "interfaz de borde inferior" y "interfaz de borde superior".

Controlador de puerto (genérico)

El controlador de puerto (genérico) rodea un controlador de minipuerto.

Controlador de puerto:

  • Implementa filtros de streaming de WDM.

  • Proporciona una interfaz común al resto del sistema operativo.

  • Controla las solicitudes de E/S del sistema y vuelve a retransmitir estas solicitudes como llamadas a la tabla de funciones del controlador de miniport.

  • Proporciona al controlador de minipuerto una biblioteca de funciones de compatibilidad (la interfaz de borde inferior del controlador de puerto).

El controlador de puerto oculta muchos de los detalles del sistema operativo del controlador de minipuerto y el controlador de minipuerto oculta los detalles del hardware subyacente del controlador de puerto. La implementación del controlador de puerto puede someterse a cambios en diferentes versiones del sistema operativo, pero la interfaz del controlador del puerto al controlador de miniporte permanece más o menos sin cambios, lo que permite que el controlador de miniporte sea en gran medida independiente de la plataforma.

Minidriver (genérico)

El minidriver (genérico) representa un componente de hardware en un bus. El minidriver usa el controlador de autobús para comunicarse con el dispositivo físico a través del autobús, y enlaza el conductor del autobús y uno o varios controladores de clase.

Los controladores de clase ayudan al minidriver a presentar el dispositivo físico a los clientes como un tipo de dispositivo lógico. En entornos de WDM, un minidriver normalmente recibe solicitudes en formulario IRP de controladores de clase y envía solicitudes en formulario IRP a un controlador de autobús.

Un minidriver también puede tener que comunicarse con varios controladores de clase. Un ejemplo de minidriver que se enlaza a varios controladores de clase es un minidriver para una unidad CD-ROM en un bus IEEE 1394. Puede enlazarse a un controlador del sistema de archivos para que se pueda acceder a la unidad desde el sistema de archivos. Sin embargo, también se enlaza a un controlador del sistema Redbook para que el audio se pueda transmitir desde cds.

Controlador de bus (genérico)

El controlador de autobús (genérico) proporciona a los minidrivers acceso a un bus físico. La capa de abstracción de hardware (HAL) de Microsoft Windows se conoce a veces como controlador de bus del sistema porque proporciona acceso al bus del sistema. Para obtener más información, consulte Controladores de autobús.

Controlador de clase (genérico)

El controlador de clase (genérico) implementa un comportamiento común en una clase de dispositivos similares.

Controlador de clase:

  • Elimina la duplicación de la funcionalidad en controladores específicos del hardware.

  • No es específico del bus.

  • No es consciente de los problemas de recursos (por ejemplo, DMA e interrupciones).

Controlador de minipuerto (audio WDM)

El controlador de minipuerto (audio WDM) implementa una interfaz específica de función para una función en una tarjeta de adaptador de audio que reside en un bus del sistema. Un controlador de minipuerto es un componente de un controlador de adaptador. El sistema operativo no lo reconoce como controlador. A este respecto, un controlador de minipuerto de audio difiere de un controlador de minipuerto genérico.

A diferencia de los controladores de minipuerto genéricos, los controladores de miniporte de audio no implementan DriverEntry, no están registrados y no se basan completamente en sus respectivos controladores de puerto para soporte técnico. Varios controladores de minipuerto de audio que abordan varias funciones se pueden vincular a un único controlador de adaptador (y asociados a un único objeto de dispositivo).

Controlador adaptador (audio WDM)

El controlador de adaptador (audio WDM) sirve como contenedor para todos los controladores de minipuerto asociados a un adaptador determinado. El sistema operativo reconoce este controlador de adaptador y está incluido en su propio archivo .sys.

El controlador del adaptador de audio consta de un conjunto de controladores de minipuerto y código adicional que soluciona problemas de inicialización. Por ejemplo, un controlador de adaptador implementa un punto de entrada DriverEntry .

Controlador de puerto (audio WDM)

El controlador de puerto (audio WDM) implementa un filtro KS en nombre de un controlador de miniporte y funciona en el contexto de un controlador de clase de puerto. El controlador de puerto expone el código específico de la función del controlador de miniporte como filtro KS al sistema y es responsable de implementar la funcionalidad independiente del adaptador.

A diferencia del controlador de puerto genérico, el controlador de puerto de audio comparte el objeto de dispositivo y, por lo tanto, se crea una instancia diferente. Un controlador de puerto de audio también se parece más a un controlador de clase genérico que un controlador de puerto genérico en que implementa el comportamiento esperado de una clase de dispositivos (no es independiente del bus).

Controlador de clase port (audio WDM)

El controlador de clase de puerto (audio WDM) sirve como contenedor para una colección de controladores de puerto, cada uno de los cuales proporciona compatibilidad con un tipo diferente de función de hardware de audio. En la ilustración siguiente se muestran las relaciones entre la clase de puerto de audio y los controladores de adaptador.

Diagrama que muestra la relación entre los controladores de clase de puerto de audio, los controladores de adaptador y sus respectivos controladores de minipuerto.

Un controlador de adaptador administra una tarjeta de adaptador que puede contener varias funciones de hardware diferentes. Como se muestra en la ilustración anterior, el controlador del adaptador contiene un controlador de minipuerto para administrar cada tipo de función de hardware. Del mismo modo, el controlador de clase de puerto está diseñado para proporcionar compatibilidad con tarjetas de adaptador con varias funciones de hardware. El controlador de clase de puerto proporciona un controlador de puerto para cada uno de los tipos de función bien definidos que admite. El controlador del adaptador enlaza su controlador de minipuerto para una función determinada al controlador de puerto correspondiente para ese tipo de función. El controlador de puerto de cada función controla la comunicación con los clientes de audio WDM que usan la función. El controlador de minipuerto contiene todo el código específico del hardware para administrar esa función.

El controlador de clase de puerto (audio WDM) funciona principalmente como contenedor para varios subdispositivos asociados a un único objeto de dispositivo. Los controladores de bus crean un único objeto de dispositivo físico (PDO) para cada nodo de Plug and Play (PnP) que enumeran.

En el caso de un adaptador de audio, un único nodo PnP suele contener varias funciones de audio. Para exponer las diversas funciones asociadas a un nodo como dispositivos distintos, normalmente es necesario escribir un controlador de bus para el adaptador. El controlador de bus enumera las funciones de hardware y crea los PPO correspondientes. En este escenario, uno o varios controladores específicos de la función deben enlazarse a los PPO y negociar con el controlador de bus para acceder a recursos compartidos en el adaptador.

El controlador de clase de puerto usa la capacidad del controlador de streaming del kernel para exponer varios aspectos de un único objeto de dispositivo para que el sistema operativo reconozca el dispositivo como un conjunto de subdispositivos distintos.

Se anexa una cadena de referencia al nombre del dispositivo para especificar el subdevice deseado. El controlador de streaming de kernel distribuye los IRP de creación basados en esta cadena de referencia. Una vez creado un objeto de archivo, el controlador de streaming del kernel proporciona el envío de IRP destinados al objeto de archivo que representa el subdispositivo. Además, el controlador de clase de puerto implementa un modelo basado en COM para empaquetar subdispositivos.

Un controlador de adaptador crea una instancia de un controlador de puerto y un controlador de minipuerto y los enlaza pasando un puntero al controlador de minipuerto como parámetro a la función de inicialización del controlador de puerto (consulte el ejemplo de código en Creación de subdispositivos). La pila de controladores de puerto/miniport resultante constituye un filtro KS que representa uno de los tipos de subdispositivos que admite el controlador de clase de puerto.

La función PcRegisterSubdevice del controlador de la clase port registra el subdevice, que se percibe como un dispositivo por el resto del sistema. El controlador de puerto recibe IRP de creación destinados al objeto de dispositivo, pero solo para los IRP especificados por la cadena de referencia en la que se registra el subdispositivo. El controlador de puerto también recibe los IRP destinados a los objetos de archivo asociados al subdispositivo. El controlador de puerto es responsable del comportamiento del subdispositivo como filtro KS y para comunicarse adecuadamente con el controlador de minipuerto.

Para obtener más información sobre cómo diseñar controladores para tarjetas de audio multifunción, consulta Dispositivos de audio multifunción.