Definizione dei nomi di istanza WMI

Un'istanza di un blocco WMI contiene i dati forniti da un particolare dispositivo fisico o componente software. Proprio come il GUID di un blocco identifica in modo univoco il blocco, il nome di un'istanza identifica in modo univoco tale istanza di un blocco. Le applicazioni client WMI usano nomi di istanza per associare le informazioni restituite in un blocco di dati al dispositivo o al componente che ha fornito i dati. WMI usa nomi di istanza per determinare a quale dispositivo deve essere inviata una richiesta. È consigliabile che i driver usino il proprio PDO durante la definizione dei nomi di istanza.

Un driver può definire nomi di istanza per un blocco in uno dei due modi seguenti:

  • Il driver passa un elenco di nomi di istanze statiche a WMI quando registra il blocco.

    Dopo la registrazione del blocco, sia il driver che WMI specificano un nome di istanza in base al relativo indice in questo elenco. I nomi di istanza statici possono essere basati sull'ID istanza del dispositivo del PDO di un driver o su un nome di base definito dal driver; oppure il driver può definire un elenco di stringhe di nomi di istanza. I nomi di istanza statici vengono mantenuti finché il driver non li modifica in modo esplicito registrando il blocco.

  • Il driver genera nomi di istanza dinamici quando vengono create istanze.

    Il driver indica che genererà nomi di istanze dinamiche per un blocco quando registra il blocco. Dopo la registrazione del blocco, il driver e WMI passano i nomi di istanza dinamica come stringhe nel buffer in Parameters.WMI.Buffer.

Un driver deve generare nomi di istanze dinamiche solo se il numero di istanze o nomi di istanza di un blocco di dati cambia spesso in fase di esecuzione. Ad esempio, un driver può usare GLI ID di processo o gli indirizzi IP delle connessioni TCP/IP come nomi di istanza. Tali nomi di istanza devono essere dinamici; se fossero statici, il driver comporta un notevole sovraccarico perché sarebbe necessario chiamare IoWMIRegistrationControl per aggiornare il numero e i nomi delle istanze ogni volta che si è verificata una modifica.

Nella maggior parte dei casi, i nomi di istanza statici sono preferibili ai nomi delle istanze dinamiche per i motivi seguenti:

  • I nomi di istanza statici migliorano le prestazioni di un driver perché il driver non deve restituire stringhe dei nomi di istanza in risposta alle richieste WMI, perché deve essere necessario per i nomi di istanza dinamici.

  • WMI può rilevare conflitti di nomi di istanza statici durante la registrazione e modificare automaticamente i nomi di istanza, se necessario, in modo che tutti i nomi di istanza siano univoci per un determinato blocco indipendentemente dal numero di driver che registrano il blocco.

    WMI non è in grado di rilevare conflitti di nomi di istanza per i nomi di istanza dinamici, pertanto il driver è responsabile della generazione di nomi univoci tramite IoWMIAllocateInstanceIds.

  • Un driver può usare le routine della libreria WMI per gestire i provider di integrazione per un blocco che utilizza nomi di istanza statici, purché i nomi siano basati sul PDO del driver o su un nome di base definito dal driver.

    Un driver non può usare routine della libreria WMI per gestire i provider di integrazione per un blocco di dati che usa nomi di istanza dinamici.

Un driver indica se un blocco usa nomi di istanza statici o dinamici e il tipo di nomi di istanza statici impostando o cancellando WMIREG_FLAG_XXX nella struttura WMIREGGUID o WMIGUIDREGINFO che passa a WMI quando registra il blocco. Per altre informazioni, vedere Registrazione come provider di dati WMI.