Partager via


IRP de paquet de requête d’E/S ACX

Cette rubrique fournit un résumé des IRP de paquets de requêtes d'E/S Audio Class eXtensions (ACX).

Pour des informations générales sur l'ACX, voir Vue d'ensemble des extensions de classe audio ACX et Résumé des objets ACX. Pour plus d'informations sur les cibles ACX et la synchronisation, voir Cibles ACX et synchronisation des pilotes.

Répartition des requêtes IRP

Un client ACX spécifie une action par le biais d'une requête de pilote (IRP). Pour des informations générales sur les IRP, voir Paquets de requêtes d'E/S et E/S par paquets avec IRP réutilisables.

Le client envoie cette requête à un circuit/une broche/un élément/un flux en utilisant la poignée du circuit ou du flux. L'ID de la requête est un triplet :

  • set (guid),
  • id/index (ulong)
  • valeur facultative pin-id/node-id (ulong).

Au moment de la création, le pilote peut éventuellement associer des propriétés/méthodes/événements à un ou plusieurs des objets suivants :

  • pin
  • circuit
  • flux
  • element

Chaque propriété/méthode/événement est identifié par un ID et un gestionnaire de rappel. Par défaut, l'ACX définit toutes les propriétés/méthodes/événements requis par les clients KS (couches en mode utilisateur), les pilotes n'ont donc pas besoin de les redéfinir. Les pilotes n'ont donc pas besoin de les redéfinir. Les pilotes doivent uniquement définir leurs propriétés/méthodes/événements personnalisés.

Lorsque ACX reçoit une requête IoCtrl de style ACX/KS, il valide la requête et verrouille les tampons de l'appelant en mémoire. Cette validation et ce verrouillage des tampons sont effectués dans un rappel de pré-traitement WDM que l'ACX a enregistré au moment de l'initialisation. Au cours de cette phase, l'ACX ajoute son propre rappel de fin de traitement à l'IRP de la WDM avant de la rediriger vers la WDF pour un traitement normal. Le rappel d'achèvement donne à l'ACX l'occasion d'ajouter/injecter des solutions de contournement de la compatibilité si nécessaire.

Ensuite, WDF invoque le rappel de l'IRP de répartition dynamique, dans ce rappel, ACX/pilote associe (facultativement) une file d'attente WDF à la requête. Dans ce rappel, l'ACX localise l'objet ACX cible : circuit, pin, élément de circuit ou flux en utilisant le handle sur lequel cette requête a été envoyée, et le pin-id/node-id/circuit-element optionnel dans la requête.

Dans un appareil composite audio, il est possible que l'objet cible (circuit uniquement) soit situé sur une pile différente de celle sur laquelle la requête est envoyée à l'origine. En outre, une requête peut avoir besoin d'agir sur plusieurs piles, par exemple dans le cas d'un changement d'état de flux.

Une fois la cible identifiée, l'ACX vérifie si le circuit/objet de flux cible spécifie un remplacement pour la file d'attente de traitement par défaut ; si ce n'est pas le cas, l'ACX utilise la file d'attente par défaut associée à la poignée actuelle. L'ACX/le pilote demande ensuite au WDF d'insérer la requête dans la file d'attente spécifiée ou dans la file d'attente par défaut.

Ensuite, WDF invoque le callback du processus de l'appelant, s'il est présent. L'ACX n'a pas besoin d'utiliser la fonction de rappel de processus de l'appelant car il a déjà verrouillé les tampons en mémoire dans la fonction de rappel de pré-traitement. Ainsi, ACX informe WDF de ne pas invoquer la fonction de rappel en cours de traitement après avoir spécifié la file d'attente cible pour la requête.

Utilisation de la file d'attente secondaire

