Compartir a través de


Fábricas de filtros

Un controlador de adaptador de audio proporciona fábricas de filtros para administrar la creación de instancias de filtros. Cada generador de filtros puede crear una instancia de uno o varios filtros KS de un tipo determinado. Si un tipo de filtro encapsula una función de hardware determinada, el número de filtros de ese tipo que la fábrica puede instanciar está limitado por los recursos de hardware subyacentes.

Dado que un generador de filtros administra un bloque de funcionalidad de hardware en gran medida autónomo, cada fábrica de filtros se puede considerar un controlador de dispositivo propio. De hecho, el término controlador adaptador, como se utiliza en el párrafo anterior, hace referencia a un conjunto de controladores relacionados: fábricas de filtros, que se agrupan para administrar las distintas funciones de hardware en una tarjeta adaptadora.

Al igual que con cualquier otro controlador de Microsoft Windows Driver Model (WDM), un generador de filtros controla la administración de energía y la funcionalidad de configuración. Durante la instalación, el archivo INF del controlador registra uno o varios nombres de dispositivo de filtro (consulte Cadenas de identificación de dispositivos). Este proceso carga los nombres en el registro del sistema y asocia cada fábrica de filtros a una o varias categorías de filtros KS, como se describe en Instalación de interfaces de dispositivo para un adaptador de audio. Todos los dispositivos de audio se clasifican en KSCATEGORY_AUDIO, pero un dispositivo de audio también se puede clasificar en categorías adicionales, como KSCATEGORY_RENDER (para un dispositivo de representación de audio) o KSCATEGORY_CAPTURE (para un dispositivo de captura de audio). El controlador anuncia las funcionalidades generales de un dispositivo mediante las distintas categorías en las que registra el filtro para ese dispositivo. Cuando el controlador de sistema SysAudio, por ejemplo, requiere un dispositivo de audio de un tipo determinado, busca en el registro los dispositivos que se encuentran en las categorías adecuadas.

El sistema operativo usa la API de instalación, como se describe en Componentes de instalación de dispositivos, para detectar y enumerar todas las factorías de filtros de KSCATEGORY_AUDIO en el registro. La entrada del Registro de cada factoría especifica el nombre descriptivo de la factoría de filtros y su nombre de dispositivo, que es una cadena larga que un cliente pasa a la llamada de create-file que crea instancias del filtro. Esta llamada puede realizarse para ZwCreateFile desde el modo kernel o para CreateFile desde el modo de usuario. Un filtro es un objeto en modo kernel y se identifica mediante un identificador de kernel. La llamada a create-file devuelve un identificador de instancia que los clientes pueden usar para hacer referencia al filtro. Los clientes en modo de usuario o los filtros ascendentes del grafo de audio pueden usar este identificador para enviar o reenviar solicitudes IOCTL al filtro. Para obtener más información sobre CreateFile, consulte la documentación del SDK de Microsoft Windows.

Una tarjeta de adaptador de audio WDM típica podría residir en un bus PCI, por ejemplo, y contener varios conectores de E/S para representar o capturar datos de onda. Un solo dispositivo de audio en esta tarjeta podría contener conectores de salida de audio analógicos para altavoces y un cable de salida de línea, así como conectores de entrada de audio analógicos para recibir señales de un micrófono y un cable de entrada de línea. El sistema de audio WDM representa el dispositivo como un filtro y los enchufes de audio como pines en ese filtro.

El filtro de un dispositivo de audio se implementa como controladores de puerto y minipuerto independientes que están enlazados juntos para actuar al unísono:

  • El controlador miniport contiene el código específico del hardware.

  • El controlador de puerto contiene el código genérico que es común a todos los filtros de un tipo determinado.

El proveedor escribe el controlador de miniport, que contiene todo el código propietario que el filtro necesita para administrar el hardware de audio. El sistema operativo proporciona el controlador de puerto, al que se puede acceder a través del controlador del sistema PortCls (Portcls.sys; consulte controlador de adaptador de clase de puerto y controlador del sistema PortCls). Dividir la implementación del filtro en los controladores de puerto y minipuerto simplifica la tarea de escribir un controlador para un dispositivo propietario.

Cuando un generador de filtros crea una instancia de un filtro, primero crea el objeto de controlador de miniport para el filtro. A continuación, el generador de filtros crea una instancia del objeto de puerto adecuado y enlaza el objeto de controlador de miniporte a esa instancia para formar un filtro de funcionamiento completo. El ejemplo de código de creación de subdispositivos ilustra este proceso. Los controladores de puerto y minipuerto se comunican entre sí a través de interfaces de software bien definidas. Para obtener más información sobre estas interfaces, consulte Interfaces de minipuerto y Soporte para un dispositivo.

Un filtro de audio expone la estructura del dispositivo de audio subyacente como una colección de fábricas de pines, nodos y conexiones internas. El controlador de miniporta consolida esta información en un descriptor de filtro, que es una estructura de tipo PCFILTER_DESCRIPTOR. Esta estructura, a su vez, contiene descriptores individuales para las fábricas de pines, nodos y conexiones internas del filtro. Estos descriptores son estructuras de los siguientes tipos:

PCPIN_DESCRIPTOR

PCNODE_DESCRIPTOR

PCCONNECTION_DESCRIPTOR

Para obtener el descriptor de filtro del controlador de miniport, el controlador de puerto llama al método IMiniport::GetDescription.

Para obtener un ejemplo de cómo un controlador configura su estructura de PCFILTER_DESCRIPTOR, consulte el controlador de ejemplo sysvad, que se describe en controladores de audio de ejemplo.