Pagina personale di:
Carlo Vecchio
appunti di C#, R, SQL Server, ASP.NET, algoritmi, numeri
Vai ai contenuti

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

© 2022 Carlo Vecchio
Torna ai contenuti