La file d'attente par défaut de l'ACX est une file d'attente gérée par l'alimentation, en série et sans verrouillage. Le pilote doit déplacer toutes les requêtes qui prennent un temps indéterminé dans une file d'attente secondaire. La file d'attente gérée par le pilote peut être une file d'attente manuelle-passive, dans laquelle le pilote peut conserver ces requêtes jusqu'à ce qu'il soit prêt à les traiter ultérieurement.

Requêtes de référence d'alimentation

ACX met automatiquement l'appareil sous tension avant de transmettre une requête au pilote. Ceci est fait implicitement en utilisant une file d'attente WDF gérée par l'alimentation. Cela crée un comportement similaire à celui des portcls. En d'autres termes, une référence d'alimentation est prise avant d'envoyer la requête.

Invocation du gestionnaire de distribution de la file d'attente

Ensuite, WDF prend une référence d'alimentation et invoque le gestionnaire de distribution de la file d'attente. La file d'attente par défaut associée au gestionnaire ACX vérifie s'il existe des remplacements de pré-traitement et, le cas échéant, ACX invoque le rappel de pré-traitement du pilote enregistré. ACX permet au pilote de spécifier des remplacements basés sur le type de requête (propriété, événement et méthode) et (optionnellement) sur les ID des requêtes.

Si un rappel de prétraitement a été spécifié, une fois que l'ACX a invoqué le rappel, la requête appartient au pilote. Le pilote peut compléter la requête ou la rediriger vers l'ACX pour un traitement normal.

Si aucun rappel de prétraitement n'a été spécifié, ou si le pilote renvoie la requête à l'ACX, l'ACX récupère l'objet ACX cible et localise le rappel de la propriété/événement/méthode déclarée. Il invoque ensuite la fonction de rappel en transmettant la requête WDF et l'objet ACX cible (circuit/flux/élément de circuit).

L'ACX suivant (ou pour les propriétés personnalisées, le pilote) exécute l'action demandée et termine la requête, ou si la requête prend un temps indéterminé, le pilote peut déplacer la requête vers une file d'attente secondaire. Le pilote est responsable de la sérialisation et de l'achèvement de toutes les requêtes actives en attente.

Ce diagramme illustre le workflow typique de répartition des requêtes.

Diagramme illustrant le workflow de distribution avec un service audio, un WDF, un ACX et un pilote.

Ce diagramme illustre le workflow de distribution lorsque le pilote a défini un rappel de prétraitement ACX, bien qu'en fin de compte la requête soit gérée par le cadre ACX.

Diagramme illustrant le flux de distribution avec le service audio, le WDF, l'ACX et un pilote ayant un rappel de prétraitement.

Interfaces internes PnP du circuit ACX

Pour faciliter la communication entre le gestionnaire de point de terminaison (EM) ACX et les composants du pilote ACX (composants en mode noyau ou en mode utilisateur), l'ACX définit les interfaces internes PnP suivantes pour les appareils :

  • ACXCATEGORY_CIRCUITFACTORY
  • ACXCATEGORY_CIRCUIT

La SE utilise l'interface ACXCATEGORY_CIRCUITFACTORY pour demander à un appareil cible de créer ou de supprimer un circuit spécifique de ce type. Cette interface est active tant que l'appareil souligné est en mesure de créer des circuits, sinon elle est désactivée (exemple : suppression, suppression par surprise, arrêt ou suppression manuelle).

Le sous-système audio utilise ACXCATEGORY_CIRCUIT (qui peut être créé sur une pile d'appareils différente de celle du gestionnaire de circuits), pour suivre le circuit ACX et communiquer avec lui. Cette interface est active lorsque le circuit a été créé et qu'il est prêt à traiter les commandes.

Pour plus d'informations sur les autres processus d'alimentation et PnP, reportez-vous à l'énumération des appareils ACX et à la gestion de l'alimentation ACX.

Voir aussi

Vue d’ensemble des extensions de classe audio ACX

Documentation de référence de l’ACX

Résumé des objets ACX

Informations sur la version de l'ACX

Communications entre pilotes multi-piles ACX