IRP_MN_DISABLE_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_DISABLE_EVENTS-Anforderung zu verarbeiten, ruft WMI wiederum die DpWmiFunctionControl-Routine dieses Treibers auf.

Hauptcode

IRP_MJ_SYSTEM_CONTROL

Sendebedingungen

WMI sendet dieses IRP, um den Treiber darüber zu informieren, dass ein Datenconsumer keine weitere 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 deaktivierenden Ereignisblock identifiziert.

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_DISABLE_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.

Vor der Verarbeitung einer Anforderung muss der Treiber bestimmen, ob Parameters.WMI.DataPath auf eine GUID verweist, die der Treiber unterstützt. 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, deaktiviert er das Ereignis für alle Instanzen dieses Blocks.

Es ist nicht erforderlich, dass der Treiber überprüft, ob Ereignisse bereits für den Ereignisblock deaktiviert sind, da WMI eine einzelne Deaktivierungsanforderung für diesen Ereignisblock sendet, wenn der letzte Datenconsumer das Ereignis deaktiviert. WMI sendet keine weitere Deaktivierungsanforderung, ohne dass eine dazwischen liegende Anforderung aktiviert werden muss.

Ausführliche Informationen zum Definieren von Ereignisblöcken finden Sie unter Entwerfen von WMI-Daten- und Ereignisblöcken.

Anforderungen

Header

Wdm.h (einschließen Wdm.h, Ntddk.h oder Ntifs.h)

Weitere Informationen

DpWmiFunctionControl

IoWMIRegistrationControl

IRP_MN_ENABLE_EVENTS

WMILIB_CONTEXT

WmiSystemControl