Ohjelmointi

Windows Management Instrumentationin tutkiminen C #: ssä

Tässä artikkelissa esitän vilkaisun WMI-tekniikkaan ja siihen, miten voit työskennellä WMI: n kanssa käyttämällä C #: n WMI-kyselykieltä. Keskustelen sitten tilanteesta, jossa voit käyttää WMI: tä todellisessa maailmassa.

Mikä on WMI?

WMI on lyhenne sanoista Windows Management Instrumentation, COM-pohjainen Microsoft-tekniikka, jota käytetään järjestelmään liittyvien tietojen noutamiseen. Tämän tekniikan avulla voit hakea järjestelmän suorittimen tunnuksen, MAC-tunnuksen jne. Se koostuu joukosta tyyppejä, jotka toimivat kääreenä natiivityyppien ympärillä hakemaan laitteistoon liittyviä tietoja. WMI helpottaa matalan tason viestintää isäntäkäyttöjärjestelmän kanssa. WMI: n avulla voit työskennellä suorituskykylaskureiden kanssa tai hakea laitteistotietoja järjestelmästä.

WMI: n avulla voit hakea järjestelmän laitteiston metatietoja, kuten seuraavaa:

  1. HDD-sarjanumero
  2. HDD-koot
  3. HDD-vapaa tila
  4. CPU-sarjanumero
  5. Suorittimen kellonopeus
  6. CPU-kannan tyyppi
  7. Verkkosovittimen MAC-osoite
  8. Verkkosovittimen oletusyhdyskäytävä

Meillä on tarpeeksi teoreettista tietoa - kaivetaan nyt koodiin.

WMI: n ohjelmointi C #: ssä

Seuraava koodinpätkä käyttää WQL-kyselyä täyttämään luettelon järjestelmän loogisten levyjen nimistä. Tyypillinen WMI-kysely näyttää tältä:

Valitse * FROM Win32_Processor

Kuten koodinpätkästä näet, SelectQuery-luokkaa käytetään WQL-kyselyn muotoilemiseen.

staattinen luettelo PopulateDisk ()

        {

Listalevy = uusi List ();

SelectQuery selectQuery = uusi SelectQuery ("Win32_LogicalDisk");

ManagementObjectSearcher mnagementObjectSearcher = uusi ManagementObjectSearcher (selectQuery);

foreach (ManagementObject managementObject in mnagementObjectSearcher.Get ())

            {

disk.Add (managementObject.ToString ());

       }

palautuslevy;

    }

Huomaa, että sinun tulisi sisällyttää System.Management-nimitila (saatavana osana System.Management.dll) projektiisi. Tähän nimiavaruuteen kuuluvat WMI-luokat sisältävät seuraavat:

  1. Win32_LogicalDisk - tämä luokka edustaa tietolähdettä, joka vastaa järjestelmän tallennuslaitetta. Tämän luokan avulla voit hakea sarjanumeron, vapaan tilan ja kiintolevyn alkuperäisen koon.
  2. Win32_NetworkAdapterConfiguration - tämä luokka edustaa järjestelmän verkkosovittimen määritteitä. Voit käyttää tätä luokkaa MAC-osoitteen, IP-tilan tai oletus-IP-yhdyskäytävän tietojen hakemiseen.
  3. Win32_Processor - tämä luokka edustaa prosessoria, joka toimii järjestelmässä, johon on asennettu Windows-käyttöjärjestelmä. Voit käyttää tätä luokkaa hakemaan järjestelmän suorittimien suorittimen tunnuksen, suorittimen tilan, suorittimen kellotaajuuden jne.

Saadaksesi järjestelmän kiinteiden levyjen metatiedot, kuten nimen, vapaan tilan, levyn koon, voit käyttää seuraavaa koodia.

staattinen void GetDiskMetadata ()

        {

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

System.Management.ObjectQuery objectQuery = uusi System.Management.ObjectQuery ("valitse FreeSpace, Koko, Nimi Win32_LogicalDisk -kohdasta, jossa DriveType = 3");

ManagementObjectSearcher managementObjectSearcher = uusi ManagementObjectSearcher (managementScope, objectQuery);

ManagementObjectCollection managementObjectCollection = managementObjectSearcher.Get ();

foreach (ManagementObject managementObject in managementObjectCollection)

            {

Console.WriteLine ("Levyn nimi:" + managementObject ["Nimi"]. ToString ());

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

Console.WriteLine ("Levyn koko:" + managementObject ["Koko"]. ToString ());

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

            }

        }

Seuraava koodinpätkä kuvaa, kuinka voit hakea järjestelmän kiintolevyjen levyn sarjanumeron.

staattinen merkkijono GetHardDiskSerialNumber (merkkijonoasema = "C")

        {

ManagementObject managementObject = uusi ManagementObject ("Win32_LogicalDisk.DeviceID = \" "+ asema +": \ "");

managementObject.Get ();

palautuksen hallintaObject ["VolumeSerialNumber"]. ToString ();

        }

Saadaksesi prosessorin processId järjestelmässäsi, sinun on määritettävä "ProcessorId" ManagementObject-luokan ilmentymän ominaisuuksien taulukossa seuraavan koodinpätkän mukaisesti.

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

Jotta saat prosessorin kellotaajuuden järjestelmässäsi, sinun on määritettävä "CurrentClockSpeed" ManagementObject-luokan ilmentymän ominaisuuksien taulukossa seuraavan koodinpätkän mukaisesti.

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

Nyt kun olemme tutkineet WMI: n ohjelmointia C #: n avulla, haluan kertoa sinulle käytännön esimerkin, johon voit laittaa WMI: n käyttöön. Itse asiassa käytin WMI: tä muutamassa projektissani solmujen lukituksen toteuttamiseksi - ominaisuus, joka estää sovellusta kopioimasta toiseen järjestelmään ja suorittamasta sitä.

Solmu lukittuu

Haluan selittää, mitä tein solmun lukituksen toteuttamiseksi ja miksi sitä tarvittiin. Solmun lukitseminen tarkoittaa solmun lukitsemista - solmu on vain järjestelmä. Pohjimmiltaan tämä konsepti estää sovelluksesi luoman suoritettavan tiedoston asentamisen ja suorittamisen useissa järjestelmissä. Käytin WMI: tä hakemaan laitteiston tiedot järjestelmästä, johon sovellus on asennettava ja suoritettava. Seuraavaksi nämä yksityiskohdat salattiin käyttämällä salausalgoritmia ja sitten tälle järjestelmälle luotua ainutlaatuista aktivointikoodia. Tätä koodia on sitten käytettävä sovelluksen aktivoimiseksi. Huomaa, että solmun Id tai aktivointikoodi on ainutlaatuinen, koska ne koostuvat CPU Id: n ja MAC Id: n yhdistelmästä järjestelmässä, johon sovellus oli tarkoitus asentaa ja suorittaa.

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