|  | 
        
            | 
                    
                        | WMI ile Harddisk Seri Numarası Kontrolü |  |  
                        | 
	
    
		
            | Gönderiliyor lütfen bekleyin... | 
 |  | 
        
            | Bu makalemizde bir console uygulaması ile harddisk’imizin 
marka / model, tip ve seri numarası (üretici tarafından belirlenen seri no) gibi 
bilgilerini nasıl elde edebileceğimizi görüp WMI (Windows Management Instrumentation) 
ve System.Management isim alanı ile tanışacağız. 
Giriş 
 Öncelikle harddisk’imizin marka/model, tip ve 
  seri numarası gibi bilgileri öğrenmenin bize getireceklerinden kısaca bahsedelim.
 
 Yazılım konusunda her geliştiricinin kafasını 
  kurcalayan bir konudur lisanslama sorunu.
 Bir yazılım yaratırken sadece kendi belirlediğimiz kişilerin bu yazılımı kullanabilmesini 
  isteyebiliriz (örn: ticari uygulamalar).Bu nedenle zaman içerisinde çeşitli 
  kontrol mekanizmaları ve yöntemleri geliştirilmiştir.Bunlardan bazılarına değinelim:
 
 İlk yöntem “Activation” adı verilen ve sizin 
  tarafınızdan belirlenen ve programa atanan bir kullanıcı numarasının internet 
  üzerindeki bir sunucu tarafından kontrol edilmesi yöntemidir. Bu yöntem büyük 
  yazılım şirketleri tarafından sıkça kullanılmaktadır. Kullanıcı numarası her 
  açılışta kontrol ediliyorsa, kullanıcının programı kullanırken sürekli olarak 
  internete bağlı kalması gibi bir zorunluluk vardır.Bu da bir dezavantaj olarak 
  karşımıza çıkmaktadır. Ayrıca bu numarayı kontrol eden sunucunun da bir maliyeti 
  vardır.
 
 Diğer bir yöntem Harddisk Volume Serial Number 
  denen numarayla yazılımı özdeşleştirmektir. Bu yöntem pek kullanışlı değildir, 
  zira harddisk her format’landığında yeni bir numara yaratılmaktadır.
 
 Bizim yazımızda inceleyeceğimiz konu, başka bir 
  yöntem olan, yazılımımızı harddisk’in üretici tarafından belirlenen ve ürüne 
  atanan seri numarası ile özdeşleştirme yöntemiyle ilgilidir. Bu şekilde yapılacak 
  bir lisanslama ile yazılım sadece belirlenen/izin verilen sabitdisk ile çalışacaktır. 
  Yazının ilerleyen bölümlerinde yaratacağımız proje ile edindiğimiz bilgileri 
  bu şekilde kullanabiliriz.
 
 Bu bilgiler tabiki sadece lisanslama alanında 
  kullanılmaz, ileride bahsedeceğimiz WMI’ın sınıfları içerisinden benzer yöntemlerle 
  sistemin her parçası hakkında bilgi edinmek mümkündür. Bu yüzden kullanım alanı 
  sınırsızdır. Bu konuda yaratıcılık size kalmıştır.
 
 WMI nedir? 
