Définition des noms d’instance WMI
Une instance d’un bloc WMI contient des données fournies par un appareil physique ou un composant logiciel particulier. Tout comme le GUID d’un bloc identifie de manière unique le bloc, le nom d’un instance identifie de manière unique cette instance d’un bloc. Les applications clientes WMI utilisent des noms instance pour associer les informations retournées dans un bloc de données à l’appareil ou au composant qui a fourni les données. WMI utilise des noms instance pour déterminer l’appareil auquel une demande doit être envoyée. Il est vivement recommandé que les pilotes utilisent leur PDO lors de la définition de noms instance.
Un pilote peut définir des noms instance pour un bloc de deux façons :
Le pilote transmet une liste de noms de instance statiques à WMI lors de l’inscription du bloc.
Une fois le bloc inscrit, le pilote et WMI spécifient un nom de instance par son index dans cette liste. Les noms de instance statiques peuvent être basés sur l’ID de instance d’appareil du PDO d’un pilote, ou sur un nom de base défini par le pilote; ou le pilote peut définir une liste de chaînes de nom instance. Les noms de instance statiques sont conservés jusqu’à ce que le pilote les modifie explicitement en réenregistrant le bloc.
Le pilote génère des noms de instance dynamiques à mesure que des instances sont créées.
Le pilote indique qu’il génère des noms de instance dynamiques pour un bloc lorsqu’il inscrit le bloc. Une fois le bloc inscrit, le pilote et WMI passent des noms de instance dynamiques sous forme de chaînes dans la mémoire tampon sur Parameters.WMI.Buffer.
Un pilote doit générer des noms de instance dynamiques uniquement si le nombre d’instances ou de noms de instance d’un bloc de données change fréquemment au moment de l’exécution. Par exemple, un pilote peut utiliser des ID de processus ou les adresses IP des connexions TCP/IP comme noms instance. Ces noms instance doivent être dynamiques ; s’ils étaient statiques, le pilote entraînerait une surcharge considérable, car il devrait appeler IoWMIRegistrationControl pour mettre à jour le nombre et les noms des instances chaque fois qu’une modification se produit.
Dans la plupart des cas, les noms de instance statiques sont préférables aux noms instance dynamiques pour les raisons suivantes :
Les noms de instance statiques améliorent les performances d’un pilote, car le pilote n’a pas besoin de retourner instance chaînes de nom en réponse aux requêtes WMI, comme il le doit pour les noms de instance dynamiques.
WMI peut détecter les collisions de noms statiques instance lors de l’inscription et modifier automatiquement les noms de instance si nécessaire, de sorte que tous les noms de instance soient uniques pour un bloc donné, quel que soit le nombre de pilotes qui inscrivent le bloc.
WMI ne peut pas détecter instance collisions de noms pour les noms de instance dynamiques. Le pilote est donc responsable de la génération de noms uniques à l’aide de IoWMIAllocateInstanceIds.
Un pilote peut utiliser les routines de la bibliothèque WMI pour gérer les irps d’un bloc qui utilise des noms de instance statiques, tant que les noms sont basés sur l’AOP du pilote ou sur un nom de base défini par le pilote.
Un pilote ne peut pas utiliser des routines de bibliothèque WMI pour gérer les irPs d’un bloc de données qui utilise des noms de instance dynamiques.
Un pilote indique si un bloc utilise des noms de instance statiques ou dynamiques et le type de noms de instance statiques, en définissant ou en désactivant WMIREG_FLAG_XXX dans la structure WMIREGGUID ou WMIGUIDREGINFO qu’il transmet à WMI lors de l’inscription du bloc. Pour plus d’informations, consultez Inscription en tant que fournisseur de données WMI.