21 Temmuz 2009 Salı

HDD Seri Numarasını Elde Etmek (C# - WMI)

HDD
HDD


HDD: Hard Disk Drive
WMI: Windows Management Instrumentation

HardDisk üreticisi tarafından, HardDisk'e atanmış olan seri numarasını elde etmek için WMI kullanabiliriz. Bir Windows Bileşeni olan WMI, sadece HDD değil, tüm donanım ile ilgili bilgiler elde etmemizi sağlayan bir yapıdır, içerisinde Win32, Registry, System gibi class'lar ve IIS, Active Directory, DNS gibi provider'lar barındırır. WMI Class'ları ve WMI Provider'ları ile ilgili detaylı bilgiyi WMI Reference üzerinde bulabilirsiniz.

.NET Framework içerisindeki System.Management namespace'i altındaki üyeler kullanılarak WMI işlemleri gerçekleştirilebilir. HardDisk bilgilerini sorgulamak için Win32_DiskDrive ve Win32_PhysicalMedia sınıfları kullanılır. System.Management namespace'i ile ilgili ayrıntılara bu adres üzerinden ulaşabilirsiniz.

msdn Magazine içerisinde yayınlanmış olan WMI and .NET başlıklı makaleyi de bu link üzerinden okuyabilirsiniz.

Bu kadar giriş bilgisinden sonra gelelim HardDisk'imizin seri numarasına nasıl ulaşacağımıza. Bunu yapmak için öncelikle proje referanslarımıza System.Management eklenmeli, ardından da kodumuza using System.Management; ifadesi ile gerekli olan namespace'i eklemeliyiz. WMI içerisindeki Win32_PhysicalMedia sınıfı istediğimiz seri numarasına ulaşmamızı sağlayacak. İstersek HardDisk model ve tip bilgilerine ulaşmak için de Win32_DiskDrive sınıfını kullanabiliriz.

Öncelikle bilgisayarımızdaki fiziksel disklerin seri numaralarını kolleksiyon olarak elde etmemizi sağlayacak bir method yazalım.

public static List<string> GetSerialsFromHardDrives()
{
List<string> serials = new List<string>();

ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");

ManagementObjectCollection disks = searcher.Get();
foreach(ManagementObject disk in disks)
{
if (disk["SerialNumber"] == null)
serials.Add("");
else
serials.Add(disk["SerialNumber"].ToString());
}
return serials;
}

Yukarıdaki kod bloğunda öncelikle tespit edilecek olan seri numaralarını depolamak üzere generic bir string kolleksiyonu hazırlanıyor. Ardından basit bir select ifadesi kullanılarak ManagementObjectSearcher nesnesi örnekleniyor. Sonrasında, bu nesnenin Get isimli methodu kullanılarak fiziksel disklerin nesne örnekleri bir kolleksiyon olarak alınıyor. Son adımda ise yaptığımıız şey eldeki kolleksiyonda dönerek her bir diskin seri numarasını elimizdeki string kolleksiyonuna eklemek. En son olarak da elimizde bulunan seri numaralarını barındıran string kolleksiyonunu methoddan geri döndürüyoruz.

Aşağıdaki method içerisindeki kod bloğu ise farklı bir WMI sınıfına select atıyor ve bilgisayarımızdaki HardDisklerin tip ve model bilgilerini Console ekranına yazdırıyor.

public static void DisplayHDDInfo()
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");

foreach(ManagementObject disk in searcher.Get())
{
Console.WriteLine("Model: {0} , InterfaceType: {1}", disk["Model"], disk["InterfaceType"]);
}
}

Bilgisayarımızdaki harddisklere ait seri numarası, model ve tip gibi bilgileri nasıl elde edebileceğimizi basit birer method ile ele aldık. Artık, elde edilen bilgiler ile istediğiniz işlemi gerçekleştirebilirsiniz. Hepinize kolay gelsin.

Hiç yorum yok: