IRP de paquetes de solicitudes de E/S de ACX
En este tema se proporciona un resumen de los IRP de paquetes de solicitud de EXtensions de clase de audio (ACX).
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 los destinos y la sincronización de ACX, consulte Destinos de ACX y sincronización de controladores.
Distribución de solicitudes de IRP
Un cliente de ACX especifica una acción a través de una solicitud de controlador (IRP). Para obtener información general sobre los IRP, consulte Paquetes de solicitud de E/S y E/S controladas por paquetes con IRP reutilizables.
El cliente envía esta solicitud a un circuito, pin, elemento o secuencia mediante el controlador de circuito o secuencia. El identificador de solicitud es un triplete:
- set (guid),
- id/index (ulong)
- valor opcional pin-id/node-id (ulong).
En el momento de la creación, el controlador puede asociar opcionalmente propiedades, métodos o eventos con uno de los siguientes objetos:
- pin
- circuito
- flujo
- element
Cada propiedad, método o evento se identifica mediante un identificador y un controlador de devolución de llamada. De forma predeterminada, ACX define todas las propiedades, métodos y eventos requeridos por los clientes KS (capas en modo de usuario), por lo que los controladores no necesitan redefinirlos. Los controladores solo necesitan definir sus propiedades, métodos, eventos personalizados.
Cuando ACX recibe una solicitud de IoCtrl de estilo ACX/KS, valida la solicitud y bloquea los búferes del llamador en memoria. Esta validación y bloqueo de búfer se realiza en una devolución de llamada de preproceso de WDM que ACX registró en el momento de la inicialización. Durante esta fase, ACX agrega su propia devolución de llamada de finalización al IRP de WDM antes de reenviarla a WDF para el envío normal. La devolución de llamada de finalización permite a ACX agregar o insertar soluciones alternativas de compatibilidad según sea necesario.
A continuación, WDF invoca la devolución de llamada IRP de distribución dinámica, en esta devolución de llamada ACX/driver (opcionalmente) asocia una cola de WDF a la solicitud. En esta devolución de llamada ACX busca el objeto ACX de destino: circuit, pin, circuit-element o stream mediante el identificador en el que se envió esta solicitud y el pin-id/node-id/circuit-element opcional dentro de la solicitud.
En un dispositivo de composición de audio es posible que el objeto de destino (solo circuito) se encuentre en una pila distinta de aquella en la que se envía originalmente la solicitud. Además, una solicitud puede necesitar actuar en varias pilas, un ejemplo de esto es un estado de cambio de secuencia.
Una vez identificado el destino, ACX comprueba si el circuito de destino o el objeto stream-object especifica una invalidación para la cola de procesamiento predeterminada, si no es así, ACX usa la cola predeterminada asociada con el identificador actual. A continuación, el controlador ACX/indica a WDF que inserte la solicitud en la cola especificada o predeterminada.
A continuación, WDF invoca la devolución de llamada del proceso en la llamada si está presente. ACX no necesita ni usa la devolución de llamada del proceso en la llamada porque ya bloqueó los búferes en la memoria en la devolución de llamada anterior al proceso. Por lo tanto, ACX informa a WDF de que no invoque la devolución de llamada en proceso después de especificar la cola de destino para la solicitud.
Uso de cola secundaria
La cola de ACX predeterminada es una cola administrada por energía, serie y sin bloqueo. El controlador debe mover cualquier solicitud que tome una cantidad de tiempo indeterminada en una cola secundaria. La cola administrada por controladores podría ser una cola manual-pasiva, donde el controlador puede mantenerse en estas solicitudes hasta que esté listo para completarlas más adelante.
Solicitudes de referencia de energía
ACX enciende automáticamente el dispositivo antes de enviar una solicitud al controlador. Esto se realiza implícitamente mediante una cola administrada por energía de WDF. Esto crea un comportamiento similar a portcls. Es decir, se toma una referencia de energía antes de enviar la solicitud.
Invocación del controlador de distribución de la cola
A continuación, WDF toma una referencia de energía e invoca el controlador de distribución de la cola. La cola predeterminada que está asociada al controlador ACX comprueba si hay invalidaciones de preproceso y, si está presente, ACX invoca la devolución de llamada del controlador registrado antes del proceso. ACX permite al controlador especificar invalidaciones basadas en el tipo de solicitud (propiedad, evento y método) y (opcionalmente) identificadores de solicitud.
Si se especificó una devolución de llamada anterior al proceso, después de que ACX invoque la devolución de llamada, la solicitud es propiedad del controlador. El controlador puede completar la solicitud o reenviarla de nuevo a ACX para el envío normal.
Si no se especificó una devolución de llamada anterior al proceso o si el controlador devuelve la solicitud a ACX, ACX recupera el objeto ACX de destino y busca la devolución de llamada del método o la propiedad declarada. A continuación, invoca la devolución de llamada que pasa la solicitud WDF y el objeto ACX de destino (circuit/stream/circuit-element).
A continuación, ACX (o para propiedades personalizadas, el controlador) realiza la acción solicitada y completa la solicitud, o si la solicitud tarda un período de tiempo indeterminado, el controlador puede mover la solicitud a una cola secundaria. El controlador es responsable de serializar y completar las solicitudes pendientes activas.
En este diagrama se muestra el flujo de trabajo de distribución de solicitudes típico.
En este diagrama se muestra el flujo de trabajo de distribución cuando el controlador tiene definida una devolución de llamada de preprocesamiento de ACX, aunque al final la solicitud se controla mediante el marco de ACX.
Interfaces internas de PnP de circuito ACX
Para facilitar la comunicación entre ACX Endpoint Manager (EM) y los componentes del controlador ACX (componentes en modo kernel o modo usuario), ACX define las siguientes interfaces de dispositivo PnP internas:
- ACXCATEGORY_CIRCUITFACTORY
- ACXCATEGORY_CIRCUIT
EM usa la interfaz ACXCATEGORY_CIRCUITFACTORY para indicar a un dispositivo de destino que cree o quite un circuito específico de este tipo. Esta interfaz está activa mientras el dispositivo de subrayado puede crear circuitos; de lo contrario, se deshabilita (por ejemplo: eliminación, eliminación por sorpresa, detención o eliminación manual).
El subsistema audio usa ACXCATEGORY_CIRCUIT (que se puede crear en una pila de dispositivos diferente de la pila del administrador de circuitos), para realizar un seguimiento y comunicarse con el circuito ACX. Esta interfaz está activa cuando el circuito se ha creado y está lista para procesar comandos.
Para obtener información sobre otros procesos de PnP y energía, consulte Enumeración de dispositivos ACX y Administración de energía de ACX.
Consulte también
Información general sobre las extensiones de clase de audio de ACX