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
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) |