ForumTayfa  

Go Back   ForumTayfa > Güvenlik & Bilgisayar & İnternet & Webmaster & Programlama Bölümü > Güvenlik & Bilgisayar & İnternet & Webmaster & Programlama > Programlama

Programlama Programlama hakkında herşeyi paylaştığımız, soru ve sorunlarımızı tartıştığımız bölüm...

Yeni Konu aç  Cevapla
 
LinkBack Seçenekler Stil
Alt 28.12.06, 15:30   #1 (permalink)
Deneyimli Tayfa
 
silentwolf - ait Kullanıcı Resmi (Avatar)
 
Üyelik Tarihi: Dec 2006
Nereden: burada
Mesaj Sayısı: 3.964
Konu Sayısı: 157
Takım: Fenerbahçe
Rep Gücü: 196650
Rep Puanı: 19663395
Rep Derecesi : silentwolf 0-10000000silentwolf 0-10000000silentwolf 0-10000000silentwolf 0-10000000silentwolf 0-10000000silentwolf 0-10000000silentwolf 0-10000000silentwolf 0-10000000silentwolf 0-10000000silentwolf 0-10000000silentwolf 0-10000000
Ruh Hali:

Standart C# ile WMI Nasıl Kullanılır?




WMI (Windows Managment Interface), Windows 2000 ve sonrası işletim sistemlerinde bulunan, windows programcılarına işletim sisteminde bulunan hemen hemen her nesneyi denetleme ve yönetme olanağı sunan bir arabirimdir.
WMI kullanılarak Windows işletim sistemindeki dosya ayarlarından güvenlik ayarlarına kadar hemen her şey denetlenebilir ve WMI’ın sunduğu metodlarla değerleri değiştirilebilir. WMI hem yerel hem de uzak makinelerde kullanılabilir, programlaması ise oldukça kolaydır.

WMI’ın, bulunduğu makine üzerinde farklı “Namespace” leri vardır. Varsayılan olarak bu “\\makine\root\default“ tur. Fakat içinde bizim için gerekli olan “WMI Class” larını barındıran “\\makine\root\cimv2 “ Namespace’ini kullanacağız. Bir “WMI Class”’ı Windows işletim sistemi üzerindeki bir nesnenin (Örneğin bir dosyanın) özelliklerini barındıran ve gerektiğinde sahip olduğu metodları kullanarak nesneye ait değerleri değiştirebilen bir sınıftır. Örnek olarak “Win32_Process” “cimv2” namespace’i içinde bir WMI sınıfıdır ve işletim sistemi üzerinde çalışan süreçleri görmek, istenildiğinde ise belirli bir süreci sonlandırmak veya yeni bir süreç başlatmak için kullanılabilir. Bir Windows işletim sistemi üzerindeki WMI sınıfları “wbemtest.exe” programı yardımıyla görülebilir.

Windows XP de yaklaşık 900 WMI sınıfı vardır ve bu sınıfların yapabildikleri WMI verimliliği konusunda size bir fikir verebilir. Aşağıdaki resimlerde, “wbemtest.exe” programının işletim sistemi üzerindeki bütün WMI sınıflarını sıralanması ve istenilen sınıfın özelliklerini ve kullanabileceği metodları gösterilmesi anlatılmaktadır.




Bu pencerede içeriğini görmek istediginiz sınıfın üzerine çift tıklayın.


Kırmızı daireler içinde, makinedeki sabit diskler hakkında bilgi alan (Örneğin blok sayısı veya başlık bilgisi gibi) ve diskler üzerinde bazı işlemler yapabilen Win32_LogicalDisk sınıfı görülüyor(ikinci daire).

Aşağıda yerel ya da uzak bir sistemde çalışan süreçleri gösteren, ve seçilen bir süreci sonlandırabilen basit bir uygulama örneği bulunmaktadır. Bu uygulamada Win32_Process sınıfını kullandım. Süreçleri listelemek için myListView adında bir listView kontrolü ve bu listView’in “Name”,”Parent Process ID”, “Process ID”, “Executable Path” olarak 4 tane sütunu olduğunu varsaydım.

