Ana Sayfa | English Blog | Seminer TV | Dil Cookie Sil  Blog'u Mail ile takip et!  
Daron Yöndem - Windows Management Instrumentation ne ola ki?
bir yazılımcının tasarıları...
 Monday, January 25, 2010

Bugün üzerinde uğraştığım bir projede X bir windows uygulamasının çalıştığı makinedeki tüm networking device'ları Enable etmesi veya tam tersine Disable etmesi gerekiyordu. Çözümü uygularken aslında bu konudan blogda da bahsetmenin iyi olabileceğini düşündüm. Malum bu tip bir işlemi kendi ellerimizle Windows'un sunduğu arayüzlerden yapabiliriz fakat programatik olarak da bunu yapmak mümkün müdür? Tabi ki mümkün :) Aslında bu noktada anahtar cevap WMI (Windows Management Instrumentation).

WMI için çok farklı tanımlar yapılbilir fakat en yüzeysel hali ile bu makalemizi ilgilendiren kısmı WMI aracılığı ile bizim işletim sistemi tarafından sunulan birçok yönetimsel (yönetilebilir) cihazın (bazı) ayarlarına ve aksyonlarına ulaşabiliyor olmamız. Bunlar bildiğimiz Property ve Method'lar şeklinde karşımıza çıkar. Bu dünyaya hızlı bir giriş yapmak için aslında WMI içerisinde neler bulabileceğinizi ve varlığını bilmeniz yeterli çünkü WMI'ın yapısını bilmeden de hazır araçlarla çok hızlı ilerleyebilirsiniz.

WMI Code Creator v1.0

Yukarıdaki linkten indireceğiniz araç size tüm WMI sınıflarını gezme şansı verecektir. Hatta bu kadarla kalmayıp bu sınıflara VB.NET, VBScript ve C# tarafından nasıl ulaşabileceğinizi gösteren hazır kodlar da üretecektir. Bu kodları doğrudan herhangi bir .NET uygulamasını alıp çalıştırabilmeniz için tek yapmanız gereken System.Management DLL'lerini referans olarak projenize eklemek.

WMI Code Creator içerisinden NetworkAdapter'lara ulaşan kodu alabiliyoruz.
WMI Code Creator içerisinden NetworkAdapter'lara ulaşan kodu alabiliyoruz.

Yukarıdaki ekran görtünüsünden aldığımız kod doğrudan bir sistemdeki tüm NetworkAdapter yani network cihazlarının listesini veriyor. Bu cihazlarla ilgili tek tek işlem yapmak da hiç zor değil. Uygulama içerisinde "Execute a method" adındaki ikinci ekrana geçtiğinizde istediğiniz WMI sınıfına göz atarak hangi metodların bulunduğu görebilirsiniz. Bu metodlardan birini seçerseniz bu sefer de o metodu çağıran bir kod yaratılacaktır.

Network cihazlarına uygulayabildiğimiz aksyonlar.
Network cihazlarına uygulayabildiğimiz aksyonlar.

Aynı şekilde bu gibi cihazların eventlarını da dinleyebileceğinizi tabi ki unutmayalım ve son bir dipnot olarak da WMI üzerinde bulabileceğiniz herşeyin sadece işletim sistemi ile alakalı olmak zorunda OLMADIĞI olacak :) Kafalar hafiften karışmış olabilir fakat özetlemek gerekirse. WMI Provider'ı olan her tür yazılım bu motoru kullanabilir. Örneğin bir makineye yüklü SQL Server'da her veri tabanı yaratıldığında haberdar olmak isteyebilirsiniz :) Bu gibi daha birçok şey WMI'lar üzerinden yapılabilir.

Gelelim bizim hikayemize... Bir sistemdeki Network cihazlarını yakalayıp onları kapatabilecek veya açabilecek kod aşağıdaki şekilde sonlanıyor;

[VB]

        Dim WMI = GetObject("winmgmts:\\.\root\cimv2")

        Dim Adapters = WMI.Execquery("Select * from Win32_NetworkAdapter")

        For Each Adapter In Adapters

            Adapter.Disable()

        Next

Hepinize kolay gelsin ;)

Monday, January 25, 2010 10:41:16 PM (GTB Standard Time, UTC+02:00)  #    Comments [3]   .NET Framework 3.5 | Visual Basic 2008 | WMI  | 
Copyright © 2010 Daron Yöndem. Tüm hakları saklıdır.