C# - WMI - Windows Management Instrumentation
C#
WMI - Windows Management Instrumentation
- Windows Management Instrumentation (WMI) è un componente del sistema operativo Microsoft che fornisce informazioni sui componenti hardware, software e sui servizi del sistema.
- L'interfaccia comandi per eseguire le chiamate al WMI è chiamata Windows Management Instrumentation Command-line (WMIC).
- Gli oggetti forniti sono coppie di 'Attributi' / 'Valori'.
- Il namespace è System.Management.
Esempio di utilizzo del WMI
- A titolo di esempio, si vuole estrarre il Serial Number dell'Hard Disk utilizzando l'interfaccia a linea di comandi.
- Si apra una finestra DOS e si scriva la seguente istruzione:
C:\Users\carlo>wmic diskdrive get serialnumber
SerialNumber
1905E1E7168A
- Il risultato ottenuto è l'Hard Disk Serial Number.
Volume Serial Number e Hard Disk Serial Number
- Non si confonda il Volume Serial Number con l'Hard Disk Serial Number.
- Il Volume Serial Number è un numero composto da 2 gruppi di 4 cifre esadecimali, generalmente separate da un trattino. Per esempio 38C6-B695.
- Esso è assegnato dal sistema operativo al momento della formattazione del disco in funzione della data e dell'ora di formattazione. Per disco si intende sia l'Hard Disk che i vecchi Floppy Disk.
- La sua introduzione fu necessaria per far sì che il sistema operativo identificasse in modo univoco il disco e si accorgesse della sua sostituzione nel drive. Tempo fa infatti si utilizzavano ancora i Floppy Disk.
- Per determinare il Volume Serial Number è sufficiente dare il comando 'vol' nella linea di comandi DOS:
C:\Users\carlo>vol
Il volume nell'unità C è Windows8_OS
Numero di serie del volume: 68B4-073F
- L'Hard Disk Serial Number è invece un numero univoco assegnato all'Hard Disk dal produttore.
- È (probabilmente) cablato all'interno del disco stesso.
- La sua numerazione dipende dal produttore.
Modificare il Volume Serial Number
- Esistono dei programmi (anche di libero utilizzo). Anche Sysinternals ha un programma per farlo.
Modificare l'Hard Disk Serial Number
- Non è possibile modificarlo in modo definitivo. È invece possibile modificarlo temporaneamente tramite degli opportuni software, a pagamento. Questi software hanno varie versioni dipendenti dal sistema operativo.
Esplorare il WMI
- Nel paragrafo 'Esempio di utilizzo del WMI' si è visto l'utilizzo della classe 'DiskDrive' per ricavarne la proprietà 'SerialNumber'.
- Ma quante classe si hanno a disposizione? Ed ogni classe, quali proprietà ha?
- Per rispondere a queste domande, si ha a disposizione la documentazione Microsoft presente nel link: https://docs.microsoft.com/it-it/windows/desktop/CIMWin32Prov/computer-system-hardware-classes.
- In alternativa si può mandare in esecuzione le seguenti righe di codice.
- Per estrarre le classi:
ManagementObjectSearcher moSearcher = new ManagementObjectSearcher("SELECT * FROM meta_class WHERE __CLASS LIKE 'Win32_%'");
foreach (ManagementObject mo in moSearcher.Get())
Console.WriteLine(mo["__CLASS"]);
- Il codice precedente produce nella finestra 'Output' dell'ambiente di sviluppo Visual Studio, un elenco di diverse centinaia di classi.
- Data una classe, per estrarne tutte le proprietà, utilizzare il seguente codice:
ManagementObjectSearcher moSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");
ManagementObjectCollection moCollection = moSearcher.Get();
foreach (ManagementObject mo in moCollection)
{
foreach (PropertyData pd in mo.Properties)
{
Console.WriteLine("{0}: {1}", pd.Name, pd.Value);
}
}
- Anche questo codice produce il risultato nella finestra di 'Output'.
- Tra le tante informazioni ottenute, qua di seguito c'è un piccolo estratto: si notino tutte le caratteristiche fisiche e di formattazione del disco.
BytesPerSector: 512
Caption: CT500MX500SSD1
FirmwareRevision: M3CR023
Model: CT500MX500SSD1
Partitions: 7
SectorsPerTrack: 63
SerialNumber: 1905E1E7168A
Size: 500105249280
Status: OK
TotalCylinders: 60801
TotalHeads: 255
TotalSectors: 976768065
TotalTracks: 15504255
TracksPerCylinder: 255