.Net altındaki ListView kontrolü konu dışı olduğundan burada ele alınmayacaktır.

Bu kodu yazarken System.Managment NameSpace’i kullanılmıştır, bunun için System.Managment sınıfını koda referans olarak eklemelisiniz.(Kodun başına da using System.Managment; deyimini koymayı unutmayın )

string[] lvItem = new string[4]; //süreçlerin Listview’in sütunlarına ait bilgilerin depolanacağı dizi
string machineName = “MachineName”; //başlanılacak makine adı
ManagementObjectSearcher mySearcher; //nesne sorgusunu çalıştırıp, dönen değerleri
//toplayacak olan ManagmentObjectSearcher
ManagementObjectCollection myObjectCollection; //mySearcher’dan dönen nesnelerin
//depolanacağı ObjectCollection
ObjectQuery oq; //sorgu stringini tutacak nesne sorgusu
ConnectionOptions co = new ConnectionOptions(); //uzak makine bağlantısında
//kullanılacak bağlantı seçeneklerini tutmak için
co.Username = “username”;
co.Password = “Password” ;
//burada unutulmaması gereken şey yerel makineye yapılan bağlantılarda kullanıcı adı ve şifre
//kullanamayacağınızdır. Yerel makine bağlantısı giriş yaptığnız aktif kullanıcı hesabı ve bu
//hesabın hakları çerçevesinde gerçekleşir . Böyle bir durumda kullanıcı adı ve şifresini boş bırakın
//managment scope üzerinde sorgu gerçekleştirecegimiz WMI namespace’ini tanımlamaktadır.
ManagmentScope ms = new ManagmentScope(“\\\\” + machineName + “\\root\\cimv2”,co);
oq = new ObjectQuery(“SELECT * FROM Win32_Process”); //sorgu string’i
mySearcher = new ManagmentObjectSearcher(ms,oq);
// ms scope’u içinde oq sorgusu kullanılarak, ilgili nesneler toplanacak
myObjectCollection = mySearcher.Get();
//mySearcher da belirtilen sorgu çalı tırılıyor ve geri dönen nesneler myObjectCollection içinde toplanıyor.
// aşağıda dönen her nesnenin (burada myObject” özellikleri alınıyor (““ içindeki ifadeler)
//ve değerleri string veri tipine çevrilerek lvItem dizisine aktarılıyor. Sonra lvItem dizisindeki
//değerler myItem adındaki ListView kontrolü nesnesine geçiriliyor. (Dikkat edilecek nokta ise
//lvItem uzunluğunun myListView kontrolündeki sütun sayısına eşit olduğudur. Sütunlardaki
//değerler ListView kontrolünde SubItem olarak adlandırılır.)

foreach (ManagmentObject myObject in myObjectCollection)
{
lvItem[0] = myObject[“Name”].ToString();
lvItem[1] = myObject[“ParentProcessId”].ToString();
lvItem[2] = myObject[“ProcessId”].ToString();
try
{
lvItem[4] = myObject[“ExecutablePath”].ToString();
}
catch
{
lvItem[4] = “not available”;
} ListViewItem myItem = new ListViewItem(lvItem);
myListView.Items.Add(myItem);
}

//foreach dongüsü içindeki try/catch blo u bazı süreçlerin(SystemIdleProcess gibi)
//ExecutablePath de erinin olmadı ı dü ünülerek konulmustur. Bu durumda kod hata üretmek
//yerine kontrolün “Executable Path” sütununa deger olarak “not available” girecektir.
//Artık süreçleri sıralayıp ListView da görebildigimize göre seçilen süreci öldüren kodu yazabiliriz:
//myListView kontrolündeki mouse olaylarını izlemek için a a ıdaki olay i eyicisini tanımladık. Bu olay
//tetiklendi i zaman yani kontrol üzerinde mouse hareketi oldugunda, “myListView_mouseDown”
//metodu ça rılacaktır. Bu olay i leyicisi sınıfın InitializeComponent() metodunda tanımlanmalıdır.

this.myListView.MouseDown += new
System.Windows.Forms.MouseEventHandler(this.myList View_mouseDown); //burası tek satır

