Compartir a través de


Propiedades de filtro, pin y nodo

Los controladores de audio del modelo de controlador de Microsoft Windows (WDM) representan un dispositivo de audio como filtro KS y representan un búfer de hardware en el dispositivo como un pin en el filtro. Cuando un cliente envía una solicitud de propiedad a uno de estos objetos de filtro o anclaje, el controlador de puerto recibe la solicitud y enruta la solicitud al controlador de propiedades adecuado en el controlador de puerto o el controlador de minipuerto.

Los dispositivos de audio admiten tres tipos de propiedades:

  • Propiedades del filtro

    Una propiedad de filtro es una propiedad del filtro como un todo en lugar de una propiedad de un pin o nodo determinado dentro del filtro. Las solicitudes de propiedades de filtro especifican identificadores de filtro, pero no especifican identificadores de nodo.

  • Propiedades de pin

    Una propiedad de pin es una propiedad de una instancia de pin determinada dentro del filtro. Las solicitudes de estas propiedades especifican identificadores de pines, pero no especifican identificadores de nodos.

  • Propiedades del nodo

    Una propiedad node es una propiedad de un nodo de topología dentro del filtro. Una solicitud de una propiedad de nodo especifica un identificador de filtro o un identificador de anclaje, además de un identificador de nodo.

Si una solicitud de propiedad de nodo especifica un filtro o un manejador de pin depende de si el nodo es único para el filtro. Para obtener más información, consulte la siguiente sección Propiedades del nodo.

En la ilustración siguiente se muestran estos tres tipos de solicitud de propiedad: una solicitud de propiedad pin enviada a una instancia de pin, una solicitud de propiedad de nodo enviada a un nodo (en una instancia de filtro o pin) y una solicitud de propiedad de filtro enviada a una instancia de filtro.

Diagrama que ilustra las solicitudes de propiedades de filtro, pin y nodo.

Normalmente, el controlador de puerto controla la mayoría de las solicitudes de propiedades de filtro y anclaje, y el controlador de miniporta controla las solicitudes de las propiedades del nodo.

El controlador de puerto proporciona sus propios manejadores integrados para las propiedades del filtro y del pin que son utilizados por el controlador del sistema SysAudio (consulte KSPROPSETID_Sysaudio y KSPROPSETID_Sysaudio_Pin) y el controlador del sistema WDMAud. Un controlador de miniport no necesita implementar controladores para las propiedades que maneja el controlador de puerto. Un controlador de miniporte típico proporciona pocos manejadores, si acaso, para las propiedades de filtro y pines. El controlador de miniporte proporciona los manejadores para las propiedades del nodo que representan funciones dependientes del hardware del dispositivo de audio. Los controladores de puerto no proporcionan ningún control integrado de las propiedades del nodo, a excepción de KSPROPERTY_TOPOLOGY_NAME.

Cuando tanto el controlador de puerto como el controlador de miniport proporcionan manejadores para la misma propiedad, el controlador de puerto usa su propio manejador y omite el del controlador de miniport.

Descriptores de filtro

El controlador de puerto obtiene punteros a los controladores de propiedades del controlador de miniport a través de una llamada al método IMiniport::GetDescription. A través de este método, el controlador de puerto recupera un puntero al descriptor de filtro del controlador de miniporte, que es una estructura de tipo PCFILTER_DESCRIPTOR. Esta estructura especifica los manejadores de propiedades del controlador de miniport para las propiedades de filtro, pin y nodo.

  • El miembro AutomationTable de la estructura PCFILTER_DESCRIPTOR apunta a la tabla de automatización del filtro. En esta tabla se especifican los manejadores de propiedades del controlador miniport para las propiedades de filtro.

  • El miembro Pins de la estructura PCFILTER_DESCRIPTOR contiene las tablas de automatización de los pines. Cada tabla especifica los manejadores de propiedades para las propiedades de conector de un tipo de conector determinado.

  • El miembro Nodos de la estructura PCFILTER_DESCRIPTOR contiene las tablas de automatización de los nodos de topología dentro del filtro. Cada tabla especifica los controladores de propiedades de las propiedades del nodo de un tipo de nodo determinado.

