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.
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.
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 ;)