//artık asıl kodumuza geçebiliriz.

private void myListView_MouseDown(object sender, MouseEventArgs e)
{
ContextMenu conMenu = new ContextMenu(); //sa mouse tu u tıklandı ında açılacak menü
MenuItem killProcess; //menu içinde yer alacak menuItem
// gerçekle en bir mouse hareketinin sa tu tıklaması olup olmadı ı denetleniyor
if (e.Button == MouseButtons.Right)
{
myListView.ContextMenu = conMenu;
killProcess = new MenuItem();
killProcess.Text = “Terminate Process”;
conMenu.MenuItems.Add(killProcess);
killProcess.Click += new EventHandler(killProcess_Click); // killProcess menu nesnesi
//tıklanıp tıklanmadı ını denetleyecek olay i leyicisi, tıklanırsa killProcess_Click
//metodunu ça ıracaktır.
}
}
private void killProcess_Click(object sender, EventArgs e)
{
string processID = myListView.SelectedItems[0].SubItems[2].Text;
string processName = myListView.SelectedItems[0].SubItems[0].Text;
string queryString = "SELECT * FROM Win32_Process WHERE ProcessID
='" + processID +"'"; //burası tek satır
ObjectQuery objq = new ObjectQuery(queryString);
ManagementScope ms = new ManagementScope("\\\\"+ MachineName +
"\\root\\cimv2"); //burası tek satır
ManagementObjectSearcher objSearch = new
ManagementObjectSearcher(ms,objq); //burası tek satır
ManagementObjectCollection objqColl ;
objqColl = objSearch.Get();
ListViewItem lvItem;
try
{
foreach (ManagementObject mo in objqColl)
{
mo.InvokeMethod("Terminate",null);
}
lvItem = processList.SelectedItems[0];
lvItem.Remove();
MessageBox.Show(processName +" has been successfully terminated");
}
catch(Exception ex)
{
MessageBox.Show("Error Terminating "+ //burası tek satır
processList.SelectedItems[0].SubItems[0].Text+" because: "+ex.ToString());
}
}

Umarım bu döküman okuyanlara faydalı olur.
İyi çalışmalar...


__________________
bir silahım olsaydı...




hiç bir farklılık ayrımcılığa neden olamaz.
Hürriyet Hürriyettir.

silentwolf isimli Üye şimdilik offline konumundadır   Alıntı ile Cevapla
Cevapla


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 
Seçenekler
Stil

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Açık
Pingbacks are Açık
Refbacks are Açık



Tüm Zamanlar GMT +3 Olarak Ayarlanmış. Şuanki Zaman: 05:16.


Powered by vBulletin® Version 3.8.0
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.6.0
User Alert System provided by Advanced User Tagging v3.0.6 (Lite) - vBulletin Mods & Addons Copyright © 2020 DragonByte Technologies Ltd.
ForumTayfa

Arşiv: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 16 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 95 96 97 98 99 100 102 103 104 105 106 155 156 157 158 159 160 161 162 163 164 167 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271


ForumTayfa - Link Değişimi
Telinka İletişim | Voip Ürünleri | Link Değişimine Katılın |

Sitemiz bir forum sitesi olduğundan dolayı, kullanıcılar her türlü görüşlerini önceden onay olmadan anında siteye yazabilmektedir. ForumTayfa Yöneticileri mesajları itina ile kontrol etse de, bu yazılardan dolayı doğabilecek her türlü sorumluluk yazan kullanıcılara aittir. Yine de sitemizde yasalara aykırı unsurlar bulursanız [email protected] email adresine bildirebilirsiniz, şikayetiniz incelendikten sonra en kısa sürede gereken yapılacaktır.

Any member of our web site has the right of adding comments instantly without getting permisson due to the forum structure of our site basis. Althought, our site modarators check comments with care, all the responsibilities sourced from these comments directly belong to the members. If you still find any illegal content in our site ( A.buse, H.arassment, S.camming, H.acking, W.arez, C.rack, D.ivx, Mp.3 or any Illegal Activity ), please report us via [email protected] .Your reports will be evaluated as soon as the arrival of your e-mail.