Propiedades de filtro

El controlador de puerto accede a los manejadores de propiedades de filtro del controlador miniport a través del miembro AutomationTable de PCFILTER_DESCRIPTOR. Normalmente, esta tabla de automatización contiene pocos controladores porque el controlador de puerto proporciona sus propios controladores integrados para todas las propiedades de filtro que SysAudio y WDMAud usan para consultar y configurar dispositivos de audio.

Sin embargo, el controlador de miniporte puede proporcionar controladores para propiedades de filtro, como KSPROPERTY_GENERAL_COMPONENTID que proporcionan información dependiente del hardware que no está disponible para el controlador de puerto. Dos de los controladores de audio de ejemplo del Kit de controladores de Microsoft Windows (WDK) manejan la propiedad KSPROPERTY_GENERAL_COMPONENTID. Para obtener más información, consulte las implementaciones del controlador de miniporte en el controlador de ejemplo Sysvad, que se describe en Controladores de audio de ejemplo.

Todos los controladores de puerto de Portcls.sys proporcionan gestión para los conjuntos de propiedades KSPROPSETID_Pin y KSPROPSETID_Topology. Todas las propiedades de estos conjuntos son propiedades de filtro, con la excepción de KSPROPERTY_TOPOLOGY_NAME, que es una propiedad de nodo (que usa un identificador de filtro, no un identificador de patillas, para especificar el destino de la solicitud). Los controladores de puerto admiten el siguiente subconjunto de las propiedades de KSPROPSETID_Pin:

KSPROPERTY_PIN_CATEGORY

KSPROPERTY_PIN_CINSTANCES

KSPROPERTY_PIN_COMMUNICATION

KSPROPERTY_PIN_CONSTRAINEDDATARANGES

KSPROPERTY_PIN_CTYPES

KSPROPERTY_PIN_DATAFLOW

KSPROPERTY_PIN_DATAINTERSECTION

KSPROPERTY_PIN_DATARANGES

KSPROPERTY_PIN_GLOBALCINSTANCES

KSPROPERTY_PIN_INTERFACES

KSPROPERTY_PIN_MEDIUMS

KSPROPERTY_PIN_NAME

KSPROPERTY_PIN_NECESSARYINSTANCES

KSPROPERTY_PIN_PHYSICALCONNECTION

KSPROPERTY_PIN_PROPOSEDATAFORMAT

KSPROPERTY_PIN_PROPOSEDATAFORMAT2

Estas propiedades proporcionan información sobre las fábricas de pines que pertenecen a un filtro. Normalmente, los clientes consultan el filtro sobre estas propiedades antes de crear instancias de pin. Los controladores de puerto admiten las cuatro propiedades de KSPROPSETID_Topology, que proporcionan información sobre la topología interna del filtro.

Además, el controlador de puerto DMus proporciona un manejador para la propiedad KSPROPERTY_SYNTH_MASTERCLOCK, que es una propiedad de solo lectura de un filtro DirectMusic. KSPROPERTY_SYNTH_MASTERCLOCK es miembro del conjunto de propiedades KSPROPSETID_SynthClock .

Propiedades del Pin

El controlador de puerto accede a los manejadores de propiedades de pines del miniport driver a través del miembro Pins de PCFILTER_DESCRIPTOR. Este miembro apunta a una matriz de descriptores de pin, y cada descriptor apunta a la tabla de automatización para un tipo de pin (identificado por un ID de pin, que es simplemente el índice de la matriz).

Normalmente, estas tablas de automatización contienen pocas entradas porque el controlador de puerto proporciona sus propios controladores para todas las propiedades de pin que usa SysAudio y WDMAud. Un controlador de miniporte tiene la opción de proporcionar controladores para una o varias propiedades de pin que el controlador de puerto no controla, pero solo los clientes que conocen estas propiedades pueden enviar solicitudes de propiedad para ellos.

