Programavimas

„Windows Management Instrumentation“ tyrinėjimas C #

Šiame straipsnyje aš pateiksiu žvilgsnį į WMI technologiją ir tai, kaip galite dirbti su WMI naudodami WMI užklausų kalbą C #. Tada aptarsiu scenarijų, kuriame galite naudoti WMI naudoti realiame pasaulyje.

Kas yra WMI?

WMI yra „Windows Management Instrumentation“, COM pagrįstos „Microsoft“ technologijos, naudojamos su sistema susijusiai informacijai gauti, akronimas. Šią technologiją galite naudoti norėdami gauti savo sistemos procesoriaus ID, MAC ID ir kt. Jį sudaro tipų rinkinys, kuris veikia kaip apvalkalas aplink vietinius tipus, kad gautų su aparatūra susijusią informaciją. WMI palengvina žemo lygio ryšį su pagrindine operacine sistema. Galite naudoti WMI, kad galėtumėte dirbti su našumo skaitikliais arba nuskaityti aparatūros informaciją iš sistemos.

Galite naudoti WMI, norėdami gauti sistemos aparatūros metaduomenų informaciją, pavyzdžiui:

  1. HDD serijos numeris
  2. HDD dydžiai
  3. HDD laisva vieta
  4. CPU serijos numeris
  5. Procesoriaus laikrodžio greitis
  6. Centrinio procesoriaus lizdo tipas
  7. Tinklo adapterio MAC adresas
  8. Numatytasis tinklo adapterio šliuzas

Mums užteko teorinės informacijos - dabar įsigilinkime į tam tikrą kodą.

WMI programavimas C #

Šis kodo fragmentas naudoja WQL užklausą, kad užpildytų sąrašą su jūsų sistemos loginių diskų pavadinimais. Tipiška WMI užklausa atrodo taip:

Pasirinkite * IŠ Win32_Processor

Kaip matote kodo fragmente, WQ užklausai suformuoti naudojama „SelectQuery“ klasė.

statinis sąrašas PopulateDisk ()

        {

Sąrašo diskas = naujas sąrašas ();

„SelectQuery selectQuery“ = naujas „SelectQuery“ („Win32_LogicalDisk“);

„ManagementObjectSearcher“ valdymasObjectSearcher = naujas „ManagementObjectSearcher“ (selectQuery);

foreach („ManagementObject managementObject“ sistemoje „mnagementObjectSearcher.Get ()“

            {

disk.Add (managementObject.ToString ());

       }

grąžinimo diskas;

    }

Atminkite, kad į savo projektą turėtumėte įtraukti „System.Management“ vardų sritį (galima kaip „System.Management.dll“ dalį). WMI klases, įtrauktas į šios vardų srities dalį, sudaro:

  1. Win32_LogicalDisk - ši klasė reiškia duomenų šaltinį, atitinkantį jūsų sistemos atminties įrenginį. Šią klasę galite naudoti norėdami gauti serijos numerį, laisvą vietą ir pradinį HDD dydį.
  2. „Win32_NetworkAdapterConfiguration“ - ši klasė nurodo tinklo adapterio atributus jūsų sistemoje. Šią klasę galite naudoti norėdami gauti MAC adresą, IP būseną arba numatytąją IP šliuzo informaciją.
  3. Win32_Processor - ši klasė reiškia procesorių, veikiantį sistemoje, kurioje įdiegta „Windows“ operacinė sistema. Šią klasę galite naudoti norėdami gauti jūsų sistemos procesorių procesoriaus ID, procesoriaus būseną, procesoriaus laikrodžio greitį ir kt.

Norėdami gauti savo sistemos fiksuotų diskų metaduomenų informaciją, t. Y. Pavadinimą, laisvąją erdvę, disko dydį ir kt., Galite naudoti šį kodą.

statinis negaliojantis „GetDiskMetadata“ ()

        {

System.Management.ManagementScope managementScope = nauja System.Management.ManagementScope ();

System.Management.ObjectQuery objectQuery = new System.Management.ObjectQuery ("pasirinkite FreeSpace, Size, Name iš Win32_LogicalDisk kur DriveType = 3");

ManagementObjectSearcher managementObjectSearcher = naujas ManagementObjectSearcher (managementScope, objectQuery);

ManagementObjectCollection managementObjectCollection = managementObjectSearcher.Get ();

foreach („ManagementObject managementObject in managementObjectCollection“)

            {

Console.WriteLine ("Disko pavadinimas:" + managementObject ["Pavadinimas"]. ToString ());

Console.WriteLine ("FreeSpace:" + managementObject ["FreeSpace"]. ToString ());

Console.WriteLine ("Disko dydis:" + managementObject ["Dydis"]. ToString ());

Console.WriteLine ("--------------------------------------------- ------ ");

            }

        }

Šis kodo fragmentas parodo, kaip galite nuskaityti standžiųjų diskų tomo serijos numerį savo sistemoje.

statinė eilutė GetHardDiskSerialNumber (eilutės diskas = "C")

        {

ManagementObject managementObject = naujas ManagementObject ("Win32_LogicalDisk.DeviceID = \" "+ diskas +": \ "");

managementObject.Get ();

grąžinimo valdymasObject ["VolumeSerialNumber"]. ToString ();

        }

Norėdami gauti procesoriaus procesoriaus ID sistemoje, turėsite nurodyti „ProcessorId“ „ManagementObject“ klasės egzemplioriaus masyvų masyve, kaip parodyta toliau pateiktame kodo fragmente.

eilutės procesoriusId = managementObject.Properties ["ProcessorId"]. Value.ToString ();

Norėdami gauti procesoriaus laikrodžio greitį savo sistemoje, turėsite nurodyti „CurrentClockSpeed“ „ManagementObject“ klasės egzemplioriaus savybių masyve, kaip parodyta toliau pateiktame kodo fragmente.

Int32 clockSpeed ​​= Convert.ToInt32 (managementObject.Properties ["CurrentClockSpeed"]. Value.ToString ());

Dabar, kai mes ištyrėme WMI programavimą naudodami C #, leiskite man pasakyti praktinį pavyzdį, kuriame galite naudoti WMI. Aš iš tikrųjų pasinaudojau WMI keliuose savo projektuose, kad įgyvendinčiau mazgų užrakinimą - funkciją, neleidžiančią programai nukopijuoti į kitą sistemą ir joje vykdyti.

Mazgo užraktas

Leiskite man paaiškinti, ką aš padariau, kad įdiegčiau mazgo užraktą ir kodėl jis buvo reikalingas. Mazgo užraktas reiškia mazgo užrakinimą - mazgas yra tik sistema. Iš esmės ši koncepcija neleidžia jūsų programos sugeneruoto vykdomojo failo įdiegti ir vykdyti keliose sistemose. Aš naudoju WMI, norėdamas gauti sistemos, kurioje reikia įdiegti ir vykdyti programą, aparatinės įrangos duomenis. Tada ši informacija buvo užšifruota naudojant šifravimo algoritmą ir tada sukurtą unikalų tos sistemos aktyvavimo kodą. Tada šį kodą reikės naudoti norint suaktyvinti programą. Atkreipkite dėmesį, kad mazgo ID arba aktyvinimo kodas yra unikalus, nes juos sudarė sistemos, kurioje turėjo būti įdiegta ir vykdoma programa, procesoriaus ID ir MAC ID derinys.

$config[zx-auto] not found$config[zx-overlay] not found