Programiranje

Raziskovanje instrumentov za upravljanje sistema Windows v jeziku C #

V tem članku bom predstavil vpogled v tehnologijo WMI in kako lahko uporabljate WMI z uporabo jezika poizvedb WMI v jeziku C #. Nato bom razpravljal o scenariju, v katerem lahko WMI uporabite v resničnem svetu.

Kaj je WMI?

WMI je kratica za Windows Management Instrumentation, Microsoftovo tehnologijo, ki temelji na COM in se uporablja za pridobivanje informacij, povezanih s sistemom. S to tehnologijo lahko pridobite CPU ID, MAC ID itd. Vašega sistema. Vsebuje zbirko tipov, ki delujejo kot ovoj okoli izvornih tipov za pridobivanje informacij, povezanih s strojno opremo. WMI omogoča komunikacijo na nizki ravni z gostiteljskim operacijskim sistemom. WMI lahko uporabite za delo s števci zmogljivosti ali pridobivanje informacij o strojni opremi iz sistema.

Z WMI lahko pridobite podatke o metapodatkih sistemske strojne opreme, na primer naslednje:

  1. Serijska številka trdega diska
  2. Velikosti trdega diska
  3. Prosti prostor na trdem disku
  4. Serijska številka CPU
  5. Hitrost procesorja
  6. Tip vtičnice CPU
  7. Naslov MAC omrežnega adapterja
  8. Privzeti prehod omrežnega adapterja

Teoretičnih informacij imamo dovolj - poglejmo zdaj nekaj kode.

Programiranje WMI v jeziku C #

Naslednji delček kode uporablja poizvedbo WQL za zapolnitev seznama z imeni logičnih diskov v vašem sistemu. Tipična poizvedba WMI je videti tako:

Izberite * IZ Win32_Processor

Kot lahko vidite v delčku kode, se razred SelectQuery uporablja za oblikovanje poizvedbe WQL.

statični seznam PopulateDisk ()

        {

Seznam diskov = nov seznam ();

SelectQuery selectQuery = nov SelectQuery ("Win32_LogicDisk");

ManagementObjectSearcher mnagementObjectSearcher = nov ManagementObjectSearcher (selectQuery);

foreach (ManagementObject managementObject v mnagementObjectSearcher.Get ())

            {

disk.Add (managementObject.ToString ());

       }

povratni disk;

    }

Upoštevajte, da bi morali v svoj projekt vključiti imenski prostor System.Management (na voljo kot del System.Management.dll). Razredi WMI, vključeni kot del tega imenskega prostora, vključujejo naslednje:

  1. Win32_LogicDisk - ta razred predstavlja vir podatkov, ki ustreza pomnilniški napravi v vašem sistemu. S tem razredom lahko pridobite serijsko številko, prosti prostor in začetno velikost trdega diska.
  2. Win32_NetworkAdapterConfiguration - ta razred predstavlja atribute omrežnega vmesnika v vašem sistemu. S tem razredom lahko pridobite naslov MAC, stanje IP ali privzete informacije o prehodu IP.
  3. Win32_Processor - ta razred predstavlja procesor, ki deluje v sistemu, v katerem je nameščen operacijski sistem Windows. Ta razred lahko uporabite za pridobivanje ID-ja procesorja, stanja CPU-ja, takta CPU-ja itd. Procesorjev v vašem sistemu.

Za pridobitev informacij o metapodatkih fiksnih diskov v vašem sistemu, tj. Imena, prostega prostora, velikosti diska itd., Lahko uporabite naslednjo kodo.

statična praznina GetDiskMetadata ()

        {

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

System.Management.ObjectQuery objectQuery = nov System.Management.ObjectQuery ("izberite FreeSpace, Size, Name iz Win32_LogicDisk, kjer je DriveType = 3");

ManagementObjectSearcher managementObjectSearcher = nov ManagementObjectSearcher (managementScope, objectQuery);

ManagementObjectCollection managementObjectCollection = managementObjectSearcher.Get ();

foreach (ManagementObject managementObject in managementObjectCollection)

            {

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

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

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

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

            }

        }

Naslednji delček kode prikazuje, kako lahko pridobite serijsko številko nosilca trdih diskov v vašem sistemu.

statični niz GetHardDiskSerialNumber (pogon niza = "C")

        {

ManagementObject managementObject = nov ManagementObject ("Win32_LogicDisk.DeviceID = \" "+ pogon +": \ "");

managementObject.Get ();

return managementObject ["VolumeSerialNumber"]. ToString ();

        }

Če želite dobiti ProcessId procesorja v vašem sistemu, morate v polju lastnosti podatek instance ManagementObject podati "ProcessorId", kot je prikazano v delčku kode, ki sledi.

niz processorId = managementObject.Properties ["ProcessorId"]. Value.ToString ();

Če želite pridobiti taktno hitrost procesorja v vašem sistemu, morate v matriki lastnosti primerka razreda ManagementObject določiti "CurrentClockSpeed", kot je prikazano v delčku kode, ki sledi.

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

Zdaj, ko smo raziskali programiranje WMI s pomočjo C #, naj vam povem praktičen primer, ko lahko WMI uporabite. V nekaj svojih projektih sem dejansko uporabil WMI za izvajanje zaklepanja vozlišč - funkcija, ki preprečuje kopiranje in izvajanje aplikacije v drugem sistemu.

Zaklepanje vozlišča

Naj pojasnim, kaj sem storil za izvajanje zaklepanja vozlišč in zakaj je bilo to potrebno. Zaklepanje vozlišča pomeni zaklepanje vozlišča - vozlišče je le sistem. V bistvu ta koncept preprečuje namestitev in izvajanje izvršljive datoteke, ki jo ustvari vaša aplikacija, v več sistemih. Z WMI sem pridobil podrobnosti o strojni opremi sistema, v katerem je treba namestiti in zagnati aplikacijo. Nato so bile te podrobnosti šifrirane z algoritmom šifriranja in nato za ta sistem ustvarjeno edinstveno aktivacijsko kodo. Nato bo treba za aktiviranje aplikacije uporabiti to kodo. Upoštevajte, da je Id vozlišča ali aktivacijska koda edinstven, ker je vseboval kombinacijo ID-ja CPU-ja in MAC-ja sistema, v katerem naj bo aplikacija nameščena in izvedena.

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