IRP_MN_DISABLE_COLLECTION
Qualsiasi driver WMI che registra uno o più blocchi di dati come costosi da raccogliere devono 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_DISABLE_COLLECTION , WMI a sua volta chiama la routine DpWmiFunctionControl del driver.
Codice principale
Data di invio
WMI invia questo IRP per richiedere al driver di interrompere l'accumulo dei dati per un blocco di dati registrato come costoso da raccogliere e per il quale è stata abilitata la raccolta dei dati.
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 il quale l'accumulo di dati deve essere arrestato.
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 Flags della struttura WMIREGGUID o WMIGUIDREGINFO che il driver passa 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 abilitare la raccolta.
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_DISABLE_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 la richiesta, il driver 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 blocco di dati è valido ma non è stato registrato con WMIREG_FLAG_EXPENSIVE, il driver può restituire STATUS_SUCCESS e non eseguire altre azioni.
Non è necessario che il driver controlli se la raccolta dati è già disabilitata perché WMI invia una singola richiesta di disabilitazione per il blocco di dati quando l'ultimo consumer di dati disabilita la raccolta per tale blocco. WMI non invierà un'altra richiesta di disabilitazione senza una richiesta di attivazione.
Requisiti
Intestazione |
Wdm.h (include Wdm.h, Ntddk.h o Ntifs.h) |