ID d’appareil unique System-Wide
Un pilote pour une carte audio classique doit facilement être en mesure de prendre en charge plusieurs instances de la même carte audio carte dans un système. Presque toutes les structures de données qu’un pilote gère sont stockées dans la mémoire tampon d’extension de périphérique (voir la description du champ DeviceExtension de la structure DEVICE_OBJECT). Toutefois, si plusieurs instances d’un pilote partagent des données globales, ces instances doivent synchroniser leur accès à ces données.
Une exigence supplémentaire est que chaque sous-appareil d’un instance particulier d’une carte carte doit avoir une chaîne d’ID d’appareil qui identifie de manière unique le sous-appareil sur toutes les instances de la même carte carte dans le système.
Le moyen le plus simple d’y parvenir consiste à exposer chaque sous-appareil sur l’adaptateur carte en tant qu’appareil logiquement distinct au gestionnaire de Plug-and-Play. Cette option est présentée sous forme d’option (1) dans appareils audio multifonctions.
Une deuxième approche consiste à utiliser le pilote de bus multifonction fourni par le système pour gérer les sous-appareils sur l’adaptateur carte. Le pilote de bus MF affecte à chaque sous-appareil un ID d’appareil qui est garanti comme unique dans le système, même si le système contient plusieurs instances de la même carte carte. Le pilote de bus MF prend en charge les conceptions dans lesquelles les sous-appareils partagent un ensemble commun de registres de configuration, mais chaque sous-appareil a son propre ensemble de registres d’adresses de base PCI. Les sous-appareils ne doivent avoir aucune dépendance masquée entre eux et doivent être en mesure de fonctionner simultanément sans interférer entre eux ou avec d’autres appareils du système. Il s’agit de l’option (2) dans appareils audio multifonctions.
Une troisième approche consiste à utiliser un pilote de bus propriétaire pour gérer les sous-appareils d’un adaptateur carte. Cela est souvent nécessaire si les sous-appareils ont des dépendances mutuelles qui doivent être gérées de manière centralisée. Ces dépendances peuvent se produire de deux façons :
Les sous-appareils peuvent partager une ressource carte. Par exemple, si les sous-appareils partagent un processeur de signal numérique (DSP), le pilote de bus peut avoir besoin de télécharger le système d’exploitation propriétaire qui s’exécute sur le DSP avant de démarrer le premier sous-appareil.
Un défaut de conception peut entraîner une dépendance entre les sous-appareils. Par exemple, un défaut de conception peut nécessiter la mise sous tension des sous-appareils dans une séquence particulière.
Quand l’un ou l’autre type de dépendance existe, un pilote de bus propriétaire est presque toujours une meilleure solution que de présenter les sous-appareils directement au gestionnaire de Plug-and-Play et de tenter de masquer la dépendance.
Si vous fournissez votre propre pilote de bus pour une carte carte, vous devez vous assurer que les ID d’appareil attribués par votre pilote de bus sont uniques au sein du système.
Un pilote de bus fournit un ID d’appareil pour l’un de ses enfants en réponse à une requête IRP_MN_QUERY_ID du gestionnaire de Plug-and-Play. L’ID peut être spécifié de l’une des deux manières, que le pilote de bus indique dans sa réponse à une requête IRP_MN_QUERY_CAPABILITIES en définissant le champ UniqueID de la structure DEVICE_CAPABILITIES sur TRUE ou FALSE :
Uniqueid = VRAI
Cela signifie que le nom de l’enfant est garanti pour être unique dans l’ensemble du système. La chaîne d’ID d’appareil contient un ID d’appareil plus un ID de instance, qui est un numéro de série qui identifie de manière unique le matériel instance.
Uniqueid = FAUX
Cela signifie que le nom de l’enfant est unique uniquement par rapport au parent. La plupart des appareils utilisent ce moyen d’identification. Dans ce cas, le gestionnaire de Plug-and-Play étend la chaîne d’ID d’appareil qu’il reçoit pour la rendre unique via le système. La chaîne étendue est une fonction de l’ID unique de l’appareil parent.
Tous les pilotes de bus audio doivent définir UniqueID = FALSE pour leurs enfants. Le gestionnaire de Plug-and-Play étend la chaîne d’ID d’appareil de l’enfant en ajoutant des informations sur le parent de l’appareil pour rendre l’ID unique sur l’ordinateur.