Menjelajahi Instrumentasi Manajemen Windows di C #

Pada artikel ini saya, akan menyajikan sekilas tentang teknologi WMI dan bagaimana Anda dapat bekerja dengan WMI menggunakan WMI Query Language di C #. Saya kemudian akan membahas skenario di mana Anda dapat menggunakan WMI untuk digunakan di dunia nyata.

Apa itu WMI?

WMI adalah singkatan dari Windows Management Instrumentation, teknologi Microsoft berbasis COM yang digunakan untuk mengambil informasi terkait sistem. Anda dapat menggunakan teknologi ini untuk mengambil ID CPU, ID MAC, dll. Dari sistem Anda. Ini terdiri dari kumpulan jenis yang bertindak sebagai pembungkus di sekitar jenis asli untuk mengambil informasi terkait perangkat keras. WMI memfasilitasi komunikasi tingkat rendah dengan Sistem Operasi host. Anda dapat menggunakan WMI untuk bekerja dengan penghitung kinerja atau mengambil informasi perangkat keras dari sistem.

Anda dapat menggunakan WMI untuk mengambil informasi metadata dari perangkat keras sistem Anda seperti berikut ini:

  1. Nomor Seri HDD
  2. Ukuran HDD
  3. HDD Free Space
  4. Nomor Seri CPU
  5. Kecepatan Jam CPU
  6. Jenis Soket CPU
  7. Alamat MAC Adaptor Jaringan
  8. Gateway Default Adaptor Jaringan

Kita sudah cukup mendapatkan informasi teoretis - sekarang mari kita gali beberapa kode.

Pemrograman WMI di C #

Potongan kode berikut menggunakan kueri WQL untuk mengisi daftar dengan nama disk logis di sistem Anda. Permintaan WMI yang khas terlihat seperti ini:

Select * FROM Win32_Processor

Seperti yang Anda lihat di cuplikan kode, kelas SelectQuery digunakan untuk merumuskan kueri WQL.

static List PopulateDisk()

        {

            List disk = new List();

            SelectQuery selectQuery = new SelectQuery("Win32_LogicalDisk");

            ManagementObjectSearcher mnagementObjectSearcher = new ManagementObjectSearcher(selectQuery);

       foreach (ManagementObject managementObject in mnagementObjectSearcher.Get())

            {

           disk.Add(managementObject.ToString());

       }

            return disk;

    }

Perhatikan bahwa Anda harus menyertakan ruang nama System.Management (tersedia sebagai bagian dari System.Management.dll) dalam proyek Anda. Kelas WMI yang disertakan sebagai bagian dari namespace ini meliputi berikut ini:

  1. Win32_LogicalDisk - kelas ini mewakili sumber data yang sesuai dengan perangkat penyimpanan di sistem Anda. Anda dapat menggunakan kelas ini untuk mengambil nomor seri, ruang kosong yang tersedia, dan ukuran awal HDD.
  2. Win32_NetworkAdapterConfiguration - kelas ini mewakili atribut adaptor jaringan di sistem Anda. Anda dapat menggunakan kelas ini untuk mengambil alamat MAC, status IP atau informasi gateway IP default.
  3. Win32_Processor - kelas ini mewakili prosesor yang berjalan pada sistem yang menginstal sistem operasi windows. Anda dapat menggunakan kelas ini untuk mengambil ID CPU, status CPU, kecepatan jam CPU, dll. Dari prosesor di sistem Anda.

Untuk mendapatkan informasi metadata dari disk tetap di sistem Anda, misalnya, nama, ruang bebas, ukuran disk, dll., Anda dapat menggunakan kode berikut.

static void GetDiskMetadata()

        {

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

            System.Management.ObjectQuery objectQuery = new System.Management.ObjectQuery("select FreeSpace,Size,Name from Win32_LogicalDisk where DriveType=3");

            ManagementObjectSearcher managementObjectSearcher = new ManagementObjectSearcher(managementScope,objectQuery);

            ManagementObjectCollection managementObjectCollection = managementObjectSearcher.Get();

            foreach (ManagementObject managementObject in managementObjectCollection)

            {

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

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

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

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

            }

        }

Potongan kode berikut mengilustrasikan bagaimana Anda dapat mengambil nomor seri volume dari hard disk di sistem Anda.

static string GetHardDiskSerialNumber(string drive = "C")

        {

            ManagementObject managementObject = new ManagementObject("Win32_LogicalDisk.DeviceID=\"" + drive + ":\"");

            managementObject.Get();

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

        }

Untuk mendapatkan processorId dari prosesor di sistem Anda, Anda perlu menentukan "ProcessorId" dalam array properti instance kelas ManagementObject seperti yang ditunjukkan dalam cuplikan kode berikut.

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

Untuk mendapatkan kecepatan clock prosesor di sistem Anda, Anda harus menentukan "CurrentClockSpeed" dalam larik properti instance kelas ManagementObject seperti yang ditunjukkan dalam cuplikan kode berikut.

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

Sekarang kita telah menjelajahi pemrograman WMI menggunakan C #, izinkan saya memberi tahu Anda contoh praktis di mana Anda dapat menggunakan WMI. Saya benar-benar memanfaatkan WMI dalam beberapa proyek saya untuk mengimplementasikan penguncian node - fitur yang mencegah aplikasi disalin ke sistem lain dan dijalankan di atasnya.

Penguncian node

Izinkan saya menjelaskan apa yang saya lakukan untuk mengimplementasikan penguncian node dan mengapa itu diperlukan. Penguncian node berarti mengunci node - node hanyalah sebuah sistem. Intinya, konsep ini mencegah executable yang dihasilkan oleh aplikasi Anda dipasang dan dijalankan di banyak sistem. Saya menggunakan WMI untuk mengambil detail perangkat keras dari sistem tempat aplikasi perlu diinstal dan dijalankan. Selanjutnya, detail ini dienkripsi menggunakan algoritme enkripsi dan kemudian kode aktivasi unik dibuat untuk sistem itu. Kode ini kemudian harus digunakan untuk mengaktifkan aplikasi. Perhatikan bahwa ID node atau kode aktivasi unik karena terdiri dari kombinasi ID CPU dan ID MAC dari sistem tempat aplikasi akan diinstal dan dijalankan.