IRP_MN_ENABLE_EVENTS
Jeder WMI-Treiber, der einen oder mehrere Ereignisblöcke registriert, muss diese IRP verarbeiten. Ein Treiber kann WMI-IRPs entweder durch Aufrufen von WmiSystemControl oder durch Behandeln des IRP selbst verarbeiten, wie unter Behandeln von WMI-Anforderungen beschrieben.
Wenn ein Treiber WmiSystemControl aufruft, um eine IRP_MN_ENABLE_EVENTS-Anforderung zu verarbeiten, ruft WMI wiederum die DpWmiFunctionControl-Routine dieses Treibers auf.
Hauptcode
Sendebedingungen
WMI sendet dieses IRP, um den Treiber darüber zu informieren, dass ein Datenconsumer eine Benachrichtigung über ein Ereignis angefordert hat.
WMI sendet diesen IRP an IRQL = PASSIVE_LEVEL in einem beliebigen Threadkontext.
Eingabeparameter
Parameters.WMI.ProviderId verweist auf das Geräteobjekt des Treibers, der auf die Anforderung reagieren soll. Dieser Zeiger befindet sich am E/A-Stapelspeicherort des Treibers im IRP.
Parameters.WMI.DataPath verweist auf eine GUID, die den zu aktivierenden Ereignisblock identifiziert.
Parameters.WMI.BufferSize gibt die Größe des nicht auslagerten Puffers bei Parameters.WMI.Buffer an, der größer oder gleich der sizeof(WNODE_HEADER) sein muss. Ein Treiber, der keine Ablaufverfolgungsblöcke (WMIREG_FLAG_TRACED_GUID) registriert, kann diesen Parameter ignorieren.
Parameters.WMI.Buffer verweist auf eine WNODE_HEADER , die angibt, ob das Ereignis nachverfolgt werden soll (WMI_FLAGS_TRACED_GUID), und stellt ein Handle für die Systemprotokollierung bereit. Ein Treiber, der keine Ablaufverfolgungsblöcke (WMIREG_FLAG_TRACED_GUID) registriert, kann diesen Parameter ignorieren.
Ausgabeparameter
Keine.
E/A-Statusblock
Wenn der Treiber das IRP durch Aufrufen von WmiSystemControl verarbeitet, legt WMI Irp-IoStatus.Status> und Irp-IoStatus.Information> im E/A-status-Block fest.
Andernfalls legt der Treiber Irp-IoStatus.Status> auf STATUS_SUCCESS oder auf einen geeigneten Fehler fest, status z. B.:
STATUS_WMI_GUID_NOT_FOUND
STATUS_INVALID_DEVICE_REQUEST
Bei Erfolg legt ein Treiber Irp-IoStatus.Information> auf Null fest.
Vorgang
Ein Treiber kann WMI-IRPs entweder durch Aufrufen von WmiSystemControl oder durch Behandeln des IRP selbst verarbeiten, wie unter Behandeln von WMI-Anforderungen beschrieben.
Wenn ein Treiber WMI IRPs durch Aufrufen von WmiSystemControl verarbeitet, ruft diese Routine die DpWmiFunctionControl-Routine des Treibers auf oder gibt STATUS_SUCCESS zurück, wenn der Treiber die Routine nicht definiert.
Wenn ein Treiber eine IRP_MN_ENABLE_EVENTS Anforderung selbst verarbeitet, sollte er dies nur tun, wenn Parameters.WMI.ProviderId auf dasselbe Geräteobjekt zeigt wie der Zeiger, den der Treiber an IoWMIRegistrationControl übergeben hat. Andernfalls muss der Treiber die Anforderung an den nächstniedrigen Treiber weiterleiten.
Bevor der Treiber die Anforderung verarbeitet, sollte er bestimmen, ob Parameters.WMI.DataPath auf eine GUID verweist, die vom Treiber unterstützt wird. Wenn dies nicht der Fall ist, muss der Treiber das IRP nicht ausführen und STATUS_WMI_GUID_NOT_FOUND zurückgeben.
Wenn der Treiber den Ereignisblock unterstützt, aktiviert er das Ereignis für alle Instanzen dieses Datenblocks.
Es ist nicht erforderlich, dass der Treiber überprüft, ob Ereignisse bereits für den Ereignisblock aktiviert sind, da WMI eine einzelne Anforderung sendet, um den Ereignisblock zu aktivieren, wenn der erste Datenconsumer das Ereignis aktiviert. WMI sendet keine weitere Anforderung zur Aktivierung ohne eine dazwischen liegende Deaktivierungsanforderung.
Ein Treiber, der Ablaufverfolgungsblöcke registriert (WMIREG_FLAG_TRACED_GUID), muss auch bestimmen, ob das Ereignis zur Ablaufverfolgung an WMI oder an die Systemprotokollierung gesendet werden soll. Wenn die Ablaufverfolgung angefordert wird, verweist Parameters.WMI.Buffer auf eine WNODE_HEADER-Struktur , in der Flags mit WNODE_FLAG_TRACED_GUID und HistoricalContext ein Handle für die Protokollierung enthält.
Ausführliche Informationen zum Definieren von Ereignisblöcken, zum Senden von Ereignissen und zur Ablaufverfolgung finden Sie unter Windows-Verwaltungsinstrumentation.
Anforderungen
Header |
Wdm.h (einschließen Wdm.h, Ntddk.h oder Ntifs.h) |