A excepción del controlador de puerto de topología, todos los controladores de puerto en Portcls.sys proporcionan manejadores integrados para las siguientes propiedades de pin:

KSPROPERTY_CONNECTION_STATE

KSPROPERTY_CONNECTION_DATAFORMAT

KSPROPERTY_CONNECTION_ALLOCATORFRAMING

KSPROPERTY_STREAM_ALLOCATOR

KSPROPERTY_STREAM_MASTERCLOCK

KSPROPERTY_AUDIO_POSITION

KSPROPERTY_DRMAUDIOSTREAM_CONTENTID

Algunas de las propiedades de esta lista requieren información dependiente del hardware del controlador de miniport. Cuando el controlador de puerto recibe un IRP que contiene una solicitud para una de estas propiedades, no pasa el IRP al controlador de miniport. En su lugar, el controlador de puerto maneja la solicitud por sí mismo, pero su manejador obtiene la información necesaria llamando a un punto de entrada en el controlador de miniport. Por ejemplo, el controlador de puerto proporciona su propio controlador de propiedades para las solicitudes de KSPROPERTY_AUDIO_POSITION. Este controlador simplemente llama al método GetPosition del flujo del controlador de miniport (por ejemplo, IMiniportWavePciStream::GetPosition) para obtener la posición actual.

Propiedades del nodo

El controlador de puerto accede a los manejadores de propiedades de nodo del controlador de miniporte a través del miembro Nodes de PCFILTER_DESCRIPTOR. Este miembro apunta a una matriz de descriptores de nodo y cada descriptor apunta a la tabla de automatización de un tipo de nodo (identificado por un identificador de nodo, que es simplemente el índice de matriz). Normalmente, todos o la mayoría de los controladores de propiedades que pertenecen a un controlador de miniporta residen en la matriz Nodos . Un controlador de audio representa los controles de hardware de un dispositivo de audio como nodos de topología y usa el mecanismo de propiedades para proporcionar a los clientes acceso a la configuración de control dependiente del hardware.

Como se ha descrito anteriormente, un cliente envía una solicitud de propiedad de filtro a un identificador de filtro y una solicitud de propiedad de pin a un identificador de pin. A diferencia de una instancia de filtro o pin, un nodo no es un objeto del kernel y no tiene un identificador. Un cliente envía una solicitud de propiedad de nodo a un manejador de pin o a un manejador de filtro, pero la solicitud también especifica un identificador de nodo para indicar que la solicitud es para una propiedad de nodo en lugar de una propiedad de pin o de filtro.

A continuación se presentan reglas generales para determinar si una propiedad de nodo debe usar un identificador de filtro o un identificador de pin:

  • Si un filtro contiene varias instancias de un tipo de patilla determinado y cada patilla de ese tipo contiene un nodo con un identificador de nodo determinado, cada instancia de patilla contiene una instancia del nodo. En este caso, una solicitud de propiedad de nodo debe especificar un identificador de anclaje (en lugar de simplemente un identificador de filtro) para distinguir entre varias instancias del mismo tipo de nodo. La combinación de identificador de anclaje y identificador de nodo identifica inequívocamente una instancia de nodo determinada como destino de la solicitud.

  • Si un filtro contiene solo una instancia de un nodo determinado, una solicitud de propiedad de nodo especifica un identificador de filtro. La combinación de identificadores de filtro e identificador de nodo es suficiente para identificar de forma inequívoca el nodo que es el destino de la solicitud.

Sin embargo, antes de implementar un manejador para una propiedad de nodo determinada, el desarrollador del controlador debe hacer referencia a los Conjuntos de Propiedades de Controladores de Audio para comprobar si el destino de la propiedad debe especificarse como identificador de filtro o identificador de pin.

