IRP_MN_ENABLE_EVENTS
Tout pilote WMI qui inscrit un ou plusieurs blocs d’événements doit gérer cette IRP. 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 appelle WmiSystemControl pour gérer une demande de IRP_MN_ENABLE_EVENTS , WMI appelle à son tour la routine DpWmiFunctionControl de ce pilote.
Code majeur
Date d’envoi
WMI envoie cette IRP pour informer le pilote qu’un consommateur de données a demandé la notification d’un événement.
WMI envoie cette IRP à IRQL = PASSIVE_LEVEL dans un contexte de thread arbitraire.
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 pointe vers un GUID qui identifie le bloc d’événements à activer.
Parameters.WMI.BufferSize indique la taille de la mémoire tampon non paginé sur Parameters.WMI.Buffer, qui doit être supérieure ou égale à sizeof(WNODE_HEADER). Un pilote qui n’inscrit pas de blocs de trace (WMIREG_FLAG_TRACED_GUID) peut ignorer ce paramètre.
Parameters.WMI.Buffer pointe vers un WNODE_HEADER qui indique si l’événement doit être suivi (WMI_FLAGS_TRACED_GUID) et fournit un handle à l’enregistreur d’événements système. Un pilote qui n’inscrit pas de blocs de trace (WMIREG_FLAG_TRACED_GUID) peut ignorer ce paramètre.
Paramètres de sortie
Aucun.
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_WMI_GUID_NOT_FOUND
STATUS_INVALID_DEVICE_REQUEST
En cas de réussite, un pilote définit Irp-IoStatus.Information> sur zéro.
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 DpWmiFunctionControl du pilote ou retourne STATUS_SUCCESS si le pilote ne définit pas la routine.
Si un pilote gère lui-même une requête IRP_MN_ENABLE_EVENTS , 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 que le pilote ne gère la requête, il doit déterminer si Parameters.WMI.DataPath pointe vers un GUID pris en charge par le pilote. Si ce n’est pas le cas, le pilote doit échouer l’IRP et retourner STATUS_WMI_GUID_NOT_FOUND.
Si le pilote prend en charge le bloc d’événements, il active l’événement pour toutes les instances de ce bloc de données.
Il n’est pas nécessaire pour le pilote de case activée si les événements sont déjà activés pour le bloc d’événements, car WMI envoie une seule requête pour activer le bloc d’événements lorsque le premier consommateur de données active l’événement. WMI n’envoie pas d’autre requête à activer sans demande de désactivation intermédiaire.
Un pilote qui inscrit des blocs de trace (WMIREG_FLAG_TRACED_GUID) doit également déterminer s’il faut envoyer l’événement à WMI ou à l’enregistreur d’événements système pour le suivi. Si le suivi est demandé, Parameters.WMI.Buffer pointe vers une structure de WNODE_HEADER dans laquelle Flags est défini avec WNODE_FLAG_TRACED_GUID et HistoricalContext contient un handle pour l’enregistreur d’événements.
Pour plus d’informations sur la définition de blocs d’événements, l’envoi d’événements et le suivi, consultez Windows Management Instrumentation.
Spécifications
En-tête |
Wdm.h (inclure Wdm.h, Ntddk.h ou Ntifs.h) |