IRP_MN_ENABLE_COLLECTION

Jeder WMI-Treiber, der einen oder mehrere seiner Datenblöcke als potenziell zeitaufwendig oder teuer registriert, muss diese IRP verarbeiten. Ein Treiber kann WMI-IRPs verarbeiten, indem er WmiSystemControl aufruft oder den IRP selbst verarbeitet, wie unter Behandeln von WMI-Anforderungen beschrieben.

Wenn ein Treiber WmiSystemControl aufruft , um eine IRP_MN_ENABLE_COLLECTION Anforderung zu verarbeiten, ruft WMI wiederum die DpWmiFunctionControl-Routine dieses Treibers auf.

Hauptcode

IRP_MJ_SYSTEM_CONTROL

Sendebedingungen

WMI sendet diesen IRP, um den Treiber anzufordern, daten für einen Datenblock zu sammeln, den der Treiber als teuer registriert hat.

WMI sendet diesen IRP unter IRQL = PASSIVE_LEVEL in einem beliebigen Threadkontext.

Eingabeparameter

Parameters.WMI.ProviderId verweist auf das Geräteobjekt des Treibers, das 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 Daten gesammelt werden.

Ausgabeparameter

Keine.

E/A-Statusblock

Wenn der Treiber die 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 entsprechenden Fehler status wie den folgenden fest:

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 erfassen, indem er WMIREG_FLAG_EXPENSIVE im Flags-Member der WMIREGGUID - oder WMIGUIDREGINFO-Struktur festlegt. Der Treiber übergibt diese Strukturen an WMI, wenn er den Datenblock registriert oder aktualisiert. Ein Treiber muss keine Daten für einen solchen Block sammeln, bis er eine explizite Anforderung zum Starten der Datensammlung erhält.

Ein Treiber kann WMI-IRPs verarbeiten, indem er WmiSystemControl aufruft oder den IRP selbst verarbeitet, wie unter Behandeln von WMI-Anforderungen beschrieben.

Wenn ein Treiber WMI IRPs verarbeitet, indem er WmiSystemControl aufruft, 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_COLLECTION Anforderung selbst verarbeitet, sollte er dies nur tun, wenn Parameters.WMI.ProviderId auf dasselbe Geräteobjekt wie der Zeiger verweist, den der Treiber an IoWMIRegistrationControl übergeben hat. Andernfalls muss der Treiber die Anforderung an den nächstniedrigen Treiber weiterleiten.

Vor der Verarbeitung einer Anforderung sollte der Treiber sicherstellen, dass Parameters.WMI.DataPath auf eine GUID verweist, die vom Treiber unterstützt wird. Wenn dies nicht der Fall ist, sollte 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.

Wenn der Block gültig ist und bei WMIREG_FLAG_EXPENSIVE registriert wurde, aktiviert der Treiber die Datensammlung für alle Instanzen dieses Datenblocks.

Es ist nicht erforderlich, dass der Treiber überprüft, ob die Datensammlung bereits für den Datenblock aktiviert ist. WMI sendet nur eine einzelne Anforderung zum Aktivieren eines Datenblocks, nachdem der erste Datenverbraucher den Block aktiviert hat. WMI sendet keine weitere Anforderung zur Aktivierung, ohne dass eine einschreibende Deaktivierungsanforderung erfolgt.

Anforderungen

Header

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

Weitere Informationen

DpWmiFunctionControl

IoWMIRegistrationControl

IRP_MN_DISABLE_COLLECTION

WMILIB_CONTEXT

WMIREGGUID

WmiSystemControl