Condividi tramite


Destinazioni ACX e sincronizzazione driver

Questo argomento fornisce un riepilogo delle destinazioni e della sincronizzazione dei driver delle classi audio (ACX).

Per informazioni generali su ACX, vedere Panoramica delle estensioni della classe audio ACX e Riepilogo degli oggetti ACX. Per informazioni sui runtime di integrazione, vedere IRP della richiesta di I/O ACX.

Destinazioni ACX

ACX usa WdfIoTarget per facilitare le comunicazioni tra oggetti ACX, circuiti, pin, flussi, elementi e circuiti factory. WdfIoTarget è un'astrazione WDF esistente per facilitare la comunicazione tra due stack diversi.

I driver usano AcxTargetCircuit per comunicare con un circuito remoto esposto da uno stack diverso. AcxTargetCircuit viene implementato usando un WdfIoTarget.

I driver usano AcxTargetPin per comunicare con il pin di un circuito remoto esposto da uno stack diverso. AcxTargetPin viene implementato usando un WdfIoTarget per inviare messaggi all'entità pin remota.

I driver usano AcxTargetStream per comunicare con il flusso di un circuito remoto esposto da uno stack diverso. AcxTargetStream viene implementato usando un WdfIoTarget per creare un flusso remoto e modificare lo stato del flusso remoto.

I driver usano AcxTargetElement per comunicare con l'elemento di un circuito remoto esposto da uno stack diverso. AcxTargetElement viene implementato usando un WdfIoTarget per inviare messaggi all'entità dell'elemento remoto.

I driver usano AcxTargetFactoryCircuit per comunicare con un'istanza remota della factory del circuito. AcxTargetFactoryCircuit viene implementato usando un WdfTarget per inviare messaggi alla factory del circuito remoto.

Per interagire con il circuito remoto, ognuno dei tipi ACX elencati sopra supporta:

  • proprietà
  • metodi
  • eventi

Tutti questi tipi sono basati sui tipi di oggetto WdfIoTarget .

Questo diagramma mostra l'architettura di destinazione ACX e l'ereditarietà dagli oggetti Driver e Device di WDF.

Diagramma che illustra l'architettura di destinazione ACX con WDFDRIVER, WDFDEVICE, ACXTARGET, ACXSTREAM, ACXSTREAMFACTORY, ACXTARGETELEMENT e ACXTARGETPIN.

Sincronizzazione e serializzazione dei driver ACX

Il termine sincronizzazione è un termine generale e viene usato per fare riferimento alle operazioni necessarie per condividere le risorse (memoria, I/O e così via) tra più client simultanei.

Il termine serializzazione viene usato per fare riferimento a un tipo di sincronizzazione per un tipo di oggetto (richieste di I/O, callback e così via).

I driver ACX sono driver WDF, il che significa che la sincronizzazione dei driver ACX si basa sulle funzionalità di sincronizzazione di WDF:

  • Uso dei conteggi dei riferimenti e del modello a oggetti gerarchico.
  • Controllo del flusso configurabile dal driver per le code di I/O.
  • Blocco della presentazione degli oggetti per gli oggetti dispositivo e le code di I/O.
  • Serializzazione automatica di Plug and Play e callback di alimentazione.

Per una descrizione approfondita della sincronizzazione e della serializzazione, vedere Uso della sincronizzazione automatica. Per una spiegazione più completa, vedere la pagina relativa allo sviluppo di driver con Windows Driver Foundation Microsoft Press Book.

WDF supporta gli ambiti di sincronizzazione seguenti:

  • Nessun ambito (impostazione predefinita in KMDF).
  • Ambito del dispositivo, WDF acquisisce il blocco della presentazione dell'oggetto dispositivo per serializzare le operazioni.

La coda ACX predefinita è una coda seriale passiva senza blocchi. Il driver deve completare l'operazione di I/O prima che venga recapitata la successiva.

ACX non supporta l'opzione di ambito della coda. Con questa opzione il driver serializza le operazioni di I/O in una coda specifica. Le code diverse possono avere ambiti di sincronizzazione diversi.

ACX non supporta la serializzazione dell'ambito del dispositivo. Per impostazione predefinita, ACX serializza le richieste usando una coda di I/O seriale senza blocchi. Ogni circuito e oggetto flusso ha una propria coda dedicata. Per altre info sullo streaming di I/O, vedere l'argomento ACX Streaming.

Se un driver contiene un blocco, non deve mai chiamare il codice (in modo esplicito o implicito) all'esterno del controllo fino al rilascio del blocco.

Per riferimento cronologico, portCls originale usa un ambito di sincronizzazione come la sincronizzazione dell'ambito del dispositivo WDF, in cui tutte le operazioni di I/O per tutti i sotto-dispositivi audio creati in questo dispositivo passano attraverso lo stesso blocco di serializzazione. Questo tipo di serializzazione era, ed è ancora, la causa di vari errori. Nelle versioni successive di Windows 10 (versione 1511 - TH2) PortCls è stato aggiornato per usare un blocco diverso per le richieste di I/O della posizione del flusso.

Vedi anche

Panoramica delle estensioni della classe audio ACX

Riepilogo degli oggetti ACX

Informazioni sulla versione di ACX

Documentazione di riferimento su ACX

Comunicazioni tra driver multi stack ACX