Gestion des IRP_MN_REGINFO et des IRP_MN_REGINFO_EX pour inscrire des blocs

Sur Windows 98 et Windows 2000, le système envoie la demande IRP_MN_REGINFO à un pilote pour permettre à un pilote d’inscrire ses classes WMI. Sur Windows XP et versions ultérieures, le système envoie la requête IRP_MN_REGINFO_EX à la place. La plupart des pilotes peuvent gérer ces requêtes à l’aide de WmiSystemControl pour fournir une routine de rappel. Pour plus d’informations, consultez Utilisation de la bibliothèque WMI pour inscrire des blocs .

Un pilote doit gérer IRP_MN_REGINFO ou IRP_MN_REGINFO_EX demandes d’inscription de blocs qui utilisent des noms de instance dynamiques ou qui utilisent une liste de noms de instance statiques définis par le pilote ; il ne peut pas appeler WmiSystemControl pour inscrire ces blocs. Un pilote peut éventuellement gérer cette demande pour inscrire des blocs qui utilisent des noms de instance statiques basés sur le PDO ou une chaîne de nom de base définie par le pilote.

Dans ce cas, le pilote :

  1. Remplit une structure WMIREGINFO dans Parameters.WMI.Buffer qui spécifie :

    • Nombre d’octets de toutes les données d’inscription fournies par le pilote, y compris les données fournies pour le compte d’un autre pilote.

    • Chemin d’accès au Registre du pilote.

    • Nom de la ressource MOF du pilote.

    • Nombre de blocs à inscrire.

    • Tableau de structures WMIREGGUID , une pour chaque bloc.

  2. Pour chaque bloc, le pilote remplit une structure WMIREGGUID qui spécifie :

    • GUID qui représente le bloc.

    • Indicateurs qui fournissent des informations sur les noms de instance et d’autres caractéristiques du bloc, par exemple si le bloc est coûteux à collecter. Pour plus d’informations, consultez Indicateurs d’inscription WMI.

    Si le bloc est inscrit avec des noms de instance statiques, le pilote définit l’un des membres suivants pour spécifier les données de nom statiques instance pour le bloc :

    • Si le pilote définit Flags avec WMIREG_FLAG_INSTANCE_LIST, il définit InstanceNameList sur un décalage sur une liste de chaînes de noms statiques instance. WMI spécifie les instances dans les requêtes suivantes par index dans cette liste.

    • Si le pilote définit Flags avec WMIREG_FLAG_INSTANCE_BASENAME, il définit BaseNameOffset sur un décalage sur une chaîne de nom de base. WMI utilise cette chaîne pour générer des noms de instance statiques pour le bloc.

    • Si le pilote définit Flags avec WMIREG_FLAG_INSTANCE_PDO, il définit Pdo sur le PDO passé à la routine AddDevice du pilote. WMI utilise le chemin d’accès instance de l’appareil de l’AOP pour générer des noms de instance statiques pour le bloc. Lors de la gestion d’une demande de IRP_MN_REGINFO_EX , les pilotes doivent appeler la routine ObReferenceObject sur l’objet d’appareil physique passé dans Pdo. (Le système appelle automatiquement ObDereferenceObject pour déréférencer l’objet ; le pilote ne doit pas le faire.)

    Le pilote écrit instance chaînes de nom ou une chaîne de nom de base au décalage indiqué respectivement par InstanceNameList ou BaseName.

  3. Si le pilote inscrit des blocs pour le compte d’un autre pilote (car un pilote de classe peut être pour le compte d’un pilote de miniclasse), le pilote remplit une autre structure WMIREGINFO et la liste des structures WMIREGGUID avec des informations d’inscription pour les blocs de l’autre pilote, et définit NextWmiRegInfo dans la première WMIREGINFO sur le décalage en octets entre le début de la première structure WMIREGINFO et le début de la deuxième structure WMIREGINFO .