Introducción a la clase Port

La mayoría de los controladores de hardware para dispositivos de audio basados en PCI y DMA se basan en la biblioteca de clases de puerto, que es accesible a través del controlador del sistema PortCls (Portcls.sys). PortCls es un controlador de clase de puerto de audio que Microsoft incluye como parte del sistema operativo. PortCls proporciona un conjunto de controladores de puerto que implementan la mayor parte de la funcionalidad de filtro de streaming de kernel genérico (KS). Por lo tanto, PortCls simplifica la tarea del desarrollador del controlador de audio. El proveedor de hardware solo tiene que suministrar un conjunto de controladores de minipuerto para controlar las funciones específicas del hardware de un adaptador de audio.

Aunque los proveedores de hardware tienen la opción de implementar sus propios filtros KS para sus dispositivos de audio, esta opción es difícil e innecesaria para los dispositivos de audio típicos. Puede desarrollar un filtro KS para ajustarse a Stream.sys, el controlador de clase Stream o Avstream.sys, el controlador de clase AVStream. Pero un filtro KS basado en Stream.sys no puede aprovechar las mejoras que solo están disponibles en AVStream. Para obtener más información sobre los filtros KS y PortCls, consulte Introducción con controladores de audio WDM.

La implementación interna de PortCls puede evolucionar para aprovechar las mejoras de streaming de kernel en versiones sucesivas de Windows mientras mantiene la compatibilidad con los controladores existentes.

PortCls se implementa en el archivo del sistema Portcls.sys como controlador de exportación (un archivo DLL en modo kernel) y contiene los siguientes elementos:

  • Un conjunto de funciones auxiliares a las que puede llamar el controlador del adaptador.

  • Colección de controladores de puerto de audio

Es responsabilidad del proveedor de hardware de un dispositivo de audio proporcionar un controlador de adaptador. El controlador del adaptador incluye el código de administración del controlador de inicialización y miniporte (incluida la función DriverEntry ) y una colección de controladores de miniporte de audio .

Cuando el sistema operativo carga el controlador del adaptador, el controlador del adaptador crea un conjunto de objetos de controlador de miniporte y solicita al controlador del sistema PortCls que cree un conjunto correspondiente de objetos de controlador de puerto. (El ejemplo de código en Creación de subdispositivos ilustra este proceso). Estos controladores de puerto suelen ser un subconjunto de los que están disponibles en el archivo Portcls.sys. Cada controlador de minipuerto se enlaza a un controlador de puerto coincidente de Portcls.sys para formar un controlador de subdispositivo completo. El controlador de subdevice port-and-miniport combinado es un filtro KS (consulte Filtros de audio). Por ejemplo, un controlador de adaptador típico podría contener tres controladores de minipuerto: WaveRT, DMusUART y Topología (con interfaces IMiniportWaveRT, IMiniportDMus e IMiniportTopology ). Durante la inicialización, estos controladores de minipuerto están enlazados a los controladores de puerto WaveRT, DMus y Topology (con interfaces IPortWaveRT, IPortDMus e IPortTopology ) que se encuentran en el archivo Portcls.sys. Cada uno de estos tres controladores de subdispositivos tiene la forma de un filtro KS. Los tres filtros exponen juntos la funcionalidad completa del adaptador de audio.

Normalmente, los controladores de puerto proporcionan la mayoría de la funcionalidad de cada clase de subdispositivo de audio. Por ejemplo, el controlador de puerto WaveRT realiza la mayor parte del trabajo necesario para transmitir datos de audio a un dispositivo de audio basado en DMA, mientras que el controlador de miniporte proporciona detalles específicos del dispositivo, como la dirección DMA y el nombre del dispositivo.

Los controladores de adaptador de audio y los controladores de minipuerto se escriben normalmente en Microsoft C++ y hacen un uso amplio de interfaces COM. La arquitectura del controlador port-miniport promueve el diseño modular. Los escritores de controladores de miniport deben implementar su controlador como una clase de C++ derivada de la interfaz IMiniport , que se define en el archivo de encabezado Portcls.h. La inicialización de hardware tiene lugar en el tiempo de carga del controlador, normalmente en el método Init de la clase derivada de IMiniport (por ejemplo, IMiniportWaveRT::Init). Para obtener más información sobre las implementaciones COM de los controladores de miniporte de audio, vea COM en el kernel.

En el diagrama siguiente se muestra la relación entre los controladores de puerto y minipuerto y su posición en la pila de audio.

Diagrama que ilustra la relación entre los controladores de puerto y miniport en la pila de audio.

En el diagrama anterior, el componente KSEndpoint es un archivo proporcionado por el sistema que se proporciona con Windows Vista y versiones posteriores de Windows. Este componente se proporciona en forma de DLL (Audiokse.dll). KSEndpoint abstrae el punto de conexión del dispositivo en modo kernel y proporciona al motor de audio acceso al punto de conexión abstracto. Para obtener más información sobre el motor de audio, consulta Explorar el motor de audio de Windows Vista.

La leyenda del diagrama anterior muestra los cuadros que representan los componentes de controlador que proporciona el proveedor. Tenga en cuenta que el borde superior de cada controlador de minipuerto interactúa con el borde inferior de cada controlador de puerto. Por ejemplo, el controlador de puerto WaveRT expone una interfaz IPortWaveRT al controlador de miniporte de WaveRT, que expone una interfaz IMiniportWaveRT al controlador de puerto. Estas interfaces a veces se conocen como interfaces de borde superior e inferior .

La clase de puerto y los controladores de clase AVStream son similares en que son controladores WDM y ambos admiten la arquitectura de streaming del kernel de WDM. Sin embargo, los controladores de clase de puerto difieren de los controladores de clase AVStream en las áreas de control y reentrada de varios procesadores. Los controladores de clase de puerto hacen lo siguiente:

  • Use un enfoque de tres niveles que combine el controlador de clase, los controladores de puerto y los controladores de minipuerto proporcionados por el proveedor.

  • Tener un número restringido de funciones de audio, lo que permite que los controladores de miniporte funcionen más cerca del hardware de audio.

  • Permitir que varios controladores de puerto o miniporte se vinculen para un dispositivo específico. Esta característica permite una mejor compatibilidad con tarjetas multifunción.

  • No admita buses externos (por ejemplo, USB). Todos los controladores de puerto admiten dispositivos que residen en los buses del sistema (PCMCIA y PCI).

La terminología para describir los puertos de audio y los controladores de minipuerto de WDM difiere en algunos aspectos de los términos que se usan para otras clases de controladores de Windows. Estas diferencias se explican en terminología de audio de WDM.

En esta sección se describen los temas siguientes:

Implementación de interfaces de Function-Specific

Compatibilidad con PortCls por sistema operativo