Programmēšana

Windows vadības instrumentu izpēte C #

Šajā rakstā es iepazīstināšu ar ieskatu WMI tehnoloģijā un kā jūs varat strādāt ar WMI, izmantojot WMI vaicājumu valodu C #. Tad es apspriedīšu scenāriju, kurā jūs varat ievietot WMI reālajā pasaulē.

Kas ir WMI?

WMI ir Windows Management Instrumentation, COM balstītas Microsoft tehnoloģijas saīsinājums, ko izmanto, lai izgūtu ar sistēmu saistītu informāciju. Jūs varat izmantot šo tehnoloģiju, lai izgūtu savas sistēmas CPU ID, MAC ID utt. Tas sastāv no veidu kolekcijas, kas darbojas kā iesaiņojums ap vietējiem tipiem, lai izgūtu ar aparatūru saistītu informāciju. WMI atvieglo zema līmeņa saziņu ar resursdatora operētājsistēmu. Varat izmantot WMI, lai strādātu ar veiktspējas skaitītājiem vai izgūtu aparatūras informāciju no sistēmas.

Varat izmantot WMI, lai izgūtu sistēmas aparatūras metadatu informāciju, piemēram:

  1. HDD sērijas numurs
  2. HDD izmēri
  3. HDD brīva vieta
  4. CPU sērijas numurs
  5. Procesora pulksteņa ātrums
  6. Centrālā procesora ligzdas tips
  7. Tīkla adaptera MAC adrese
  8. Tīkla adaptera noklusējuma vārteja

Mums ir pietiekami daudz teorētiskās informācijas - tagad iedziļināsimies kādā kodā.

WMI programmēšana C #

Šis koda fragments izmanto WQL vaicājumu, lai aizpildītu sarakstu ar loģisko disku nosaukumiem jūsu sistēmā. Tipisks WMI vaicājums izskatās šādi:

Atlasiet * NO Win32_Processor

Kā redzat koda fragmentā, WQL vaicājuma formulēšanai tiek izmantota klase SelectQuery.

statisks saraksts PopulateDisk ()

        {

Saraksta disks = jauns Saraksts ();

SelectQuery selectQuery = jauns SelectQuery ("Win32_LogicalDisk");

ManagementObjectSearcher mnagementObjectSearcher = jauns ManagementObjectSearcher (selectQuery);

foreach (ManagementObject managementObject in mnagementObjectSearcher.Get ())

            {

disks.Pievienot (managementObject.ToString ());

       }

atgriešanās disks;

    }

Ņemiet vērā, ka projektā jāiekļauj vārda vieta System.Management (pieejama kā System.Management.dll daļa). WMI klases, kas iekļautas kā daļa no šīs nosaukumvietas, ietver:

  1. Win32_LogicalDisk - šī klase apzīmē datu avotu, kas atbilst jūsu sistēmas atmiņas ierīcei. Jūs varat izmantot šo klasi, lai izgūtu sērijas numuru, pieejamo brīvo vietu un sākotnējo HDD izmēru.
  2. Win32_NetworkAdapterConfiguration - šī klase attēlo tīkla adaptera atribūtus jūsu sistēmā. Jūs varat izmantot šo klasi, lai izgūtu MAC adresi, IP statusu vai noklusējuma IP vārtejas informāciju.
  3. Win32_Processor - šī klase apzīmē procesoru, kas darbojas sistēmā, kurā ir instalēta Windows operētājsistēma. Jūs varat izmantot šo klasi, lai izgūtu jūsu sistēmas procesoru CPU Id, CPU statusu, CPU pulksteņa ātrumu utt.

Lai iegūtu sistēmas fiksēto disku metadatu informāciju, t.i., nosaukumu, brīvo vietu, diska izmēru utt., Varat izmantot šādu kodu.

static void GetDiskMetadata ()

        {

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

System.Management.ObjectQuery objectQuery = jauns System.Management.ObjectQuery ("izvēlieties FreeSpace, Size, Name no Win32_LogicalDisk kur DriveType = 3");

ManagementObjectSearcher managementObjectSearcher = jauns ManagementObjectSearcher (managementScope, objectQuery);

ManagementObjectCollection managementObjectCollection = managementObjectSearcher.Get ();

foreach (ManagementObject managementObject in managementObjectCollection)

            {

Console.WriteLine ("Diska nosaukums:" + managementObject ["Nosaukums"]. ToString ());

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

Console.WriteLine ("Diska izmērs:" + managementObject ["Izmērs"]. ToString ());

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

            }

        }

Šis koda fragments parāda, kā var izgūt sistēmas cieto disku sējuma sērijas numuru.

statiskā virkne GetHardDiskSerialNumber (virknes disks = "C")

        {

ManagementObject managementObject = jauns ManagementObject ("Win32_LogicalDisk.DeviceID = \" "+ disks +": \ "");

managementObject.Get ();

atgriešanās managementObject ["VolumeSerialNumber"]. ToString ();

        }

Lai iegūtu procesora procesora ID jūsu sistēmā, jums jānorāda "ProcessorId" ManagementObject klases instances rekvizītu masīvā, kā parādīts sekojošajā koda fragmentā.

virknes procesorsId = managementObject.Properties ["ProcessorId"]. Value.ToString ();

Lai jūsu sistēmā iegūtu procesora pulksteni, jums jānorāda "CurrentClockSpeed" klases objekta ManagementObject īpašību masīvā, kā parādīts sekojošajā koda fragmentā.

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

Tagad, kad mēs esam izpētījuši WMI programmēšanu, izmantojot C #, ļaujiet man pateikt praktisku piemēru, kurā varat izmantot WMI. Dažos savos projektos es patiešām izmantoju WMI, lai ieviestu mezglu bloķēšanu - funkciju, kas novērš lietojumprogrammas kopēšanu citā sistēmā un tās izpildi.

Mezglu bloķēšana

Ļaujiet man paskaidrot, ko es darīju, lai ieviestu mezglu bloķēšanu un kāpēc tas bija vajadzīgs. Mezglu bloķēšana nozīmē mezgla bloķēšanu - mezgls ir tikai sistēma. Būtībā šī koncepcija neļauj jūsu lietojumprogrammas ģenerēto izpildāmo failu instalēt un izpildīt vairākās sistēmās. Es izmantoju WMI, lai izgūtu tās sistēmas aparatūras detaļas, kurā jāinstalē un jāizpilda lietojumprogramma. Pēc tam šī informācija tika šifrēta, izmantojot šifrēšanas algoritmu un pēc tam šai sistēmai izveidotu unikālu aktivizācijas kodu. Pēc tam šis kods būs jāizmanto, lai aktivizētu lietojumprogrammu. Ņemiet vērā, ka mezgla Id vai aktivizācijas kods ir unikāls, jo tie sastāv no sistēmas CPU Id un MAC Id kombinācijas, kurā lietojumprogramma bija jāinstalē un jāizpilda.

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