Cibles ACX et synchronisation des pilotes

Cette rubrique fournit un résumé des cibles ACX (Audio Class eXtensions) et de la synchronisation des pilotes.

Pour obtenir des informations générales sur ACX, consultez Vue d’ensemble des extensions de classe audio ACX et Résumé des objets ACX. Pour plus d’informations sur les IRP, consultez LES IRPs de paquets de demandes d’E/S ACX.

Notes

Les en-têtes et bibliothèques ACX ne sont pas inclus dans le WDK 10.0.22621.2428 (publié le 24 octobre 2023), mais sont disponibles dans les versions précédentes, ainsi que dans les dernières versions (série 25000) Insider Preview du WDK. Pour plus d’informations sur les versions en préversion du WDK, consultez Installation des versions en préversion du Kit de pilotes Windows (WDK).

Cibles ACX

ACX utilise WdfIoTarget pour faciliter les communications entre les objets ACX, les circuits, les broches, les flux, les éléments et les fabriques de circuits. WdfIoTarget est une abstraction WDF existante qui facilite la communication entre deux piles différentes.

Les pilotes utilisent AcxTargetCircuit pour communiquer avec un circuit distant exposé par une autre pile. AcxTargetCircuit est implémenté à l’aide d’un WdfIoTarget.

Les pilotes utilisent AcxTargetPin pour communiquer avec la broche d’un circuit distant exposée par une autre pile. AcxTargetPin est implémenté à l’aide d’un WdfIoTarget pour envoyer des messages à l’entité pin distante.

Les pilotes utilisent AcxTargetStream pour communiquer avec le flux d’un circuit distant exposé par une autre pile. AcxTargetStream est implémenté à l’aide d’un WdfIoTarget pour créer un flux distant et modifier l’état du flux distant.

Les pilotes utilisent AcxTargetElement pour communiquer avec l’élément d’un circuit distant exposé par une autre pile. AcxTargetElement est implémenté à l’aide d’un WdfIoTarget pour envoyer des messages à l’entité d’élément distant.

Les pilotes utilisent AcxTargetFactoryCircuit pour communiquer avec un instance d’usine de circuit distant. AcxTargetFactoryCircuit est implémenté à l’aide d’un WdfTarget pour envoyer des messages à la fabrique de circuit distant.

Pour interagir avec le circuit distant, chacun des types ACX répertoriés ci-dessus prend en charge :

  • properties
  • methods
  • événements

Tous ces types sont basés sur les types d’objets WdfIoTarget .

Ce diagramme montre l’architecture cible ACX et l’héritage des objets WDF Driver et Device.

Diagramme illustrant l’architecture cible ACX avec WDFDRIVER, WDFDEVICE, ACXTARGET, ACXSTREAM, ACXSTREAMFACTORY, ACXTARGETELEMENT et ACXTARGETPIN.

Synchronisation et sérialisation des pilotes ACX

Le terme synchronisation est un terme général, et il est utilisé pour référencer les opérations nécessaires pour partager des ressources (mémoire, E/S, etc.) entre plusieurs clients simultanés.

Le terme sérialisation est utilisé pour référencer un type de synchronisation pour un type d’objet (demandes d’E/S, rappels, etc.).

Les pilotes ACX sont des pilotes WDF, ce qui signifie que la synchronisation des pilotes ACX est basée sur les fonctionnalités de synchronisation de WDF :

  • Utilisation du nombre de références et du modèle objet hiérarchique.
  • Contrôle de flux configurable par le pilote pour les files d’attente d’E/S.
  • Verrou de présentation d’objet pour les objets d’appareil et les files d’attente d’E/S.
  • Sérialisation automatique des rappels de Plug-and-Play et d’alimentation.

Pour obtenir une description détaillée de la synchronisation et de la sérialisation, consultez Utilisation de la synchronisation automatique. Pour une explication plus complète, consultez développement de pilotes avec Windows Driver Foundation Microsoft Press Book.

WDF prend en charge les étendues de synchronisation suivantes :

  • Aucune étendue (valeur par défaut dans KMDF).
  • Étendue de l’appareil, WDF acquiert le verrou de présentation de l’objet d’appareil pour sérialiser les opérations.

La file d’attente ACX par défaut est une file d’attente série passive sans verrouillage. Le pilote doit terminer l’opération d’E/S avant la livraison de la suivante.

ACX ne prend pas en charge l’option d’étendue de la file d’attente. Avec cette option, le pilote sérialise les E/S sur une file d’attente spécifique. Différentes files d’attente peuvent avoir des étendues de synchronisation différentes.

ACX ne prend pas en charge la sérialisation de l’étendue de l’appareil. Par défaut, ACX sérialise les requêtes à l’aide d’une file d’attente d’E/S série sans verrouillage. Chaque objet de circuit et de flux a sa propre file d’attente dédiée. Pour plus d’informations sur les E/S de streaming, consultez la rubrique ACX Streaming.

Si un pilote détient un verrou, il ne doit jamais appeler (explicitement ou implicitement) du code hors de son contrôle tant que le verrou n’est pas libéré.

Pour référence historique, le PortCls d’origine utilise une étendue de synchronisation telle que la synchronisation de l’étendue de l’appareil WDF, où toutes les E/S pour tous les sous-appareils audio créés sur cet appareil passent par le même verrou de sérialisation. Ce type de sérialisation a été, et est toujours, la cause de divers problèmes. Dans les versions ultérieures de Windows 10 (version 1511 - TH2), PortCls a été mis à jour pour utiliser un autre verrou pour les demandes d’E/S de position de flux.

Voir aussi

Vue d’ensemble des extensions de classe audio ACX

Résumé des objets ACX

Informations sur la version d’ACX

Documentation de référence ACX

Communications entre les pilotes multi stack ACX