IRP_MN_REGINFO
I driver che supportano WMI in Microsoft Windows 98 e Microsoft Windows 2000 devono gestire questo IRP. I driver che supportano Windows XP devono anche gestire il IRP_MN_REGINFO_EX IRP. Un driver può gestire i provider di integrazione WMI chiamando WmiSystemControl o gestendo l'IRP stesso, come descritto in Gestione delle richieste WMI.
Codice principale
Data di invio
In Windows 98 e Windows 2000 WMI invia questo IRP per eseguire query o aggiornare le informazioni di registrazione di un driver dopo che il driver ha chiamato IoWMIRegistrationControl. In Windows XP e versioni successive WMI invia invece la richiesta di IRP_MN_REGINFO_EX .
WMI invia questo IRP in IRQL = PASSIVE_LEVEL nel contesto di un thread di sistema.
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 I/O del driver in IRP.
Parameters.WMI.DataPath è impostato su WMIREGISTER per eseguire query sulle informazioni di registrazione o WMIUPDATE per aggiornarlo.
Parameters.WMI.BufferSize indica la dimensione massima del buffer non di pagina in Parameters.WMI.Buffer. Le dimensioni devono essere maggiori o uguali al totale di (sizeof(WMIREGINFO) + (GuidCountsizeof(WMIREGGUID)), doveGuidCount * è il numero di blocchi di dati e blocchi di eventi registrati dal driver, più spazio per i nomi di istanza statici, se presente.
Parametri di output
Se il driver gestisce i irP WMI chiamando WmiSystemControl, WMI ottiene le informazioni di registrazione per i blocchi di dati di un driver chiamando la routine DpWmiQueryReginfo .
In caso contrario, il driver inserisce una struttura WMIREGINFO in Parameters.WMI.Buffer come indicato di seguito:
Imposta BufferSize sulle dimensioni in byte della struttura WMIREGINFO e dei dati di registrazione associati.
Se il driver gestisce le richieste WMI per conto di un altro driver, imposta NextWmiRegInfo sull'offset in byte dall'inizio di questo WMIREGINFO all'inizio di un'altra struttura WMIREGINFO che contiene informazioni di registrazione dall'altro driver.
Imposta RegistryPath sul percorso del Registro di sistema passato alla routine DriverEntry del driver.
Se Parameters.WMI.Datapath è impostato su WMIREGISTER, imposta MofResourceName sull'offset dall'inizio di questo WMIREGINFO a una stringa Unicode conteggiata contenente il nome della risorsa MOF del driver nel file di immagine.
Imposta GuidCount sul numero di blocchi di dati e blocchi eventi per registrare o aggiornare.
Scrive una matrice di strutture WMIREGGUID , una per ogni blocco di dati o blocco di eventi esposto dal driver, in WmiRegGuid.
Il driver riempie ogni struttura WMIREGGUID come indicato di seguito:
Imposta Guid sul GUID che identifica il blocco.
Imposta flag per fornire informazioni sui nomi delle istanze e altre caratteristiche del blocco. Ad esempio, se un blocco viene registrato con nomi di istanza statici, il driver imposta flag con il flag WMIREG_FLAG_INSTANCE_ XXX appropriato.
Se il blocco viene registrato con nomi di istanza statici, il driver:
Imposta InstanceCount sul numero di istanze.
Imposta uno dei membri seguenti su un offset in byte per i dati del nome dell'istanza statica per il blocco:
- Se il driver imposta flag con WMIREG_FLAG_INSTANCE_LIST, imposta InstanceNameList su un offset su un elenco di stringhe nome istanza statiche. WMI specifica le istanze nelle richieste successive in base all'indice in questo elenco.
- Se il driver imposta flag con WMIREG_FLAG_INSTANCE_BASENAME, imposta BaseNameOffset su un offset su una stringa di nome di base. WMI usa questa stringa per generare nomi di istanza statici per il blocco.
- Se il driver imposta flag con WMIREG_FLAG_INSTANCE_PDO, imposta Pdo su un offset su un puntatore al pdO passato alla routine AddDevice del driver. WMI usa il percorso dell'istanza del dispositivo dell'oggetto PDO per generare nomi di istanza statici per il blocco.
Scrive le stringhe del nome dell'istanza, la stringa nome di base o un puntatore al PDO nell'offset indicato rispettivamente da InstanceNameList, BaseName o Pdo.
Se il driver gestisce la registrazione WMI per conto di un altro driver (ad esempio un driver miniclass o miniport), compila un'altra struttura WMIREGINFO con le informazioni di registrazione dell'altro driver e la scrive in NextWmiRegInfo nella struttura precedente.
Se il buffer in Parameters.WMI.Buffer è troppo piccolo per ricevere tutti i dati, un driver scrive le dimensioni necessarie in byte come parametro.WMI.Buffer e restituisce STATUS_BUFFER_TOO_SMALL.
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 di I/O.
In caso contrario, il driver imposta Irp-IoStatus.Status> su STATUS_SUCCESS o su uno stato di errore appropriato, ad esempio quanto segue:
STATUS_BUFFER_TOO_SMALL
In caso di esito positivo, un driver imposta Irp-IoStatus.Information> sul numero di byte scritti nel buffer in Parameters.WMI.Buffer.
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 irP WMI chiamando WmiSystemControl, tale routine chiama la routine DpWmiQueryReginfo del driver.
Se un driver gestisce una richiesta IRP_MN_REGINFO stessa, deve farlo solo se Parameters.WMI.ProviderId punta allo stesso oggetto dispositivo del puntatore passato al driver IoWMIRegistrationControl. In caso contrario, il driver deve inoltrare la richiesta al driver inferiore successivo.
Prima di gestire la richiesta, il driver deve controllare Parameters.WMI.DataPath per determinare se WMI esegue query sulle informazioni di registrazione (WMIREGISTER) o richiede un aggiornamento (WMIUPDATE).
WMI invia questo IRP con WMIREGISTER dopo che un driver chiama IoWMIRegistrationControl con WMIREG_ACTION_REGISTER o WMIREG_ACTION_REREGISTER. In risposta, un driver deve compilare il buffer in Parameters.WMI.Buffer con quanto segue:
Struttura WMIREGINFO che indica il percorso del Registro di sistema del driver, il nome della risorsa MOF e il numero di blocchi da registrare.
Una strutturaWMIREGGUID per ogni blocco da registrare. Se un blocco deve essere registrato con nomi di istanza statici, il driver imposta il flag WMIREG_FLAG_INSTANCE_ XXX appropriato nella struttura WMIREGGUID per tale blocco.
Tutte le stringhe WMI devono generare nomi di istanza statici.
WMI invia l'IRP con WMIUPDATE dopo che un driver chiama IoWmiRegistrationControl con WMIREG_ACTION_UPDATE_GUIDS. In risposta, un driver deve compilare il buffer in Parameters.WMI.Buffer con una struttura WMIREGINFO come indicato di seguito:
Per rimuovere un blocco, il driver imposta WMIREG_FLAG_REMOVE_GUID nella struttura WMIREGGUID .
Per aggiungere o aggiornare un blocco ,ad esempio per modificare i nomi delle istanze statiche, il driver cancella WMIREG_FLAG_REMOVE_GUID e fornisce valori di registrazione nuovi o aggiornati per il blocco.
Per registrare un blocco nuovo o esistente con nomi di istanza statici, il driver imposta il WMIREG_FLAG_INSTANCE_XXX appropriato e fornisce qualsiasi stringa WMI deve generare nomi di istanza statici.
Un driver può usare le stesse strutture WMIREGINFO per rimuovere, aggiungere o aggiornare i blocchi usati inizialmente per registrare tutti i blocchi, modificando solo i flag e i dati per i blocchi da aggiornare. Se una struttura WMIREGGUID in tale struttura WMIREGINFO corrisponde esattamente all'oggetto WMIREGGUID passato dal driver quando ha registrato il blocco, WMI ignora l'elaborazione coinvolta nell'aggiornamento del blocco.
WMI non invia una richiesta di IRP_MN_REGINFO dopo che un driver chiama IoWMIRegistrationControl con WMIREG_ACTION_DEREGISTER, perché WMI non richiede ulteriori informazioni dal driver. Un driver in genere deregista i blocchi in risposta a una richiesta di IRP_MN_REMOVE_DEVICE .
Requisiti
Intestazione |
Wdm.h (include Wdm.h, Ntddk.h o Ntifs.h) |