IRP_MN_DISABLE_COLLECTION

Jeder WMI-Treiber, der einen oder mehrere seiner Datenblöcke als teuer zu erfassen 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_COLLECTION-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 anzufordern, das Sammeln von Daten für einen Datenblock zu beenden, die der Treiber als teuer zu sammeln registriert hat und für den die Datensammlung aktiviert wurde.

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 Datenblock identifiziert, für den die Datenakkumulation beendet werden soll.

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 registriert einen Datenblock als teuer zu sammeln, indem er WMIREG_FLAG_EXPENSIVE im Flags-Member der WMIREGGUID - oder WMIGUIDREGINFO-Struktur festlegt, die der Treiber an WMI übergibt, wenn er den Datenblock registriert oder aktualisiert. Ein Treiber muss keine Daten für einen solchen Block sammeln, bis er eine explizite Anforderung zum Aktivieren der Sammlung empfängt.

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_COLLECTION 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 der Anforderung muss der Treiber 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 Datenblock gültig ist, aber nicht bei WMIREG_FLAG_EXPENSIVE registriert wurde, kann der Treiber STATUS_SUCCESS zurückgeben und keine weiteren Maßnahmen ergreifen.

Es ist nicht erforderlich, dass der Treiber überprüft, ob die Datensammlung bereits deaktiviert ist, da WMI eine einzelne Deaktivierungsanforderung für den Datenblock sendet, wenn der letzte Datenconsumer die Sammlung für diesen Block deaktiviert. WMI sendet keine weitere Deaktivierungsanforderung, ohne dass eine dazwischen liegende Anforderung aktiviert werden muss.

Anforderungen

Header

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

Weitere Informationen

DpWmiFunctionControl

IoWMIRegistrationControl

IRP_MN_ENABLE_COLLECTION

WMILIB_CONTEXT

WMIREGGUID

WMIGUIDREGINFO

WmiSystemControl