Destinos y sincronización de controladores de ACX

En este tema se proporciona un resumen de los destinos de de clase de audio eXtensions (ACX) y la sincronización de controladores.

Para obtener información general sobre ACX, consulte Información general sobre las extensiones de clase de audio ACX y Resumen de objetos de ACX. Para obtener información sobre IRP, consulte IRP de paquete de solicitud de E/S de ACX.

Destinos de ACX

ACX usa WdfIoTarget para facilitar las comunicaciones entre objetos ACX, circuitos, pines, secuencias, elementos y factorías de circuitos. WdfIoTarget es una abstracción de WDF existente para facilitar la comunicación entre dos pilas diferentes.

Los controladores usan AcxTargetCircuit para comunicarse con un circuito remoto expuesto por una pila diferente. AcxTargetCircuit se implementa mediante un WdfIoTarget.

Los controladores usan AcxTargetPin para comunicarse con el pin de un circuito remoto expuesto por una pila diferente. AcxTargetPin se implementa mediante un WdfIoTarget para enviar mensajes a la entidad remota del pin.

Los controladores usan AcxTargetStream para comunicarse con la transmisión de un circuito remoto expuesto por una pila diferente. AcxTargetStream se implementa mediante un WdfIoTarget para crear una transmisión remota y cambiar el estado de la transmisión remota.

Los controladores usan AcxTargetElement para comunicarse con el elemento de un circuito remoto expuesto por una pila diferente. AcxTargetElement se implementa mediante un WdfIoTarget para enviar mensajes a la entidad remota del elemento.

Los controladores usan AcxTargetFactoryCircuit para comunicarse con una instancia de fábrica de circuitos remotos. AcxTargetFactoryCircuit se implementa mediante un WdfTarget para enviar mensajes a la fábrica de circuitos remotos.

Para interactuar con el circuito remoto, cada uno de los tipos de ACX enumerados anteriormente admite:

  • properties
  • métodos
  • events

Todos estos tipos se basan en los tipos de objeto WdfIoTarget.

En este diagrama se muestra la arquitectura de destino de ACX y la herencia de los objetos de controlador y dispositivo WDF.

Diagrama que ilustra la arquitectura de destino de ACX con WDFDRIVER, WDFDEVICE, ACXTARGET, ACXSTREAM, ACXSTREAMFACTORY, ACXTARGETELEMENT y ACXTARGETPIN.

Sincronización y serialización de controladores ACX

El término sincronización es un término general y se usa para hacer referencia a las operaciones necesarias para compartir recursos (memoria, E/S, etc.) entre varios clientes simultáneos.

El término serialización se usa para hacer referencia a un tipo de sincronización para un tipo de objeto (solicitudes de E/S, devoluciones de llamada, etc.).

Los controladores de ACX son controladores WDF, lo que significa que la sincronización de controladores ACX se basa en las funcionalidades de sincronización de WDF:

  • El uso de recuentos de referencias y el modelo de objetos jerárquico.
  • Control de flujo configurable por controladores para colas de E/S.
  • Bloqueo de presentación de objetos para objetos de dispositivo y colas de E/S.
  • Serialización automática de plug and play y devoluciones de llamada de energía.

Para obtener una descripción detallada de la sincronización y la serialización, consulte Uso de la sincronización automática. Para obtener una explicación más completa, consulte el libro de Microsoft Press Desarrollo de controladores con Windows Driver Foundation.

WDF admite los siguientes ámbitos de sincronización:

  • Sin ámbito (valor predeterminado en KMDF).
  • Ámbito del dispositivo, WDF adquiere el bloqueo de presentación del objeto de dispositivo para serializar las operaciones.

La cola de ACX predeterminada es una cola pasiva y serie sin bloqueo. El controlador debe completar la operación de E/S antes de que se entregue la siguiente.

ACX no admite la opción de ámbito de cola. Con esta opción, el controlador serializa la E/S en una cola específica. Las distintas colas pueden tener distintos ámbitos de sincronización.

ACX no admite la serialización de ámbito de dispositivo. De forma predeterminada, ACX serializa las solicitudes mediante una cola de E/S serie sin bloqueo. Cada circuito y objeto de secuencia tienen su propia cola dedicada. Para obtener más información sobre las E/S de streaming, consulta el tema Streaming de ACX.

Si un controlador contiene un bloqueo, nunca debe llamar al código (explícita o implícitamente) fuera de su control hasta que se libere el bloqueo.

Como referencia histórica, PortCls original usa un ámbito de sincronización, como la sincronización del ámbito del dispositivo WDF, donde todas las E/S de todos los subdispositivos de audio creados en este dispositivo pasan por el mismo bloqueo de serialización. Este tipo de serialización era, y todavía es, la causa de varios problemas. En versiones posteriores de Windows 10 (versión 1511 - TH2) PortCls se actualizó para usar un bloqueo diferente para las solicitudes de E/S de posición de flujo.

Consulte también

Información general sobre las extensiones de clase de audio de ACX

Resumen de objetos de ACX

Información de versión de ACX

Documentación de referencia de la ACX

Comunicaciones entre controladores de varias pilas de ACX