Açılımı Windows Management Instrumentation olan, 
  Windows Yönetim Araçları/Yardımcıları olarak türkçeye çevrilen WMI, bir Windows 
  işletim sistemi bileşenidir. Bu bileşen sistemdeki yönetim bilgilerine erişimi 
  amaçlar, yönetim görevlerini yürütür, yürütmeye yardımcı olur. WMI, içerisinde 
  Win32, Registry, System gibi sınıflar ve IIS, Active Directory, DNS provider 
  gibi birçok sağlayıcı barındırır.
 
 WMI sınıfları ve sağlayıcıları hakkında detaylı 
  bilgiye
 
 http://msdn.microsoft.com/library/en-us/wmisdk/wmi/wmi_reference.asp
 
 adresinden erişebilirsiniz.
 
 System.Management İsim 
  Alanı
 
 .NET Framework içerisindeki System isim alanlarından 
  birisi olan System.Management, WMI yapısı içerisinde belirlenmiş sistem,sisteme 
  bağlı olan aygıtlar ve uygulamalarla ilgili geniş bir yönetim bilgisine ve yönetim 
  uygulamalarına erişimi sağlar.
 
 System.Management içerisindeki sınıflarla sistemimizdeki 
  bileşenlere erişip bunlar hakkında -sağlanan- her türlü bilgiyi sorgulayabiliriz. 
  Bu yüzden projemizde harddisk bilgisine erişmek için bu isim alanından (Spesifik 
  olarak Win32_DiskDrive sınıfından) yararlanacağız.
 
 System.Management isim alanı ile ilgili detaylı 
  bilgiye:
 
 http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemmanagement.asp
 
 adresinden erişebilirsiniz.
 
 Örnek Program
 
 Artık kodlamaya geçebiliriz. Yaratacağımız projede 
  sadece bilgileri sistemden almakla ilgileneceğimiz için bir c# console uygulaması 
  yaratarak işe başlıyoruz.
 
 Bahsettiğimiz gibi projemizin önemli bir kısmı 
  için System.Management isim alanını kullanacağız. Bu isim alanı varsayılan olarak 
  Reference bölümüne eklenmediği için .NET Component’leri arasından biz ekleyelim.
 
 
   
 Isim alanını kullanabilmek için de using direktiflerimiz 
  arasına
 
 using System.Management;
 
 ifadesini ekleyelim.
 
 Öncelikle, erişmek istediğimiz bilgiler model, 
  tip (IDE/SCSI ) ve seri numarası olduğu için buna uygun, harddisk bilgilerinin 
  tutulacağı bir sınıf hazırlayalım.
 
 
 
  Bu sınıfta private olarak tanımladığımız model,tip 
  ve seriNo nesnelerine belirlediğimiz metotların içerisindeki get-set bloklarıyla 
  eriştik. 
    | class hardDisk {
 private object model = null;
 private object tip = null;
 private object seriNo = null;  
             public 
        object Model
 {
 get
 {
 return 
        model;
 }
 set
 {
 model 
        = value;
 }
 }
 
 public object Tip
 {
 get
 {
 return 
        tip;
 }
 set
 {
 tip 
        = value;
 }
 }
 
 public object SeriNo
 {
 get
 {
 return 
        seriNo;
 }
 set
 {
 seriNo 
        = value;
 }
 }
 }
 
 
 
 |  Burada veri tipi olarak object kullanmamızın sebebi WMI sınıflarından gelen 
  verilerin object tipinde olması ve bu verileri ekrana yazdıracağımız Console.Writeline() 
  metodunun da object tipi almasıdır. Istersek bu verileri string olarak tanımlayıp 
  ToString() metoduyla tür dönüşümü de yapabiliriz.
 
 Şimdi sıra geldi asıl işlevi yapacak olan Main 
  metodumuzu yazmaya. Metodumuz içerisinde öncelikle sistemimizdeki harddiskler 
  için bir koleksiyon tanımlamalıyız. Bunu yapabilmek için:
 
 using System.Collections;
 
 direktifini direktiflerimiz arasına ekliyoruz. 
  Boylece using direktifleri aşağıdaki gibi görünecektir.
 
 using System;
 using System.Collections;
 using System.Management;
 
 Artık Main metodu içerisinde koleksiyonumuzu tanımlayabiliriz:
 
 ArrayList hddCollection = new ArrayList();
 
 Bu bölümden sonra küçük bir sorunla karşı karşıya 
  kalmaktayız : Sistemimizdeki harddisk’lerin bilgisine Win32_DiskDrive 
  sınıfıyla erişilmektedir,fakat bu sınıf istediğimiz bilgi türlerinden sadece 
  tip ve model değişkenlerini bize sağlamaktadır. Harddiskin seri numarasına ise 
  Win32_PhysicalMedia sınıfıyla erişilebilmektedir. (Bu bilgileri sağlayan 
  parametrelerin detaylı listesi için referanslar bölümündeki ilgili sınıfın adresine 
  göz atabilirsiniz.)
 
 Bu yüzden bu sınıfları kullanarak bu bilgileri 
  sırayla sorgulayacağız.
 
 Öncelikle gereken bilgilerin bir kısmını Win32_DiskDrive 
  sınıfıyla sorgulayalım :
 
 
 
  Bu kod ile ManagementObjectSearcher sınıfı yardımıyla 
  taramamızı gerçekleştirecek nesneyi yarattık 
    | ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive"); 
       
      foreach(ManagementObject disk in searcher.Get())
 {
 hardDisk 
        hdd = new hardDisk();
 hdd.Model 
        = disk["Model"];
 hdd.Tip 
        = disk["InterfaceType"];
 hddCollection.Add(hdd);
 }
 
 
 
 |  Görüldüğü gibi basit bir SELECT ifadesiyle bir veri tabanını sorgular gibi WMI’da 
  tanımlanmış Win32_DiskDrive bilgisini elde ettik. Daha sonra sistemdeki her 
  harddisk için ManagementObjectSearcher’ın Get() metoduyla bilgileri alarak döngü 
  içerisinde değişkenlerimize atadık ve her harddisk’i koleksiyonumuza ekledik.
 
 Şimdi de geriye kalan seri numarası bilgisini 
  Win32_PhysicalMedia sınıfıyla sorgulayarak daha önceden koleksiyonumuza kattığımız 
  harddisklerin bilgilerine ekleyelim :
 
 
 
  Yine basit bir SELECT ifadesiyle Win32_PhysicalMedia 
  bilgisini elde ettik. Burada bir index değişkeni kullanmamızın sebebi daha önceden 
  belirlediğimiz koleksiyon elemanlarına erişmektir. Döngü içerisinde bu elemanlara 
  sıradan erişerek eksik olan SeriNo bilgisini (bilgi yoksa “Tanimsiz” ifadesini) 
  ekledik ve böylece tüm istenilen bilgiler tamamlanmış oldu. 
    | searcher = new ManagementObjectSearcher("SELECT 
      * FROM Win32_PhysicalMedia");  
      int index = 0; foreach(ManagementObject disk in searcher.Get())
 {
 hardDisk 
        hdd = (hardDisk)hddCollection[index];
 if 
        (disk["SerialNumber"] == null) hdd.SeriNo = "Tanimsiz";
 else 
        hdd.SeriNo = disk["SerialNumber"];
 ++index;
 }
 
 
 
 |  
 Artık son olarak bu bilgilerimizi ekrana yazdıracak 
  bloğu yazacağız.
 
 
 
  Görüldüğü gibi koleksiyondaki her sınıf üyesi 
  için bilgileri şekilli bir biçimde tek tek ekrana yazdırdık. 
    | Console.WriteLine(); Console.WriteLine("Harddisk Info");
 Console.WriteLine("-------------");
 Console.WriteLine();  
      index = 1;
 foreach(hardDisk hdd in hddCollection)
 {
 Console.WriteLine("{0}. 
        Harddisk",index);
 Console.WriteLine();
 Console.WriteLine("Model:\t\t" 
        + hdd.Model);
 Console.WriteLine("Tip:\t\t" 
        + hdd.Tip);
 Console.WriteLine("Seri 
        No:\t" + hdd.SeriNo);
 Console.WriteLine();
 ++index;
 }
 Console.ReadLine();
 
 
 
 |  
 
  
 Son Olarak
 
 Bu makalemizde öncelikle yazılım sektöründe lisanslamaya 
  daha sonra da kısaca WMI’a değindik, sağladığı bilgi ve yöntemlere erişmek için 
  gereken System.Management isim alanını inceledik ve harddisk’imizle ilgili bilgileri 
  ekrana yazdıran bir console uygulamasını c# dilinde yazdık.
 Dilerseniz aşağıdaki referansları kullanarak yazıdaki konularla ilgili detaylı 
  bilgiye erişebilirsiniz. Bir başka yazıda görüşmek üzere.
 
 Yazıda geçen örnek uygulamayı indirmek 
  için tıklayınız.
 
 Referanslar:
 
 WMI : http://msdn.microsoft.com/library/en-us/wmisdk/wmi/wmi_reference.asp
 
 System.Management İsim Alanı : http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemmanagement.asp
 
 Win32_DiskDrive Sınıfı : http://msdn.microsoft.com/library/en-us/wmisdk/wmi/win32_diskdrive.asp
 
 Win32_PhysicalMedia Sınıfı : http://msdn.microsoft.com/library/en-us/wmisdk/wmi/win32_physicalmedia.asp
 
 NOT: Bu makalede yarattığımız programın esin 
  kaynağı ve benzeri olan bir hdd seri no bulma programını http://www.codeproject.com/csharp/ 
  adresinde bulabilirsiniz.
 
 
 
                Makale:WMI ile Harddisk Seri Numarası Kontrolü C#, Visual C# ve .NET Arden Agopyan
 | 
        
            |  | 
        
            |  | 
        
            | 
                    
                        
                            
                        
                            Eklenen Son 10 
                            Bu Konuda Geçmiş 10 
                        
                            Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
                         
                            Son Eklenen 10 Makale Yükleniyor
                         
                            Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
                         | 
        
            |  |