Partager via


IRP_MN_REGINFO

Les pilotes qui prennent en charge WMI sur Microsoft Windows 98 et Microsoft Windows 2000 doivent gérer cette IRP. (Les pilotes qui prennent également en charge Windows XP doivent également gérer l’IRP IRP_MN_REGINFO_EX .) Un pilote peut gérer les irps WMI en appelant WmiSystemControl ou en gérant l’IRP lui-même, comme décrit dans Gestion des demandes WMI.

Code majeur

IRP_MJ_SYSTEM_CONTROL

Date d’envoi

Sur Windows 98 et Windows 2000, WMI envoie cette IRP pour interroger ou mettre à jour les informations d’inscription d’un pilote après que le pilote a appelé IoWMIRegistrationControl. Sur Windows XP et versions ultérieures, WMI envoie la requête IRP_MN_REGINFO_EX à la place.

WMI envoie cette IRP à IRQL = PASSIVE_LEVEL dans le contexte d’un thread système.

Paramètres d’entrée

Parameters.WMI.ProviderId pointe vers l’objet de périphérique du pilote qui doit répondre à la demande. Ce pointeur se trouve à l’emplacement de la pile d’E/S du pilote dans l’IRP.

Parameters.WMI.DataPath est défini sur WMIREGISTER pour interroger les informations d’inscription ou WMIUPDATE pour les mettre à jour.

