Condividi tramite


IRP_MN_ENABLE_COLLECTION

Qualsiasi driver WMI che registra uno o più blocchi di dati come potenzialmente dispendioso in termini di tempo o dispendioso, per raccogliere deve gestire questo IRP. Un driver può gestire i provider di integrazione WMI chiamando WmiSystemControl o gestendo l'IRP stesso, come descritto in Gestione delle richieste WMI.

Se un driver chiama WmiSystemControl per gestire una richiesta di IRP_MN_ENABLE_COLLECTION , WMI a sua volta chiama la routine DpWmiFunctionControl del driver.

Codice principale

IRP_MJ_SYSTEM_CONTROL

Data di invio

WMI invia questo IRP per richiedere al driver di iniziare ad accumulare dati per un blocco di dati registrato dal driver come costoso da raccogliere.

WMI invia questo IRP in IRQL = PASSIVE_LEVEL in un contesto di thread arbitrario.

Parametri di input

Parameters.WMI.ProviderId punta all'oggetto dispositivo del driver che deve rispondere alla richiesta. Questo puntatore si trova nella posizione dello stack di I/O del driver nell'IRP.

Parameters.WMI.DataPath punta a un GUID che identifica il blocco di dati per cui vengono accumulati i dati.

Parametri di output

Nessuno.

Blocco dello stato I/O

Se il driver gestisce l'IRP chiamando WmiSystemControl, WMI imposta Irp-IoStatus.Status> e Irp-IoStatus.Information> nel blocco di stato I/O.

In caso contrario, il driver imposta Irp-IoStatus.Status> su STATUS_SUCCESS o su uno stato di errore appropriato, ad esempio:

STATUS_WMI_GUID_NOT_FOUND

STATUS_INVALID_DEVICE_REQUEST

In caso di esito positivo, un driver imposta Irp-IoStatus.Information> su zero.

Operazione

Un driver registra un blocco di dati come costoso da raccogliere impostando WMIREG_FLAG_EXPENSIVE nel membro Flag della struttura WMIREGGUID o WMIGUIDREGINFO . Il driver passa queste strutture a WMI quando registra o aggiorna il blocco di dati. Un driver non deve accumulare dati per un blocco di questo tipo finché non riceve una richiesta esplicita per avviare la raccolta dati.

Un driver può gestire i provider di integrazione WMI chiamando WmiSystemControl o gestendo l'IRP stesso, come descritto in Gestione delle richieste WMI.

Se un driver gestisce i runtime di integrazione WMI chiamando WmiSystemControl, tale routine chiama la routine DpWmiFunctionControl del driver o restituisce STATUS_SUCCESS se il driver non definisce la routine.

Se un driver gestisce una richiesta IRP_MN_ENABLE_COLLECTION stessa, deve farlo solo se Parameters.WMI.ProviderId punta allo stesso oggetto dispositivo del puntatore passato al driver A IoWMIRegistrationControl. In caso contrario, il driver deve inoltrare la richiesta al driver inferiore successivo.

Prima di gestire una richiesta, il driver deve assicurarsi che Parameters.WMI.DataPath punti a un GUID supportato dal driver. In caso contrario, il driver deve avere esito negativo sull'IRP e restituire STATUS_WMI_GUID_NOT_FOUND. Se il blocco di dati è valido ma non è stato registrato con WMIREG_FLAG_EXPENSIVE, il driver può restituire STATUS_SUCCESS e non eseguire altre azioni.

Se il blocco è valido ed è stato registrato con WMIREG_FLAG_EXPENSIVE, il driver abilita la raccolta dati per tutte le istanze del blocco di dati.

Non è necessario che il driver controlli se la raccolta dei dati è già abilitata per il blocco di dati. WMI invia solo una singola richiesta per abilitare un blocco di dati dopo che il primo consumer di dati abilita il blocco. WMI non invierà un'altra richiesta per abilitare senza una richiesta di disabilitazione.

Requisiti

Intestazione

Wdm.h (include Wdm.h, Ntddk.h o Ntifs.h)

Vedi anche

DpWmiFunctionControl

IoWMIRegistrationControl

IRP_MN_DISABLE_COLLECTION

WMILIB_CONTEXT

WMIREGGUID

WmiSystemControl