Actualmente, los controladores de puerto de Portcls.sys no proporcionan control integrado de las propiedades del nodo, a excepción de KSPROPERTY_TOPOLOGY_NAME.

Solicitudes de propiedades sobreespecificadas y infraespecificadas

Los conductores deben estar preparados para tratar con solicitudes relacionadas con bienes de clientes que no siguen las reglas anteriores. Las solicitudes pueden ser sobreespecificadas o infraespecificadas:

  • Solicitudes sobreespecificadas

    Si una solicitud de propiedad requiere solo un identificador de filtro, pero el cliente envía la solicitud a un manejador de pin en su lugar, el destino de la solicitud se sobreespecificó. Sin embargo, los controladores de software normalmente tratan la solicitud como válida; es decir, tratan la solicitud como si se hubiera enviado al filtro que contiene el pin.

  • Solicitudes infraespecificadas

    Si una solicitud de propiedad requiere un identificador de anclaje, pero un cliente envía la solicitud a un identificador de filtro en su lugar, el destino de la solicitud no está suficientemente especificado. Por ejemplo, si un filtro contiene varias instancias de anclaje con el mismo tipo de nodo, y un cliente envía una solicitud para una propiedad de ese tipo de nodo a un identificador de filtro en lugar de un identificador de anclaje, el controlador no tiene forma de determinar qué instancia de nodo debe recibir la solicitud. En este caso, el comportamiento depende del controlador. En lugar de generar errores automáticamente en todas las solicitudes infraespecificadas, algunos controladores tratan una solicitud set-property infraespecificada como válida. En este caso, la interpretación es que la solicitud establece el valor predeterminado para el identificador de nodo especificado. Cuando una fábrica de pines crea una nueva instancia de nodo, la propiedad que pertenece al nuevo nodo se inicializa con el valor predeterminado. Una solicitud que cambia el valor predeterminado no tiene ningún efecto en las instancias de nodo creadas antes de la solicitud. Además, los controladores fallan uniformemente en las solicitudes get-property poco especificadas porque el manejador no tiene forma de determinar qué instancia de nodo se debe consultar para la propiedad.

Excepciones a las reglas

Por razones históricas, algunas propiedades de audio tienen peculiaridades de comportamiento que infringen estas reglas generales. A continuación, se muestran algunos ejemplos:

  • Como se describe en Aplicar la Configuración Speaker-Configuration, un cliente puede cambiar la configuración del altavoz de un dispositivo de audio configurando la propiedad KSPROPERTY_AUDIO_CHANNEL_CONFIG de un nodo en 3D (KSNODETYPE_3D_EFFECTS). La configuración del altavoz es global porque cambia la configuración del altavoz para todos los flujos que forman parte de la combinación que reproduce el dispositivo a través de los altavoces. Según la regla general, una solicitud de propiedad de nodo que afecta al filtro como un todo debe especificar un identificador de filtro (más un identificador de nodo). Sin embargo, esta propiedad en particular requiere un identificador de pin en lugar de un identificador de filtro. El identificador de pin designa la instancia de pin que contiene el nodo 3-D que es el destino de la solicitud.

  • KSPROPERTY_SYNTH_VOLUME y KSPROPERTY_SYNTH_MASTERCLOCK son propiedades de un nodo synth (KSNODETYPE_SYNTHESIZER). Aunque ambas son propiedades de nodo, las solicitudes de estas propiedades no incluyen identificadores de nodo. (Tenga en cuenta que el descriptor de propiedad de la solicitud es una estructura de tipo KSPROPERTY, no KSNODEPROPERTY). Este comportamiento infringe la regla general que una propiedad de nodo requiere un identificador de nodo. A pesar de esta discrepancia, un controlador de miniporte que admita cualquiera de las propiedades debe proporcionar el controlador de propiedades a través del miembro Nodes de PCFILTER_DESCRIPTOR (en lugar del miembro Pins ).