Partager via


IRP_MN_ENABLE_COLLECTION

Tout pilote WMI qui enregistre un ou plusieurs de ses blocs de données comme potentiellement fastidieux ou coûteux à collecter doit gérer cette IRP. Un pilote peut gérer les IRP 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_COLLECTION , WMI appelle à son tour la routine DpWmiFunctionControl de ce pilote.

Code majeur

IRP_MJ_SYSTEM_CONTROL

Date d’envoi

WMI envoie cette IRP pour demander au pilote de commencer à accumuler des données pour un bloc de données que le pilote inscrit comme coûteux à collecter.

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 de données pour lequel les données sont accumulées.

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.

Dans le cas contraire, le pilote définit Irp-IoStatus.Status> sur STATUS_SUCCESS ou sur un status d’erreur approprié, par exemple :

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 enregistre un bloc de données comme coûteux à collecter en définissant WMIREG_FLAG_EXPENSIVE dans le membre Flags de la structure WMIREGGUID ou WMIGUIDREGINFO . Le pilote transmet ces structures à WMI lorsqu’il inscrit ou met à jour le bloc de données. Un pilote n’a pas besoin d’accumuler des données pour un tel bloc tant qu’il n’a pas reçu une demande explicite de démarrage de la collecte de données.

Un pilote peut gérer les IRP 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 IIP 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_COLLECTION , il ne doit le faire que si Parameters.WMI.ProviderId pointe vers le même objet d’appareil que le pointeur que le pilote a transmis à IoWMIRegistrationControl. Dans le cas contraire, le pilote doit transférer la demande au pilote inférieur suivant.

Avant de gérer une requête, le pilote doit s’assurer que 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 bloc de données est valide mais n’a pas été inscrit auprès de WMIREG_FLAG_EXPENSIVE, le pilote peut retourner STATUS_SUCCESS et n’effectuer aucune action supplémentaire.

Si le bloc est valide et a été inscrit auprès de WMIREG_FLAG_EXPENSIVE, le pilote active la collecte de données pour toutes les instances de ce bloc de données.

Il n’est pas nécessaire que le pilote case activée si la collecte de données est déjà activée pour le bloc de données. WMI envoie une seule requête pour activer un bloc de données après que le premier consommateur de données a activé le bloc. WMI n’envoie pas d’autre requête à activer sans demande de désactivation intermédiaire.

Spécifications

En-tête

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

Voir aussi

DpWmiFunctionControl

IoWMIRegistrationControl

IRP_MN_DISABLE_COLLECTION

WMILIB_CONTEXT

WMIREGGUID

WmiSystemControl