Parameters.WMI.BufferSize indique la taille maximale de la mémoire tampon non paginé sur Parameters.WMI.Buffer. La taille doit être supérieure ou égale au total de (sizeof(WMIREGINFO) + (GuidCount * sizeof(WMIREGGUID)), où GuidCount est le nombre de blocs de données et de blocs d’événements inscrits par le pilote, plus l’espace pour les noms de instance statiques, le cas échéant.

Paramètres de sortie

Si le pilote gère les irps WMI en appelant WmiSystemControl, WMI obtient des informations d’inscription pour les blocs de données d’un pilote en appelant sa routine DpWmiQueryReginfo .

Sinon, le pilote remplit une structure WMIREGINFO dans Parameters.WMI.Buffer comme suit :

  • Définit BufferSize sur la taille en octets de la structure WMIREGINFO plus les données d’inscription associées.

  • Si le pilote gère les requêtes WMI pour le compte d’un autre pilote, définit NextWmiRegInfo sur le décalage en octets entre le début de ce WMIREGINFO et le début d’une autre structure WMIREGINFO qui contient les informations d’inscription de l’autre pilote.

  • Définit RegistryPath sur le chemin d’accès du Registre qui a été passé à la routine DriverEntry du pilote.

  • Si Parameters.WMI.Datapath est défini sur WMIREGISTER, définit MofResourceName sur le décalage entre le début de ce WMIREGINFO et une chaîne Unicode comptée qui contient le nom de la ressource MOF du pilote dans son fichier image.

  • Définit GuidCount sur le nombre de blocs de données et de blocs d’événements à inscrire ou à mettre à jour.

  • Écrit un tableau de structures WMIREGGUID , un pour chaque bloc de données ou bloc d’événements exposé par le pilote, sur WmiRegGuid.

Le pilote remplit chaque structure WMIREGGUID comme suit :

  • Définit Guid sur le GUID qui identifie le bloc.

  • Définit des indicateurs pour fournir des informations sur les noms de instance et d’autres caractéristiques du bloc. Par exemple, si un bloc est inscrit avec des noms de instance statiques, le pilote définit indicateurs avec l’indicateur WMIREG_FLAG_INSTANCE_XXX approprié.

Si le bloc est inscrit avec des noms de instance statiques, le pilote :

  • Définit InstanceCount sur le nombre d’instances.

  • Définit l’un des membres suivants sur un décalage en octets en 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 nom 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 des indicateurs avec WMIREG_FLAG_INSTANCE_PDO, il définit Pdo sur un décalage vers un pointeur de l’AOP passé à la routine AddDevice du pilote. WMI utilise le chemin d’instance d’appareil de l’ADO pour générer des noms de instance statiques pour le bloc.
  • Écrit le instance chaînes de nom, la chaîne de nom de base ou un pointeur vers l’AOP au décalage indiqué par InstanceNameList, BaseName ou Pdo, respectivement.

Si le pilote gère l’inscription WMI pour le compte d’un autre pilote (par exemple, un pilote miniclass ou miniport), il remplit une autre structure WMIREGINFO avec les informations d’inscription de l’autre pilote et les écrit dans NextWmiRegInfo dans la structure précédente.

Si la mémoire tampon dans Parameters.WMI.Buffer est trop petite pour recevoir toutes les données, un pilote écrit la taille nécessaire en octets en tant que ULONG dans Parameters.WMI.Buffer et échoue à l’IRP et retourne STATUS_BUFFER_TOO_SMALL.

Bloc d’état E/S

Si le pilote gère l’IRP en appelant WmiSystemControl, WMI définit Irp-IoStatus.Status> et Irp-IoStatus.Information> dans le bloc d’E/S status.

Sinon, le pilote définit Irp-IoStatus.Status> sur STATUS_SUCCESS ou sur une erreur appropriée status comme suit :

STATUS_BUFFER_TOO_SMALL

En cas de réussite, un pilote définit Irp-IoStatus.Information> sur le nombre d’octets écrits dans la mémoire tampon sur Parameters.WMI.Buffer.

Opération

Un pilote peut gérer les irps WMI en appelant WmiSystemControl ou en gérant l’IRP lui-même, comme décrit dans Gestion des demandes WMI.

Si un pilote gère les irps WMI en appelant WmiSystemControl, cette routine appelle la routine DpWmiQueryReginfo du pilote.

Si un pilote gère lui-même une requête IRP_MN_REGINFO , il ne doit le faire que si Parameters.WMI.ProviderId pointe vers le même objet de périphérique que le pointeur que le pilote a transmis à IoWMIRegistrationControl. Sinon, le pilote doit transférer la demande au pilote inférieur suivant.

Avant de gérer la demande, le pilote doit case activée Parameters.WMI.DataPath pour déterminer si WMI interroge les informations d’inscription (WMIREGISTER) ou demande une mise à jour (WMIUPDATE).

WMI envoie cette IRP avec WMIREGISTER après qu’un pilote a appelé IoWMIRegistrationControl avec WMIREG_ACTION_REGISTER ou WMIREG_ACTION_REREGISTER. En réponse, un pilote doit remplir la mémoire tampon dans Parameters.WMI.Buffer avec les éléments suivants :

  • Structure WMIREGINFO qui indique le chemin du Registre du pilote, le nom de sa ressource MOF et le nombre de blocs à inscrire.

  • Une structureWMIREGGUID pour chaque bloc à inscrire. Si un bloc doit être inscrit avec des noms de instance statiques, le pilote définit l’indicateur WMIREG_FLAG_INSTANCE_XXX approprié dans la structure WMIREGGUID pour ce bloc.

  • Toutes les chaînes dont WMI a besoin pour générer des noms de instance statiques.

WMI envoie cette IRP avec WMIUPDATE après qu’un pilote a appelé IoWmiRegistrationControl avec WMIREG_ACTION_UPDATE_GUIDS. En réponse, un pilote doit remplir la mémoire tampon sur Parameters.WMI.Buffer avec une structure WMIREGINFO comme suit :

  • Pour supprimer un bloc, le pilote définit WMIREG_FLAG_REMOVE_GUID dans sa structure WMIREGGUID .

  • Pour ajouter ou mettre à jour un bloc (par exemple, pour modifier ses noms de instance statiques), le pilote efface WMIREG_FLAG_REMOVE_GUID et fournit des valeurs d’inscription nouvelles ou mises à jour pour le bloc.

  • Pour inscrire un bloc nouveau ou existant avec des noms de instance statiques, le pilote définit le WMIREG_FLAG_INSTANCE_XXX approprié et fournit toutes les chaînes dont WMI a besoin pour générer des noms de instance statiques.

Un pilote peut utiliser les mêmes structures WMIREGINFO pour supprimer, ajouter ou mettre à jour des blocs qu’il utilisait initialement pour inscrire tous ses blocs, en modifiant uniquement les indicateurs et les données des blocs à mettre à jour. Si un WMIREGGUID dans une telle structure WMIREGINFO correspond exactement au WMIREGGUID passé par le pilote lors de la première inscription de ce bloc, WMI ignore le traitement impliqué dans la mise à jour du bloc.

WMI n’envoie pas de demande de IRP_MN_REGINFO après qu’un pilote a appelé IoWMIRegistrationControl avec WMIREG_ACTION_DEREGISTER, car WMI ne nécessite aucune information supplémentaire du pilote. Un pilote annule généralement l’inscription de ses blocs en réponse à une demande de IRP_MN_REMOVE_DEVICE .

Spécifications

En-tête

Wdm.h (inclure Wdm.h, Ntddk.h ou Ntifs.h)

Voir aussi

DpWmiQueryReginfo

IoWMIRegistrationControl

WMILIB_CONTEXT

WMIREGGUID

WMIREGINFO

WmiSystemControl

IRP_MN_REGINFO_EX