Partager via


Identifiants uniques d’appareil 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 d’adaptateur audio 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 (consultez 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-composant sur une instance particulière d’une carte d’adaptateur doit avoir une chaîne d’ID d’appareil qui identifie de manière unique le sous-composant sur toutes les instances de la même carte d’adaptateur dans le système.

La façon la plus simple d’y parvenir consiste à exposer chaque sous-composant sur la carte d’adaptateur en tant qu’appareil logiquement distinct au gestionnaire Plug-and-Play. Il s’agit de l’option (1) dans les appareils audio à fonctions multiples.

Une deuxième approche consiste à utiliser le pilote de bus multifonction fourni par le système pour gérer les sous-devices sur la carte d’adaptateur. Le pilote de bus MF affecte à chaque sous-appareil un ID d’appareil garanti pour être unique sur le système, même si le système contient plusieurs instances de la même carte d’adaptateur. Le pilote de bus MF prend en charge les conceptions dans lesquelles les sous-éléments partagent un ensemble commun de registres de configuration, mais chaque sous-composant a son propre ensemble de registres d’adresses de base PCI. Les sous-éléments ne doivent pas avoir de dépendances masquées 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 les appareils audio à fonctions multiples.

Une troisième approche consiste à utiliser un pilote de bus propriétaire pour gérer les sous-composants sur une carte d’adaptateur. Cela est fréquemment nécessaire si les sous-éléments 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-éléments peuvent partager une ressource sur carte. Par exemple, si les sous-éléments 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-composant.

  • Une faille de conception peut entraîner une dépendance entre les sous-outils. Par exemple, une faille de conception peut nécessiter que les sous-appareils soient alimentés ou arrêtés dans une séquence particulière.

Lorsque 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-éléments directement au gestionnaire Plug-and-Play et de tenter de masquer la dépendance.

Si vous fournissez votre propre pilote de bus pour une carte d’adaptateur, vous devez vous assurer que les ID d’appareil que votre pilote de bus attribue sont uniques sur le 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 à partir du gestionnaire Plug-and-Play. L’ID peut être spécifié de deux façons, 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 assuré d'être unique dans tout le système. La chaîne d’ID d’appareil contient un ID d’appareil plus un ID d’instance, qui est un numéro de série qui identifie de manière unique l’instance matérielle.

  • 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 Plug-and-Play étend la chaîne d’ID d’appareil qu’il reçoit pour le 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. Ainsi, le gestionnaire Plug-and-Play étend la chaîne d'identification de périphérique de l'enfant en ajoutant des informations sur le parent de l'appareil afin de rendre cette identification unique sur l'ordinateur.