Gestione IRP_MN_REGINFO e IRP_MN_REGINFO_EX per registrare i blocchi

In Windows 98 e Windows 2000 il sistema invia la richiesta di IRP_MN_REGINFO a un driver per consentire a un driver di registrare le relative classi WMI. In Windows XP e versioni successive, il sistema invia invece la richiesta di IRP_MN_REGINFO_EX . La maggior parte dei driver può gestire queste richieste usando WmiSystemControl per fornire una routine di callback. Per informazioni dettagliate, vedere Uso della libreria WMI per registrare i blocchi .

Un driver deve gestire IRP_MN_REGINFO o IRP_MN_REGINFO_EX richieste per registrare blocchi che usano nomi di istanze dinamiche o che usano un elenco di nomi di istanze statiche definite dal driver; non può chiamare WmiSystemControl per registrare tali blocchi. Un driver può facoltativamente gestire questa richiesta per registrare blocchi che usano nomi di istanza statici basati sul PDO o su una stringa di nome di base definita dal driver.

In questo caso, il driver:

  1. Compila una struttura WMIREGINFO in Parameters.WMI.Buffer che specifica:

    • Numero di byte di tutti i dati di registrazione forniti dal driver, inclusi i dati forniti per conto di un altro driver.

    • Percorso del Registro di sistema del driver.

    • Nome della risorsa MOF del driver.

    • Numero di blocchi da registrare.

    • Matrice di strutture WMIREGGUID , una per ogni blocco.

  2. Per ogni blocco, il driver compila una struttura WMIREGGUID che specifica:

    • GUID che rappresenta il blocco.

    • Flag che forniscono informazioni sui nomi delle istanze e altre caratteristiche del blocco, ad esempio se il blocco è costoso da raccogliere. Per altre informazioni, vedere Flag di registrazione WMI.

    Se il blocco viene registrato con nomi di istanza statici, il driver imposta uno dei membri seguenti per specificare 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 di nomi di 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 del 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 sul PDO passato alla routine AddDevice del driver. WMI usa il percorso dell'istanza del dispositivo del PDO per generare nomi di istanza statici per il blocco. Quando si gestisce una richiesta di IRP_MN_REGINFO_EX , i driver devono chiamare la routine ObReferenceObject sull'oggetto dispositivo fisico passato in Pdo. Il sistema chiamerà automaticamente ObDereferenceObject per dereferenziare l'oggetto. Il driver non deve farlo.

    Il driver scrive le stringhe del nome dell'istanza o una stringa del nome di base in corrispondenza dell'offset indicato rispettivamente da InstanceNameList o BaseName.

  3. Se il driver registra blocchi per conto di un altro driver (come driver di classe potrebbe per conto di un driver di miniclasse), il driver compila un'altra struttura WMIREGINFO ed un elenco di strutture WMIREGGUID con informazioni di registrazione per i blocchi degli altri driver e imposta NextWmiRegInfo nel primo WMIREGINFO sull'offset in byte dall'inizio della prima struttura WMIREGINFO all'inizio della seconda struttura WMIREGINFO .