IRP_MN_ENABLE_EVENTS

Qualsiasi driver WMI che registra uno o più blocchi eventi 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_EVENTS , WMI a sua volta chiama la routine DpWmiFunctionControl del driver.

Codice principale

IRP_MJ_SYSTEM_CONTROL

Data di invio

WMI invia questo IRP per informare il driver che un consumer di dati ha richiesto la notifica di un evento.

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 eventi da abilitare.

Parameters.WMI.BufferSize indica le dimensioni del buffer non di paging in Parameters.WMI.Buffer, che deve essere maggiore o uguale a sizeof(WNODE_HEADER). Un driver che non registra blocchi di traccia (WMIREG_FLAG_TRACED_GUID) può ignorare questo parametro.

Parameters.WMI.Buffer punta a un WNODE_HEADER che indica se l'evento deve essere tracciato (WMI_FLAGS_TRACED_GUID) e fornisce un handle al logger di sistema. Un driver che non registra blocchi di traccia (WMIREG_FLAG_TRACED_GUID) può ignorare questo parametro.

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 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_EVENTS 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 che il driver gestisca la richiesta, deve determinare se Parameters.WMI.DataPath punta 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 driver supporta il blocco eventi, abilita l'evento per tutte le istanze del blocco di dati.

Non è necessario che il driver controlli se gli eventi sono già abilitati per il blocco eventi perché WMI invia una singola richiesta per abilitare il blocco eventi quando il primo consumer di dati abilita l'evento. WMI non invierà un'altra richiesta per abilitare senza una richiesta di disabilitazione.

Un driver che registra blocchi di traccia (WMIREG_FLAG_TRACED_GUID) deve anche determinare se inviare l'evento a WMI o al logger di sistema per la traccia. Se viene richiesta la traccia, Parameters.WMI.Buffer punta a una struttura WNODE_HEADER in cui Flags è impostato con WNODE_FLAG_TRACED_GUID e HistoricalContext contiene un handle per il logger.

Per informazioni dettagliate sulla definizione dei blocchi eventi, l'invio di eventi e la traccia, vedere Strumentazione gestione Windows.

Requisiti

Intestazione

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

Vedi anche

DpWmiFunctionControl

IoWMIRegistrationControl

IRP_MN_DISABLE_EVENTS

WMILIB_CONTEXT

WmiSystemControl

WNODE_EVENT_ITEM

WNODE_HEADER