Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Un controlador para un adaptador de audio típico debe ser fácilmente capaz de admitir varias instancias de la misma tarjeta de adaptador de audio en un sistema. Casi todas las estructuras de datos que mantiene un controlador se almacenan en el búfer de extensión de dispositivo (vea la descripción del campo DeviceExtension de la estructura de DEVICE_OBJECT). Sin embargo, si varias instancias de un controlador comparten datos globales, esas instancias deben sincronizar su acceso a estos datos.
Un requisito adicional es que cada subdispositivo de una instancia determinada de una tarjeta de adaptador debe tener una cadena device-ID que identifique de forma única el subdispositivo en todas las instancias de la misma tarjeta de adaptador del sistema.
La manera más sencilla de lograrlo es exponer cada subdispositivo en la tarjeta del adaptador como un dispositivo lógicomente distinto al administrador plug and play. Esto se presenta como opción (1) en Dispositivos de audio multifunción.
Un segundo enfoque consiste en usar el controlador de bus multifunción suministrado por el sistema para administrar los subdispositivos en la tarjeta adaptadora. El controlador de bus MF asigna a cada subdispositivo un identificador de dispositivo que se garantiza que sea único en todo el sistema, incluso si el sistema contiene varias instancias de la misma tarjeta de adaptador. El controlador de bus MF admite diseños en los que los subdispositivos comparten un conjunto común de registros de configuración, pero cada subdispositivo tiene su propio conjunto de registros de direcciones base PCI. Los subdispositivos no deben tener dependencias ocultas entre sí y deben poder funcionar simultáneamente sin interferir entre sí ni con otros dispositivos del sistema. Esta es la opción (2) en dispositivos multifunción de audio.
Un tercer enfoque consiste en usar un controlador de autobús propietario para administrar los subdispositivos en una tarjeta de adaptador. Esto suele ser necesario si los subdispositivos tienen dependencias mutuas que se deben administrar de forma centralizada. Estas dependencias pueden producirse de dos maneras:
Los subdispositivos pueden compartir algún recurso en la tarjeta. Por ejemplo, si los subdispositivos comparten un procesador de señal digital (DSP), es posible que el controlador de bus deba descargar el sistema operativo propietario que se ejecuta en el DSP antes de iniciar el primer subdispositivo.
Un error de diseño puede provocar una dependencia entre subdispositivos. Por ejemplo, un error de diseño podría requerir que los subcomponentes se enciendan o apaguen en una secuencia determinada.
Cuando existe cualquier tipo de dependencia, un controlador de autobús propietario es casi siempre una solución mejor que presentar los subdispositivos directamente al administrador de Plug and Play e intentar ocultar la dependencia.
Si proporciona su propio controlador de bus para una tarjeta de adaptador, debe asegurarse de que los identificadores de dispositivo que asigne el controlador de bus sean únicos en todo el sistema.
Un controlador de bus proporciona un identificador de dispositivo para uno de sus elementos secundarios en respuesta a una consulta de IRP_MN_QUERY_ID desde el administrador de Plug and Play. El identificador se puede especificar de una de estas dos maneras, que el controlador de bus indica en su respuesta a una consulta de IRP_MN_QUERY_CAPABILITIES estableciendo el campo UniqueID de la estructura de DEVICE_CAPABILITIES en TRUE o FALSE:
UniqueID = VERDADERO
Esto significa que se garantiza que el nombre del hijo sea único en todo el sistema. La cadena de identificador de dispositivo contiene un identificador de dispositivo más un identificador de instancia, que es un número de serie que identifica de forma única la instancia de hardware.
UniqueID = FALSO
Esto significa que el nombre del hijo es único solo con respecto al padre. La mayoría de los dispositivos usan este medio de identificación. En este caso, el administrador de Plug and Play extiende la cadena device-ID que recibe para que sea única a través del sistema. La cadena extendida es una función del identificador único del dispositivo primario.
Todos los controladores de bus de audio deben establecer UniqueID = FALSE para sus hijos. Esto hace que el administrador de Plug and Play extienda la cadena de identificación del dispositivo secundario agregando información sobre el dispositivo primario para que el identificador sea único en la máquina.