Merhabalar


         Bu makalemde WMI mimarisi, classları ve System.Management Namespace’ini inceleyeceğiz.


         İşletim sistemimizde çalışan uygulamalar, servisler gibi bileşenler hakkında bilgi edinmek, yönetimlerini sağlamak, çalışmaları sırasında ortaya çıkan hataları veya perfomans problemlerini gözlemlemek ve bu hataların / problemlerin nedenlerine ulaşmak gereksinimi ile karşılaştığımızda Window Management Instrumentation (WMI) mimarisini kullanarak biraz önce bahsedilen işlemleri ve daha fazlasını kendi geliştirdiğimiz uygulamalar sayesinde kolayca yapabiliriz. WMI bütün Windows tabanlı uygulamalarda özellikle yönetimsel işlemlerin yapılmasında kullanılabilir.


         WMI mimarisi üç adet katmandan oluşur. Bunlardan ilki olan Client, WMI kullanarak uygulamanın işleyişi hakkında bilgi toplama, uygulamaları konfigüre etme gibi işlemler yapan uygulamalardır. İkinci katman olan Object Manager katmanı ise Client ve Provider arasında köprü vazifesi gören ve WMI işlemlerinin gerçekleşmesi için servisler sunan katmandır. Son katman olan Provider katmanı ise Client uygulamalara veri sağlayan, Client’lar tarafından çağırılan metodları invoke eden katmandır. WMI Mimarisi daha detaylı olarak aşağıdaki şemadan incelenebilir.



         .NET ile uygulamalarımızda WMI işlemlerini gerçekleştirdiğimiz namespace System.Management namespace’idir. System.Management namespace’inin ManagementObjectSearcher nesnesi ile uygulamamızda işimizi görecek olan ilgili ManagementObject’leri elde edebiliriz. ManagementObject’ler object-oriented yapıdadırlar ve içlerindeki her bir class ilgili ManagementObject’in property ve metodlarını taşır. Uygulama geliştiriciler de ellerindeki ManagementObject nesnesi ile uygulama geliştirdikleri sistemlerde istedikleri işlemleri gerçekleştirebilirler.

         WMI’da elde etmek istediğimiz verileri query’ler yardımıyla select sorgularında çekebiliriz. Bu select sorgularında ise where clause’ını kullanarak bizim ilgilendiğimiz, daha spesifik verileri de alabiliriz. Örneğin aşağıdaki kod bilgisayarda kurulu olan servislerden startup type’ları automatic olanları getirir:

         SELECT * FROM Win32_Service WHERE StartMode = ‘Auto’


         WMI Win32_Service gibi birçok class’a sahiptir. Ben bu makalemde bu class’lardan bazılarını açıklayarak sahip oldukları property’ler hakkında bilgi vereceğim ve ardından WMI ile bazı sistem, uygulama bilgilerine nasıl ulaşabileceğimize, tüm VMI Classları için sahip olunan özelliklerin nasıl eldeedilebileceğine dair örnek uygulamalar yapacağım.


I)Win32_ComputerSystem


Bir Windows İşletim Sistemi çalışan bilgisayar hakkındaki bilgileri barındırır.



Açıklamalar.
































































































































































AutomaticResetBootOption(Boolean) Makinanın bir sistem hatasından sonra kendini yeniden başlatıp başlatmayacağı bilgisinin tutulduğu property’dir.
AutomaticResetCapability(Boolean) Otomatik olarak yeniden başlatma özelliğinin makine ile uyumlu olup olmadığı bilgisinin tutulduğu property’dir.
BootOptionOnLimit(UInt16) Reset limiti aşıldığında sistemin davranışını belirtir.
BootOptionOnWatchDog(UInt16) watchdog timer çalıştırktan sonra gerçekleşen boot işleminin tipinin tutulduğu property’dir.
BootROMSupported(Boolean) Boot ROM desteklenip desteklenmediği bilgisinin tutulduğu property’dir.
BootupState(String) Sistemin nasıl başlatıldığı bilgisinin tutulduğu property’dir.
Caption(String) Bilgisayar adının tutulduğu property’dir.
ChassisBootupState(UInt16) Kasanın açılma şeklinin belirtildiği property’dir.
CreationClassName(String) Mevcut VMI Class’ının belirtildiği propertydir. Bu propertyden alt propertylere tekrar ulaşılabilir.
 
CurrentTimeZone(SInt16) Bilgisayar sisteminin saatinin Coordinated Universal Time saati ile dakika cinsinden karşılaştırıldığı property’dir
DaylightInEffect(Boolean) Daylight saving özelliğinin aktif olup olmadığının bilgisinin tutulduğu property’dir.
Description(String) Sistemin açıklamasının tutulduğu property’dir.
DNSHostName(String) Bilgisayarın DNS host name’inin tutulduğu property’dir.
Domain(String) Bilgisayarın dahil olduğu domain adının tutulduğu property’dir.
DomainRole(UInt16) Bilgisayarın atanmış olduğu domain-workgroup içindeki rolünün tutulduğu property’dir.
EnableDaylightSavingsTime(Boolean) Gün Işığından Faydalanma özelliğinin makina tarafından tanınıp tanınmadığı bilgisinin tutulduğu property’dir.
FrontPanelResetStatus(UInt16) Makina üstündeki reset butonunun güvenlik özelliklerinin set edildiği property’dir.
InfraredSupported(Boolean) Makinada infrared port olup olmadığı bilgisinin tutulduğu property’dir.
InstallDate(DateTime) Bilgisayarın kurulumunun yapıldığı tarih bilgisinin tutulduğu property’dir.
KeyboardPasswordStatus(UInt16) Keyboard Password Status donanım güvenlik ayarlarının tutulduğu property’dir.
LastLoadInfo(String) İşletim sistemi son başlatıldığı zamanki load device veya boot service verilerine ait bilgileri tutar.
Manufacturer(String) Bilgisayar üreticisinin adının tutulduğu property’dir.
Model(String) Bilgisayarın model bilgisinin tutulduğu property’dir.
Name(String) Makina adının tutulduğu property’dir.
NetworkServerModeEnabled(Boolean) Network Server Mode’unun aktif olup olmadığı bilgisinin tutulduğu property’dir.
NumberOfProcessors(UInt32) Makinada mevcut olan işlemci sayısı bilgisinin tutulduğu property’dir.
OEMLogoBitmap(UInt8) OEM tarafından oluşturulan bitmap dosyanın verisini taşıyan array’dir.
OEMStringArray(String) OEM tarafından tanımlanmış olan bazı özelliklerin tutulduğu array’dir.
PartOfDomain(Boolean) Bilgisayarın bir domain’ine dahil olup olmadığı bilgisinin tutulduğu property’dir.
PauseAfterReset(SInt64) Bir reboot başlatılmadan önceki gecikme zamanı bilgisinin tutulduğu property’dir. Değeri -1 ise bekleme süresi bilinmiyor demektir.
PowerManagementCapabilities(UInt16)

Bilgisayarın ve işletim sisteminin güç yönetimi ile ilgili özelliklerinin tutulduğu property’dir. Aldığı değerlerin açıklamaları aşağıdaki gibidir:
0 – Bilinmiyor
1 – Desteklenmiyor.
2 – Etkin değil
3 – Güç yönetimi özellikleri etkinleştirilmiş fakat hangi özelliğin etkin olduğu veya özellik hakkındaki bilgi mevcut değil.
4 – Cihazın güç durumunu kullanıma göre değiştirebileceğini belirtir. (Power State Settable)
5 – SetPowerState metodunun desteklendiğini belirtir. (Power Cycling Supported)
6 – SetPowerState metodunun PowerState değişkeni 5 olarak set edilerek invoke edilebileceğini belirtir. (Timed Power On Supported)
7 – SetPowerState metodunun PowerState değişkeni 5 olarak set edilerek ve Time parametresinin de spesifik bir tarih ve zamana veya zaman aralığına set edilerek invoke edilebileceğini belirtir.

PowerManagementSupported(Boolean)

Cihazda güç yönetimi yapılıp yapılamayacağının tutulduğu boolean property’dir. Bu property güç yönetimi özelliklerinin etkinleştirimiş olup olmadığını belirtmez. Bu bilgi için PowerManagementCapabilities array’indeki öğelere bakılabilir.

PowerOnPasswordStatus(UInt16) Sistem bütününde bulunan Power-On Password ayarı durumunu belirtir.
PowerState(UInt16)

Bilgisayarın ve işletim sisteminin güç durumunu tanımlayan property’dir. Aldığı değerlerin açıklamaları aşağıdaki gibidir:
4 – (Unknown) Bilgisayarın power save modunda olduğu biliniyor fakat bu moddaki kesin durumu bilinmiyor.
2 – (Low Power Mode) Bilgisayar power state modunda fakat hala çalışıyor ve performans düşüşü gösterebilir.
3 – (Standby) Bilgisayar çalışmıyor fakat kısa sürede çalışır hale getirilebilir.
7 – (Warning) Bilgisayar uyarı modunda aynı zamanda power save modunda.

PowerSupplyState(UInt16) Sistem son boot edildiğindeki power supply durumunun belirtildiği propertydir.
PrimaryOwnerContact(String) Bilgisayarın sahibinin erişim bilgilerinin tutulduğu property’dir.
PrimaryOwnerName(String) Bilgisayar sahibinin adının tutulduğu property’dir.
ResetCapability(UInt16) Etkin ise (value=4) donanımsal olarak reset imkanı var demektir. (güç ve reset düğmeleri mevcuttur). Etkin değilse (value=3) reset düğmesi mevcut değildir. Property’nin alabileceği diğer değerler ise 5-Uygulanmamış, 1-Diğer, 2-Bilinmiyor
ResetCount(SInt16) Kullanıcının son reset attığından beri atılan otomatik reset sayısının tutulduğu property’dir. Değer -1 ise bilinmiyor demektir.
ResetLimit(SInt16) Birbirini takip eden kaç reset girişimi olabileceğinin tutulduğu property’dir. Değer -1 ise limit bilinmiyor demektir.
Roles(String) Çalışma ortamında sistemin sahip olduğu rollerin taşındığı property’dir. Örneğin bir network sisteminde property “Switch” veya “Bridge” değerlerini taşıyor olabilir.
Status(String)

Cihazın o anki durumunun tutulduğu property’dir. İşlevsel ve işlevsel olmayan birçok durum tanımlanabilir. İşlevsel disk durumları “OK” (Çalışıyor), “Degraded” (Bozulmuş) ve “Pred Fail”’dir. “Pred Fail” cihazın düzgün çalıştığını ancak yakın zamanda bir hata alınabilir olduğunu belirtir. İşlevsel olmayan durumlar ise “Error” (Hata), “Starting” (Başlatılıyor), “Stopping” (Durduruluyor) ve “Service”’dir. Disk service durumundaysa diskle ilgili yönetimsel bazı işlemler yapılıyor anlamına gelir.

SupportContactDescription(String) Destek için kontak bilgisinin tutulduğu property’dir.
SystemStartupDelay(UInt16) İşletim sisteminin başlamadan önceki gecikme zamanının tutulduğu property’dir.
SystemStartupOptions(String) Bilgisayarı başlatma seçeneklerinin tutulduğu property’dir.
SystemStartupSetting(UInt8) Varsayılan bilgisayarı başlatma profilinin tutulduğu property’dir.
SystemType(String) Bilgisayarda çalışan sistemin tipinin tutulduğu property’dir.
ThermalState(UInt16) Bilgisayarın en son açıldığı zamanki termik durumunun tutulduğu property’dir.
TotalPhysicalMemory(UInt64) Toplam fiziksel belleğin tutulduğu property’dir.
UserName(String) Oturum açmış mevcut kullanıcının kullanıcı adının tutulduğu property’dir.
WakeUpType(UInt16) Sistemin açılışına sebep olan event’in tutulduğu property’dir.
Workgroup(String) Workgroup’un adının tutulduğu property’dir.


II)Win32_DiskDrive


Bir Windows İşletim Sistemi çalışan bilgisayar’ın üzerinde bulunan ve işletim sistemi tarafından tanınan fiziksel diskler hakkındaki bilgileri barındırır.


 



Açıklamalar.

















































































































































Availability(UInt16) Diskin durumunun ve kullanılırlığının taşındığı property’dir. Örneğin bu property’nin değeri 3 ise cihaz çalışıyor demektir. 4 ise uyarı, 5 ise test, 10 ise bozulmuş, 13, 14, 15 ve 17 ise değişik şekillerde power save modunda demektir. Bu 3 moddan 13 (“Power Save – Unknown”) cihazın power save modunda olduğuna işaret eder ancak cihazın durumunun tam olarak bilinmediğini belirtir. 14 ise (“Power Save – Low Power Mode”) cihazın yine power save modunda olduğunu fakat düşük performansta da olsa çalıştığını belirtir. 15 (“Power Save – Standby”), cihazın çalışır durumda olmadığını fakat hızlıca çalışır duruma getirilebileceğini belirtir. Son olarak 17 (“Power Save – Warning”) ise cihazın pover save modunda olduğunu ve uyarı verdiğini belirtir.
BytesPerSector(UInt32) BytesPerSector property’si diskin her sektöründeki byte sayısını verir.
CapabilityDescriptions(String) Capabilities array’indeki her öğenin detaylı açıklamasının tutulduğu property’dir. Bu array’de tutulan her açıklama Capabilities array’indeki aynı index’te bulunan öğelerle ilişkilidir ve bu öğelerin açıklamasıdır.
Caption(String) Nesnenin kısa bir açıklamasının tutulduğu property’dir.
CompressionMethod(String) Cihazın sıkıştırma algoritmasını veya aracının set edildiği string tipinde property’dir. Cihaz ile sıkıştırma yapmak mümkün değilse veya bu property set edilmek istenmiyorsa (örneğin cihazın sıkıştırma destekleyip desteklemediği bilinmediği için) “Unknown”, cihazın sıkıştırma işlemini desteklediğini fakat sıkıştırma şeklinin bilinmediğini belirtmek için “Compressed” ve cihazın sıkıştırma işlemlerini desteklemediğini belirtmek için ise “Not Compressed” şeklinde bu property set edilebilir.
ConfigManagerErrorCode(UInt32)

Win 32 Configuration Manager hata kodunu verir. Aşağıda değerleri ve anlamları listelenmiştir:
0 – Cihaz düzgün çalışıyor.
1 – Cihaz düzgün bir şekilde ayarlanmamış.
2 – Windows bu cihaz için sürücüyü yükleyemiyor.
3 – Cihazın sürücüsü bozulmuş veya sistem bellek veya diğer kaynaklar açısından yetersiz durumda.
4 – Cihaz düzgün çalışmıyor. Sürücülerinden biri veya registry değerleri bozulmuş olabilir.
5 – Bu cihazın sürücüsü Windows’un yönetmediği veya kullanmadığı bir kaynağa ihtiyaç duyuyor.
6 – Cihazın boot ayarları diğer başka cihazlarla çakışıyor.
7 – Filtreleme yapılamıyor.
8 – Cihazın sürücü yükleyicisi bulunamıyor.
9 – Cihaz düzgün çalışmıyor çünkü cihazı kontrol eden firmware cihazın kaynaklarını hatalı belirliyor.
10 – Cihaz başlatılamıyor.
11 – Cihaz başarısız oldu.
12 – Cihazın kullanabileceği yeterli serbest kaynaklar bulunamıyor.
13 – Windows cihazın kaynaklarını doğrulayamıyor.
14 – Cihaz bilgisayar yeniden başlatılana kadar düzgün çalışmayacak.
15 – Cihaz olası bir re-enumeration problemi yüzünden düzgün çalışmıyor.
16 – Windows bu cihazın kullandığı bütün kaynakları doğrulayamıyor.
17 – Cihaz bilinmeyen bir kaynak türü istiyor.
18 – Cihazın sürücülerinin yeniden yüklenmesi gerekiyor.
19 – Registry değerleri bozulmuş olabilir.
20 – VXD Loader’ı kullanırken hata.
21 – Sistem Hatası: Cihazın sürücüsünü değiştirmeyi deneyin.
22 – Cihaz devre dışı bırakılmış.
23 – Sistem Hatası: Cihazın sürücüsünü değiştirmeyi deneyin. İşe yaramazsa cihazın dökümantasyonuna başvurun.
24 – Cihaz mevcut değil, düzgün çalışmıyor veya tüm sürücüleri yüklenmemiş.
25 – Windows hala cihazın kurulumunu yapıyor.
26 – Windows hala cihazın kurulumunu yapıyor.
27 – Cihaz geçerli bir log konfigürasyonuna sahip değil.
28 – Cihazın sürücüleri yüklü değil.
29 – Cihaz etkin değil çünkü cihazın firmware’i cihaza gerekli kaynakları sağlamadı.
30 – Cihaz başka bir cihazın kullandığı Interrupt Request (IRQ) kullanıyor.
31 – Cihaz düzgün çalışmıyor çünkü Windows cihaza gerekli sürücüleri yükleyemiyor.

ConfigManagerUserConfig(Boolean)

Cihazın kullanıcı tarafından belirlenmiş bir konfigürasyona sahip olup olmadığını belirtir.

DefaultBlockSize(UInt64) Bu birim için varsayılan blok boyutunu verir.
Description(String)

Nesnenin açıklamasının tutulduğu property’dir.

DeviceID(String)

Diskin sistemdeki diğer cihazlardan ayrıştırılmasını sağlayan sahip olduğu benzersiz string tipinde ID property’sidir.

ErrorCleared(Boolean)

LastErrorCode property’sinde belirtilmiş olan hatanın temizlenmiş olup olmadığının tutulduğu property’dir.

ErrorDescription(String)

LastErrorCode property’sinde belirtilmiş olan hata ve düzeltmek için yapılabilecekler hakkında daha fazla bilgi sağlayan string tipinde property’dir.

ErrorMethodology(String)

Cihaz tarafından desteklenen hata belirleme ve düzeltme tipleri hakkında açıklamaların tutulduğu property’dir.

Index(UInt32) Index property’si ilgili sürücünün fiziksel sürücü numarasını verir. Bu öğe Get Drive Map Info tarafından doldurulur.
InstallDate(DateTime)

InstallDate property’si cihazın kurulduğu tarihi tutar. Bu değerin olmaması cihazın kurulmadığı anlamına gelmez.

InterfaceType(String)

Diskin arabirim tipinin taşındığı property’dir. Örneğin SCSI

LastErrorCode(UInt32) Cihaz tarafından verilen en son hatanın tutulduğu property’dir.
Manufacturer(String) Diskin üreticisinin adının tutulduğu property’dir.
MaxBlockSize(UInt64) Bu cihaz için kullanılabilecek maksimum blok boyutu byte cinsinden verilir.
MaxMediaSize(UInt64)

Cihaz tarafından desteklenen kb cinsinden maksimum medya boyutunun tutulduğu property’dir. Kb 1 byte’ın 1000 ile çarpımından elde edilen sayıdır, 1024 ile çarpımından elde edilen sayı değildir.

MediaLoaded(Boolean) MediaLoaded özelliği disk sürücüsünde bir media olup olmadığını belirtir. Sabit diskler için bu değer herzaman true olmaktadır. Değer true ise disk sürücüsünde media yüklüdür.
MediaType(String)

Cihaz tarafından kullanılan veya erişilen medya tipidir. Örneğin removable media.

MinBlockSize(UInt64) Erişim sırasındaki minimum blok boyutunu byte olarak verir.
Model(String)

Disk sürücüsünün üretici tarafından belirlenmiş olan model numarasının tutulduğu property’dir.

Name(String)

Cihazın adının tutulduğu property’dir.

NeedsCleaning(Boolean)

Cihazın temizlenmeye ihtiyacı olup olmadığının tutulduğu property’dir. Manuel veya otomatik temizleme olup olmadığı Capabilities property’sinin array’inde belirtilir.

NumberOfMediaSupported(UInt32)

Cihaz birden çok medyayı barındırabilme özelliğine sahipse, maksimum desteklenen medya sayısının tutulduğu property’dir.

Partitions(UInt32)

Disk sürücüsünde işletim sistemi tarafından tanınmış olan bölümlendirme sayısının tutulduğu property’dir.

PNPDeviceID(String)

Cihazın Win32 Plug and Play cihaz Id’sinin tutulduğu property’dir.

PowerManagementCapabilities(UInt16)

Cihazın güç yönetimi ile ilgili özelliklerinin tutulduğu property’dir. Aldığı değerlerin açıklamaları aşağıdaki gibidir:
0 – Bilinmiyor
1 – Desteklenmiyor.
2 – Etkin değil
3 – Güç yönetimi özellikleri etkinleştirilmiş fakat hangi özelliğin etkin olduğu veya özellik hakkındaki bilgi mevcut değil.
4 – Cihazın güç durumunu kullanıma göre değiştirebileceğini belirtir. (Power State Settable)
5 – SetPowerState metodunun desteklendiğini belirtir. (Power Cycling Supported)
6 – SetPowerState metodunun PowerState değişkeni 5 olarak set edilerek invoke edilebileceğini belirtir. (Timed Power On Supported)
7 – SetPowerState metodunun PowerState değişkeni 5 olarak set edilerek ve Time parametresinin de spesifik bir tarih ve zamana veya zaman aralığına set edilerek invoke edilebileceğini belirtir.

PowerManagementSupported(Boolean)

Cihazda güç yönetimi yapılıp yapılamayacağının tutulduğu boolean property’dir. Bu property güç yönetimi özelliklerinin etkinleştirimiş olup olmadığını belirtmez. Bu bilgi için PowerManagementCapabilities array’indeki öğelere bakılabilir.

SCSIBus(UInt32)

Diskin SCSI bus numarasını verir.

SCSILogicalUnit(UInt16)

SCSILogicalUnit property’si diskin SCSI logical unit number (LUN) bilgisinin tutulduğu property’dir.

SCSIPort(UInt16)

Diskin SCSI port numarasının tutulduğu property’dir.

SCSITargetId(UInt16) Diskin SCSI ID numarasının tutulduğu property’dir
SectorsPerTrack(UInt32) Diskteki her track’teki sektör sayısının tutulduğu property’dir.
Signature(UInt32) Diski tanımlamak için kullanılan property’dir.
Size(UInt64) Diskin boyutunun tutulduğu property’dir.
Status(String)

Cihazın o anki durumunun tutulduğu property’dir. İşlevsel ve işlevsel olmayan birçok durum tanımlanabilir. İşlevsel disk durumları “OK” (Çalışıyor), “Degraded” (Bozulmuş) ve “Pred Fail”’dir. “Pred Fail” cihazın düzgün çalıştığını ancak yakın zamanda bir hata alınabilir olduğunu belirtir. İşlevsel olmayan durumlar ise “Error” (Hata), “Starting” (Başlatılıyor), “Stopping” (Durduruluyor) ve “Service”’dir. Disk service durumundaysa diskle ilgili yönetimsel bazı işlemler yapılıyor anlamına gelir.

StatusInfo(UInt16)

Mantıksal sürücünün (logical device) durumunun tutulduğu property’dir. 3 ise etkin, 4 ise etkin değil, 2 ise bilinmeyen, 1 ise diğer başka bir durumda demektir. Bu property mantıksal sürücüye uygulanmıyorsa 5 yani uygun değildir değeri kullanılmalıdır.

SystemCreationClassName(String) Gözlemlenen sistemin CreationClassName property’sidir.
SystemName(String) Gözlemlenen sistemin ismidir.
TotalCylinders(UInt64)

Diskin üstündeki toplam silindir sayısının tutulduğu property’dir. Bu değer BIOS 13h interrupt’ının fonksiyonları kullanılarak elde edilir. Bu değer, sürücü yüksek kapasite disk boyutunu desteklemek için translation scheme kullanıyorsa doğru çıkmayabilir. Kesin sürücü spesifikasyonları için üretici firmanın sağladığı bilgiler referans alınmalıdır.

TotalHeads(UInt32)

Bu property diskin üstündeki toplam head’lerin sayısının tutulduğu property’dir. Bu değer BIOS 13h interrupt’ının fonksiyonları kullanılarak elde edilir. Bu değer, sürücü yüksek kapasite disk boyutunu desteklemek için translation scheme kullanıyorsa doğru çıkmayabilir. Kesin sürücü spesifikasyonları için üretici firmanın sağladığı bilgiler referans alınmalıdır.

TotalSectors(UInt64) Fiziksel disk sürücüsündeki toplam sektör sayısının tutulduğu property’dir. Bu değer BIOS 13h interrupt’ının fonksiyonları kullanılarak elde edilir. Bu değer, sürücü yüksek kapasite disk boyutunu desteklemek için translation scheme kullanıyorsa doğru çıkmayabilir. Kesin sürücü spesifikasyonları için üretici firmanın sağladığı bilgiler referans alınmalıdır.
TotalTracks(UInt64) Fiziksel disk sürücüsündeki toplam track sayısının tutulduğu property’dir. Bu değer BIOS 13h interrupt’ının fonksiyonları kullanılarak elde edilir. Bu değer, sürücü yüksek kapasite disk boyutunu desteklemek için translation scheme kullanıyorsa doğru çıkmayabilir. Kesin sürücü spesifikasyonları için üretici firmanın sağladığı bilgiler referans alınmalıdır.
TracksPerCylinder(UInt32) Fiziksel disk üstünde bulunan her silindirdeki track sayısının tutulduğu property’dir. Bu değer BIOS 13h interrupt’ının fonksiyonları kullanılarak elde edilir. Bu değer, sürücü yüksek kapasite disk boyutunu desteklemek için translation scheme kullanıyorsa doğru çıkmayabilir. Kesin sürücü spesifikasyonları için üretici firmanın sağladığı bilgiler referans alınmalıdır.


III)Win32_LogicalDisk


Bir Windows İşletim Sistemi çalışan bilgisayar’ın üzerinde bulunan ve işletim sistemi tarafından tanınan mantıksal sürücüler hakkındaki bilgileri barındırır.



Açıklamalar.
















































































































Access(UInt16) Diskin erişim durumunun tutulduğu property’dir. 1 ise sadece okunabilir (readable), 2 ise yazılabilir (writeable), 3 ise hem okunabilir hem yazılabilir demektir. 0 ise bilinmiyor (Unknown), 4 ise sadece bir kerelik yazılabilir (Write Once) demektir.
Availability(UInt16) Diskin durumunun ve kullanılırlığının taşındığı property’dir. Örneğin bu property’nin değeri 3 ise cihaz çalışıyor demektir. 4 ise uyarı, 5 ise test, 10 ise bozulmuş, 13, 14, 15 ve 17 ise değişik şekillerde power save modunda demektir. Bu 3 moddan 13 (“Power Save – Unknown”) cihazın power save modunda olduğuna işaret eder ancak cihazın durumunun tam olarak bilinmediğini belirtir. 14 ise (“Power Save – Low Power Mode”) cihazın yine power save modunda olduğunu fakat düşük performansta da olsa çalıştığını belirtir. 15 (“Power Save – Standby”), cihazın çalışır durumda olmadığını fakat hızlıca çalışır duruma getirilebileceğini belirtir. Son olarak 17 (“Power Save – Warning”) ise cihazın pover save modunda olduğunu ve uyarı verdiğini belirtir.
Caption(String) Cihazın kısa metinsel bir açıklamasının tutulduğu property’dir.
ConfigManagerErrorCode(UInt32)

Win 32 Configuration Manager hata kodunu verir. Aşağıda değerleri ve anlamları listelenmiştir:
0 – Cihaz düzgün çalışıyor.
1 – Cihaz düzgün bir şekilde ayarlanmamış.
2 – Windows bu cihaz için sürücüyü yükleyemiyor.
3 – Cihazın sürücüsü bozulmuş veya sistem bellek veya diğer kaynaklar açısından yetersiz durumda.
4 – Cihaz düzgün çalışmıyor. Sürücülerinden biri veya registry değerleri bozulmuş olabilir.
5 – Bu cihazın sürücüsü Windows’un yönetmediği veya kullanmadığı bir kaynağa ihtiyaç duyuyor.
6 – Cihazın boot ayarları diğer başka cihazlarla çakışıyor.
7 – Filtreleme yapılamıyor.
8 – Cihazın sürücü yükleyicisi bulunamıyor.
9 – Cihaz düzgün çalışmıyor çünkü cihazı kontrol eden firmware cihazın kaynaklarını hatalı belirliyor.
10 – Cihaz başlatılamıyor.
11 – Cihaz başarısız oldu.
12 – Cihazın kullanabileceği yeterli serbest kaynaklar bulunamıyor.
13 – Windows cihazın kaynaklarını doğrulayamıyor.
14 – Cihaz bilgisayar yeniden başlatılana kadar düzgün çalışmayacak.
15 – Cihaz olası bir re-enumeration problemi yüzünden düzgün çalışmıyor.
16 – Windows bu cihazın kullandığı bütün kaynakları doğrulayamıyor.
17 – Cihaz bilinmeyen bir kaynak türü istiyor.
18 – Cihazın sürücülerinin yeniden yüklenmesi gerekiyor.
19 – Registry değerleri bozulmuş olabilir.
20 – VXD Loader’ı kullanırken hata.
21 – Sistem Hatası: Cihazın sürücüsünü değiştirmeyi deneyin.
22 – Cihaz devre dışı bırakılmış.
23 – Sistem Hatası: Cihazın sürücüsünü değiştirmeyi deneyin. İşe yaramazsa cihazın dökümantasyonuna başvurun.
24 – Cihaz mevcut değil, düzgün çalışmıyor veya tüm sürücüleri yüklenmemiş.
25 – Windows hala cihazın kurulumunu yapıyor.
26 – Windows hala cihazın kurulumunu yapıyor.
27 – Cihaz geçerli bir log konfigürasyonuna sahip değil.
28 – Cihazın sürücüleri yüklü değil.
29 – Cihaz etkin değil çünkü cihazın firmware’i cihaza gerekli kaynakları sağlamadı.
30 – Cihaz başka bir cihazın kullandığı Interrupt Request (IRQ) kullanıyor.
31 – Cihaz düzgün çalışmıyor çünkü Windows cihaza gerekli sürücüleri yükleyemiyor.

ConfigManagerUserConfig(Boolean)

Cihazın kullanıcı tarafından belirlenmiş bir konfigürasyona sahip olup olmadığını belirtir.

Description(String)

Nesnenin açıklamasının tutulduğu property’dir.

DeviceID(String)

Diskin sistemdeki diğer cihazlardan ayrıştırılmasını sağlayan sahip olduğu benzersiz string tipinde ID property’sidir.

DriveType(UInt32) Diskin tipinin tutulduğu property’dir. Örneğin CD-ROM sürücüsünün değeri 5′tir.
ErrorCleared(Boolean)

LastErrorCode property’sinde belirtilmiş olan hatanın temizlenmiş olup olmadığının tutulduğu property’dir.

ErrorDescription(String)

LastErrorCode property’sinde belirtilmiş olan hata ve düzeltmek için yapılabilecekler hakkında daha fazla bilgi sağlayan string tipinde property’dir.

ErrorMethodology(String)

Cihaz tarafından desteklenen hata belirleme ve düzeltme tipleri hakkında açıklamaların tutulduğu property’dir.

FileSystem(String) Diskin dosya sistemi bilgisinin tutulduğu property’dir. Örneğin NTFS
FreeSpace(UInt64) Disk üzerinde ne kadar boş yer kaldığı bilgisinin tutulduğu property’dir.
InstallDate(DateTime)

InstallDate property’si cihazın kurulduğu tarihi tutar. Bu değerin olmaması cihazın kurulmadığı anlamına gelmez.

LastErrorCode(UInt32)

Cihaz tarafından verilen en son hatanın tutulduğu property’dir.

MaximumComponentLength(UInt32) MaximumComponentLength property’si Win32 sürücüsü tarafından desteklenen bir dosyaya en fazla ne uzunlukta isim verilebileceğinin bilgisini tutar.
MediaType(UInt32)

Mantıksal sürücüdeki medya tipinin belirtildiği property’dir. Bu değer winioctl.h’de tanımlanmış olan MEDIA_TYPE enumaration’ının değerlerinden birisi olacaktır. Not: Bu değer çıkarılabilir sürücüde disk olmadığı zaman çıkarılabilir sürücüler için kesin olmayabilir.

Name(String)

Cihazın adının tutulduğu property’dir.

PNPDeviceID(String)

Cihazın Win32 Plug and Play cihaz Id’sinin tutulduğu property’dir.

PowerManagementCapabilities(UInt16)

Cihazın güç yönetimi ile ilgili özelliklerinin tutulduğu property’dir. Aldığı değerlerin açıklamaları aşağıdaki gibidir:
0 – Bilinmiyor
1 – Desteklenmiyor.
2 – Etkin değil
3 – Güç yönetimi özellikleri etkinleştirilmiş fakat hangi özelliğin etkin olduğu veya özellik hakkındaki bilgi mevcut değil.
4 – Cihazın güç durumunu kullanıma göre değiştirebileceğini belirtir. (Power State Settable)
5 – SetPowerState metodunun desteklendiğini belirtir. (Power Cycling Supported)
6 – SetPowerState metodunun PowerState değişkeni 5 olarak set edilerek invoke edilebileceğini belirtir. (Timed Power On Supported)
7 – SetPowerState metodunun PowerState değişkeni 5 olarak set edilerek ve Time parametresinin de spesifik bir tarih ve zamana veya zaman aralığına set edilerek invoke edilebileceğini belirtir.

PowerManagementSupported(Boolean)

Cihazda güç yönetimi yapılıp yapılamayacağının tutulduğu boolean property’dir. Bu property güç yönetimi özelliklerinin etkinleştirimiş olup olmadığını belirtmez. Bu bilgi için PowerManagementCapabilities array’indeki öğelere bakılabilir.

ProviderName(String) Mantıksal sürücüye atanmış olan network yolunun tutulduğu property’dir.
Purpose(String) Medyayı ve/veya kullanımını açıklayan string tipinde property’dir.
QuotasDisabled(Boolean) Kota yönetiminin cihazda aktif olup olmadığının tutulduğu property’dir.
QuotasIncomplete(Boolean)

QuotasIncomplete property’si kota yönetiminin kullanıldığını fakat etkinliğinin kaldırılıp kaldırılmadığı bilgisini tutar.

QuotasRebuilding(Boolean)

Bu property dosya sisteminin bilgileri derleme ve diski kota yönetimi için ayarlama aşamasında olup olmadığı bilgisini tutar.

Size(UInt64) Mantıksal sürücünün byte cinsinden boyutunun tutulduğu property’dir.
Status(String)

Cihazın o anki durumunun tutulduğu property’dir. İşlevsel ve işlevsel olmayan birçok durum tanımlanabilir. İşlevsel disk durumları “OK” (Çalışıyor), “Degraded” (Bozulmuş) ve “Pred Fail”’dir. “Pred Fail” cihazın düzgün çalıştığını ancak yakın zamanda bir hata alınabilir olduğunu belirtir. İşlevsel olmayan durumlar ise “Error” (Hata), “Starting” (Başlatılıyor), “Stopping” (Durduruluyor) ve “Service”’dir. Disk service durumundaysa diskle ilgili yönetimsel bazı işlemler yapılıyor anlamına gelir.

StatusInfo(UInt16)

Mantıksal sürücünün (logical device) durumunun tutulduğu property’dir. 3 ise etkin, 4 ise etkin değil, 2 ise bilinmeyen, 1 ise diğer başka bir durumda demektir. Bu property mantıksal sürücüye uygulanmıyorsa 5 yani uygun değildir değeri kullanılmalıdır.

SupportsDiskQuotas(Boolean) Diskin kota belirlemeyi destekleyip desteklemediğinin tutulduğu property’dir.
SupportsFileBasedCompression(Boolean) Mantıksal disk bölümünün dosya bazlı sıkıştırmayı destekleyip desteklemediği bilgisinin tutulduğu property’dir.
SystemCreationClassName(String)

Gözlemlenen sistemin CreationClassName property’sidir.

SystemName(String)

Gözlemlenen sistemin ismidir.

VolumeDirty(Boolean) VolumeDirty property’si diskin bir dahaki boot’ta chkdsk yapılması gerektirip gerektirmediği bilgisini tutar. Bu property map edilmiş mantıksal sürücülerde kullanılmaz. Sadece makinada bulunan fiziksel diskler için geçerlidir.
VolumeName(String) Mantıksal sürücünün volume isminin tutulduğu property’dir. Maksimum 32 karakter alır.
VolumeSerialNumber(String) Diskin volume seri numarasının tutulduğu property’dir. Maksimum 11 karakter alır.


IV)Win32_OperatingSystem


Bir Windows İşletim Sistemi çalışan bilgisayar’ın üzerinde bulunan ve işletim sistemi hakkındaki bilgileri barındırır.



Açıklamalar.


















































































































































































BootDevice(String) BootDevice property‘si Win32 işletim sisteminin başladığı disk sürücüsünün adını taşır. Örneğin: \\Device\Harddisk0.
BuildNumber(String) İşletim sisteminin build numarasını taşıyan property’dir. Release versiyon numarasından daha kesin versiyon bilgisi için kullanılabilir.
BuildType(String) İşletim sistemi için kullanılan build tipinin taşındığı property’dir.
Caption(String) İşletim sisteminin açıklamasının taşındığı property’dir.
CodeSet(String)

CodeSet property’si işletim sistemi tarafından kullanılan code page değeridir. Bir code page işletim sisteminin string’leri farklı dillere çevirebilmesi için gerekli olan karakter tablosunu içerir. American National Standards Institute (ANSI) tanımlanmış olan code page’leri temsil eden değerleri listeler. Eğer işletim sistemi bir ANSI code page’i kullanmıyorsa bu property 0’a set edilir. CodeSet property’si code page değerini tanımlamak için 6 karaktere kadar değer alabilir. Örneğin 1254.

CountryCode(String)

CountryCode property’si işletim sistemi tarafından kullanılan ülke/bölge kodunu belirtir. Değeri uluslararası telefon kodlarına göre belirlenir. CountryCode property’si en fazla 6 karakter uzunluğunda olabilir. Örneğin Türkiye için 90.

CSCreationClassName(String) Gözlemlenen bilgisayar sisteminin CreationClassName property’sidir.
CSDVersion(String)

Bilgisayarda kurulu olan en son service pack’in taşındığı property’dir. Eğer hiçbir service pack kurulu değilse değeri null’dır.

CSName(String) Bilgisayar adının taşındığı property’dir.
CurrentTimeZone(SInt16) Dakika cinsinden işletim sisteminin Greenwich saati ile dakika cinsinden karşılaştırıldığı property’dir. Değer pozitif, negatif sayı veya sıfır olabilir.
DataExecutionPrevention_ 32BitApplications(Boolean) True ise 32-bit uygulamaların Data Execution Prevention (DEP) ile çalıştığı anlamına gelir.
DataExecutionPrevention_Available(Boolean)

Donanımın Windows Data Execution Prevention (DEP) destekleyip desteklemediğinin tutulduğu property’dir.

DataExecutionPrevention_Drivers(Boolean) True ise sürücülerin Data Execution Prevention (DEP) ile çalıştığı anlamına gelir.
DataExecutionPrevention_ SupportPolicy(UInt8)

DataExecutionPrevention_


SupportPolicy property’si hangi Data Execution Prevention (DEP) ayarlarının yapıldığı bilgisini taşır.

Debug(Boolean) Debug property’si işletim sisteminin checked (debug) build olup olmadığı bilgisini taşır.
Description(String) Windows işletim sisteminin açıklamasının tutulduğu property’dir.
Distributed(Boolean) İşletim sisteminin birçok bilgisayar sistem node’unda dağıtılmış olup olmadığının tutulduğu property’dir.
EncryptionLevel(UInt32) Güvenli transaction’lar için n-bit şifreleme seviyesinin tutulduğu property’dir.
FreePhysicalMemory(UInt64) Kullanılmayan ve müsait olan fiziksel belleğin kb cinsinden değeri.
FreeVirtualMemory(UInt64) Kullanılmayan ve müsait olan sanal bellek miktarını taşıyan property’dir.
InstallDate(DateTime) İşletim sisteminin kurulduğu tarihi taşıyan datetime tipinde veridir.
LargeSystemCache(UInt32) LargeSystemCache property’si belleğin uygulamalar için (value=0) veya sistem performansı için (value=1) optimize edileceğinin tutulduğu property’dir.
LastBootUpTime(DateTime) İşletim sisteminin en son başlatıldığı tarihtir.
LocalDateTime(DateTime) İşletim sisteminin lokal tarih ve saatinin tutulduğu property’dir.
Locale(String) Locale property’si işletim sistemi tarafından kullanılan dil kimliğidir. Dil kimliği (language identifier) bir ülke veya bölge için standart bir nümerik kısaltmadır ve her dil benzersiz bir language identifier’a sahiptir.
Manufacturer(String) İşletim sisteminin üreticisinin adının tutulduğu property’dir. Win32 sistemleri için Microsoft Corporation’dır.
MaxNumberOfProcesses(UInt32) İşletim sisteminin desteklediği maksimum process sayısıdır. Herhangi bir maksimum değer yoksa değeri 0′dır. Bilinmiyorsa -1′dir.
MaxProcessMemorySize(UInt64) Bir process’e ayrılabilecek maksimum kb cinsinden belleğin taşındığı property’dir.
Name(String) İşletim sisteminin adının taşındığı property’dir.
NumberOfLicensedUsers(UInt32) İşletim sisteminin kullanıcı lisans sayısıdır. Sınırsızsa 0, bilinmiyorsa -1′dir.
NumberOfProcesses(UInt32) İşletim sisteminde o an yüklenmiş olan veya çalışan process’lerin sayısıdır.
NumberOfUsers(UInt32) İşletim sisteminde o an mevcut olan user session’larının sayılarının tutulduğu property’dir.
Organization(String) İşletim sisteminin kayıtlı kullanıcısının firma bilgisinin tutulduğu property’dir.
OSLanguage(UInt32) Kurulu olan işletim sisteminin dilinin tutulduğu property’dir. Örneğin 1033 – İngilizce
OSProductSuite(UInt32) İşletim sisteminde kurulu ve lisanslı olan eklentilerin sayısının tutulduğu property’dir.
OSType(UInt16) İşletim sisteminin tipinin tutulduğu property’dir.
OtherTypeDescription(String) OSType property’si 1 olarak yani diğer olarak set edilmişse, işletim sisteminin üreticisi ve tipi bilgilerinin tutulduğu property’dir.
PAEEnabled(Boolean)
PlusProductID(String) Kurulu ise Windows Plus! programının identification numarasının tutulduğu property’dir.
PlusVersionNumber(String) Kurulu ise Windows Plus! programının versiyon numarasının tutulduğu property’dir.
Primary(Boolean) İşletim sisteminin birincil işletim sistemi olup olmadığı bilgisinin taşındığı property’dir.
ProductType(UInt32) System hakkında ek bilginin taşındığı property’dir. Değeri 1 ise work station, 2 ise domain controller, 3 ise server’dır.
QuantumType(UInt8) QuantumType property’si quantum’ların fixed veya değişken uzunlukta olup olmadığı bilgisinin taşındığı property’dir. 0 ise bilinmiyor, 1 ise fixed, 2 ise değişken demektir.
RegisteredUser(String) İşletim sisteminin kayıtlı kullanıcısının adının tutulduğu property’dir.
SerialNumber(String) İşletim sisteminin seri numarasının tutulduğu property’dir.
ServicePackMajorVersion(UInt16) Kurulu olan service pack’in major versiyon numarasının tutulduğu property’dir. Eğer SP kurulu değilse değeri 0′dır.
ServicePackMinorVersion(UInt16) Kurulu olan service pack’in minor versiyon numarasının tutulduğu property’dir. Eğer SP kurulu değilse değeri 0′dır.
SizeStoredInPagingFiles(UInt64) Page file’da tutulabilecek toplam kb cinsinden verinin büyüklüğünün tutulduğu property’dir. Değer 0 ise page file yok demektir.
Status(String) İşletim sisteminin o anki durumunun tutulduğu property’dir. İşlevsel ve işlevsel olmayan birçok durum tanımlanabilir. İşlevsel disk durumları “OK” (Çalışıyor), “Degraded” (Bozulmuş) ve “Pred Fail”’dir. “Pred Fail” cihazın düzgün çalıştığını ancak yakın zamanda bir hata alınabilir olduğunu belirtir. İşlevsel olmayan durumlar ise “Error” (Hata), “Starting” (Başlatılıyor), “Stopping” (Durduruluyor) ve “Service”’dir. Disk service durumundaysa sistemle ilgili yönetimsel bazı işlemler yapılıyor anlamına gelir.
SuiteMask(UInt32) Sistemde mevcut olan ürünlerin kodlarının tutulduğu property’dir. SuiteMask property’si şu değerlerin kombinasyonu olabilir:
0 – Windows Server 2003, Small Business Edition
1 – Windows Server 2003, Enterprise Edition
2 – Windows Server 2003, Backoffice Edition
3 – Windows Server 2003, Communications Edition
4 – Microsoft Terminal Services
5 – Windows Server 2003, Small Business Edition Restricted
6 – Windows XP Embedded
7 – Windows Server 2003, Datacenter Edition
8 – Single User
9 – Windows XP Home Edition
10 – Windows Server 2003, Web Edition
SystemDevice(String) İşletim sisteminin kurulu olduğu fiziksel disk bölümünün taşındığı property’dir.
SystemDirectory(String) İşletim sisteminin sistem dizininin tutulduğu property’dir. Örneğin C:\WINDOWS\SYSTEM32
SystemDrive(String) İşletim sisteminin yeraldığı disk sürücüsünün harfinin tutulduğu property’dir. Örneğin C:
TotalSwapSpaceSize(UInt64) Kb cinsinden toplam swap alanıdır.
TotalVirtualMemorySize(UInt64) Sanal bellekteki kb miktarı.
TotalVisibleMemorySize(UInt64) İşletim sistemi tarafından kullanılabilir olan kb cinsinden toplam fiziksel bellek miktarıdır.
Version(String) İşletim sisteminin versiyon numarasının tutulduğu property’dir.
WindowsDirectory(String) İşletim sisteminin Windows dizininin tutulduğu property’dir.


V)Win32_Process


İşletim sistemi üzerinde çalışan process’ler hakkında bilgileri barındırır.



Açıklamalar.


































































































































Caption(String) Process‘in kısa açıklamasının tutulduğu property’dir.
CommandLine(String) Process’i başlatmak için kullanılan command line’ın tutulduğu property’dir.
CreationDate(DateTime) Process’in çalışmaya başladığı zaman.
CSCreationClassName(String)

Gözlemlenen sisteminin CreationClassName property’sidir.

CSName(String) Gözlemlenen sistemin adı.
Description(String) Process hakkında açıklamanın tutulduğu property’dir.
ExecutablePath(String) Process’in .exe dosyasının yolunun tutulduğu property’dir.
ExecutionState(UInt16) Process’in mevcut çalışma durumunun tutulduğu property’dir. Aldığı değerler ve açıklamaları şöyledir:
2- Hazır, 3- Çalışıyor, 4- Bloklanmış
Handle(String) Process’i tanımlamak için kullanılan string tipinde değişken.
HandleCount(UInt32) Process tarafından toplam açılmış mevcut handle sayısının tutulduğu property’dir. Bu sayı process içindeki her açık thread’in toplamıdır.
InstallDate(DateTime) Process’in kurulduğu tarih.
KernelModeTime(UInt64) 100 nanosaniye cinsinden kernel mod’da zaman.
MaximumWorkingSetSize(UInt32) Process’in RAM’de kullanabileceği maksimum bellek miktarının tutulduğu property’dir.
MinimumWorkingSetSize(UInt32) Process’in RAM’de kullanabileceği minimum bellek miktarının tutulduğu property’dir.
Name(String) Process’in adının tutulduğu property’dir.
OSCreationClassName(String) Gözlemlenen işletim sisteminin creation class adıdır.
OSName(String) Gözlemlenen işletim sisteminin adıdır.
OtherOperationCount(UInt64) Read ve write’lar dışında yapılan I/O işlemlerinin sayısının tutulduğu property’dir.
OtherTransferCount(UInt64) Read ve write işlemleri dışında transfer edilen toplam data miktarının tutulduğu property’dir.
PageFaults(UInt32) Process tarafından oluşturulmuş olan page fault’larının sayısının tutulduğu property’dir.
PageFileUsage(UInt32) Process tarafından kullanılan page file miktarının tutulduğu property’dir.
ParentProcessId(UInt32) Process’i yaratan diğer process’in Id’sinin tutulduğu property’dir.
PeakPageFileUsage(UInt32) Process’in ömrü boyunca kullanılmış olan en fazla page file miktarıdır.
PeakWorkingSetSize(UInt32) Process’in en yüksek working set size’ının tutulduğu property’dir.
Priority(UInt32) Process’in işletim sistemi içindeki önem derecesinin tutulduğu property’dir. 0 (en düşük) ile 31 (en yüksek) arasında değer alır.
PrivatePageCount(UInt64) Sadece ilgili process tarafından ulaşılabilen page’lerin toplam sayısının tutulduğu property’dir.
ProcessId(UInt32) İlgili process’i tanımlamak için kullanılan property’dir. Değer process başladıktan sona erene kadar geçerlidir.
QuotaNonPagedPoolUsage(UInt32) Process’in paged olmayan pool kullanım miktarı kotasının tutulduğu property’dir.
QuotaPagedPoolUsage(UInt32) Process’in paged olan pool kullanım miktarı kotasının tutulduğu property’dir.
QuotaPeakNonPagedPoolUsage(UInt32) Process’in paged olmayan en yüksek pool kullanım miktarı kotasının tutulduğu property’dir.
QuotaPeakPagedPoolUsage(UInt32) Process’in paged olan en yüksek pool kullanım miktarı kotasının tutulduğu property’dir.
ReadOperationCount(UInt64) Kaç adet read işleminin gerçekleştiğini tutan property’dir.
ReadTransferCount(UInt64) Okunan verinin miktarının tutulduğu property’dir.
SessionId(UInt32) İşletim tarafı tarafından oluşturulan session’ın Id’sinin tutulduğu property’dir.
Status(String)

Process’in o anki durumunun tutulduğu property’dir. İşlevsel ve işlevsel olmayan birçok durum tanımlanabilir. İşlevsel durumlar “OK” (Çalışıyor), “Degraded” (Bozulmuş) ve “Pred Fail”’dir. “Pred Fail” cihazın düzgün çalıştığını ancak yakın zamanda bir hata alınabilir olduğunu belirtir. İşlevsel olmayan durumlar ise “Error” (Hata), “Starting” (Başlatılıyor), “Stopping” (Durduruluyor) ve “Service”’dir. Disk service durumundaysa sistemle ilgili yönetimsel bazı işlemler yapılıyor anlamına gelir.

TerminationDate(DateTime) Process’in durduğu veya sona erdiği zamanın tutulduğu property’dir.
ThreadCount(UInt32) Process içindeki aktif thread sayısının tutulduğu property’dir.
VirtualSize(UInt64) Process’in kullandığı sanal adres alanının tutulduğu property’dir.
WindowsVersion(String) Process’in çalıştığı Windows versiyonunun tutulduğu property’dir.
WorkingSetSize(UInt64) Process’in verimli bir şekilde çalışabilmesi için gerekli olan bellek miktarıdır.
WriteOperationCount(UInt64) Gerçekleşmiş olan write işlemlerinin sayısının tutulduğu property’dir.
WriteTransferCount(UInt64) Yazılmış olan data miktarının tutulduğu property’dir.


VI)Win32_Processor


Çalışmakta olan bilgisayarda bulunan işlemci bilgilerini barındırır. Birden fazla işlemci olması durumunda her işlemci için bir class ile bu bilgiler tutulur.


 



Açıklamalar.


































































































































AddressWidth(UInt16) Bit olarak işlemci adres genişliğinin tutulduğu property’dir.
Architecture(UInt16) İlgili platform tarafından kullanılan işlemci mimarisinin tutulduğu property’dir. Şu değerlerden birisini alır: 0 – x86 1 – MIPS 2 – Alpha 3 – PowerPC 6 – ia64 9 – x64
Availability(UInt16)

İşlemcinin durumunun ve kullanılırlığının taşındığı property’dir. Örneğin bu property’nin değeri 3 ise cihaz çalışıyor demektir. 4 ise uyarı, 5 ise test, 10 ise bozulmuş, 13, 14, 15 ve 17 ise değişik şekillerde power save modunda demektir. Bu 3 moddan 13 (“Power Save – Unknown”) cihazın power save modunda olduğuna işaret eder ancak cihazın durumunun tam olarak bilinmediğini belirtir. 14 ise (“Power Save – Low Power Mode”) cihazın yine power save modunda olduğunu fakat düşük performansta da olsa çalıştığını belirtir. 15 (“Power Save – Standby”), cihazın çalışır durumda olmadığını fakat hızlıca çalışır duruma getirilebileceğini belirtir. Son olarak 17 (“Power Save – Warning”) ise cihazın pover save modunda olduğunu ve uyarı verdiğini belirtir.

Caption(String) İşlemci hakkında kısa açıklamanın tutulduğu property’dir.
ConfigManagerErrorCode(UInt32)

Win 32 Configuration Manager hata kodunu verir. Aşağıda değerleri ve anlamları listelenmiştir:
0 – Cihaz düzgün çalışıyor.
1 – Cihaz düzgün bir şekilde ayarlanmamış.
2 – Windows bu cihaz için sürücüyü yükleyemiyor.
3 – Cihazın sürücüsü bozulmuş veya sistem bellek veya diğer kaynaklar açısından yetersiz durumda.
4 – Cihaz düzgün çalışmıyor. Sürücülerinden biri veya registry değerleri bozulmuş olabilir.
5 – Bu cihazın sürücüsü Windows’un yönetmediği veya kullanmadığı bir kaynağa ihtiyaç duyuyor.
6 – Cihazın boot ayarları diğer başka cihazlarla çakışıyor.
7 – Filtreleme yapılamıyor.
8 – Cihazın sürücü yükleyicisi bulunamıyor.
9 – Cihaz düzgün çalışmıyor çünkü cihazı kontrol eden firmware cihazın kaynaklarını hatalı belirliyor.
10 – Cihaz başlatılamıyor.
11 – Cihaz başarısız oldu.
12 – Cihazın kullanabileceği yeterli serbest kaynaklar bulunamıyor.
13 – Windows cihazın kaynaklarını doğrulayamıyor.
14 – Cihaz bilgisayar yeniden başlatılana kadar düzgün çalışmayacak.
15 – Cihaz olası bir re-enumeration problemi yüzünden düzgün çalışmıyor.
16 – Windows bu cihazın kullandığı bütün kaynakları doğrulayamıyor.
17 – Cihaz bilinmeyen bir kaynak türü istiyor.
18 – Cihazın sürücülerinin yeniden yüklenmesi gerekiyor.
19 – Registry değerleri bozulmuş olabilir.
20 – VXD Loader’ı kullanırken hata.
21 – Sistem Hatası: Cihazın sürücüsünü değiştirmeyi deneyin.
22 – Cihaz devre dışı bırakılmış.
23 – Sistem Hatası: Cihazın sürücüsünü değiştirmeyi deneyin. İşe yaramazsa cihazın dökümantasyonuna başvurun.
24 – Cihaz mevcut değil, düzgün çalışmıyor veya tüm sürücüleri yüklenmemiş.
25 – Windows hala cihazın kurulumunu yapıyor.
26 – Windows hala cihazın kurulumunu yapıyor.
27 – Cihaz geçerli bir log konfigürasyonuna sahip değil.
28 – Cihazın sürücüleri yüklü değil.
29 – Cihaz etkin değil çünkü cihazın firmware’i cihaza gerekli kaynakları sağlamadı.
30 – Cihaz başka bir cihazın kullandığı Interrupt Request (IRQ) kullanıyor.
31 – Cihaz düzgün çalışmıyor çünkü Windows cihaza gerekli sürücüleri yükleyemiyor.

ConfigManagerUserConfig(Boolean)

Cihazın kullanıcı tarafından belirlenmiş bir konfigürasyona sahip olup olmadığını belirtir.

CpuStatus(UInt16) İşlemcinin mevcut durumunun tutulduğu property’dir.
CurrentClockSpeed(UInt32) İşlemcinin mevcut hızının (MHz cinsinden) tutulduğu property’dir.
CurrentVoltage(UInt16) İşlemcinin voltaj özelliğinin tutulduğu property’dir.
DataWidth(UInt16) Bit cinsinden işlemci veri genişliği.
Description(String) İşlemcinin açıklamasının tutulduğu property.
DeviceID(String)

İşlemcinin sistemdeki diğer cihazlardan ayrıştırılmasını sağlayan sahip olduğu benzersiz string tipinde ID property’sidir.

ErrorCleared(Boolean)

LastErrorCode property’sinde belirtilmiş olan hatanın temizlenmiş olup olmadığının tutulduğu property’dir.

ErrorDescription(String)

LastErrorCode property’sinde belirtilmiş olan hata ve düzeltmek için yapılabilecekler hakkında daha fazla bilgi sağlayan string tipinde property’dir.

ExtClock(UInt32) External clock frekansının tutulduğu property’dir. Frekans bilinmiyorsa değeri null’dır.
Family(UInt16) İşlemci ailesi tipi. Örneğin değeri 14 ise Pentium(R) MMX (TM) işlemci
InstallDate(DateTime)

InstallDate property’si cihazın kurulduğu tarihi tutar. Bu değerin olmaması cihazın kurulmadığı anlamına gelmez.

L2CacheSize(UInt32) İşlemcinin Level 2 cache boyutunun tutulduğu property’dir.
L2CacheSpeed(UInt32) İşlemcinin Level 2 cache’inin clockspeed’inin tutulduğu property’dir.
LastErrorCode(UInt32)

Cihaz tarafından verilen en son hatanın tutulduğu property’dir.

Level(UInt16) İşlemci tipinin tutulduğu property’dir. Aldığı değer işlemcinin mimarisine göre değişir.
LoadPercentage(UInt16) Her işlemcinin son bir saniye içindeki ortalama load capacity’sinin tutulduğu property’dir.
Manufacturer(String) İşlemcinin üreticisinin adının tutulduğu property’dir.
MaxClockSpeed(UInt32) İşlemcinin maximum hızının (MHz) tutulduğu property’dir.
Name(String) İşlemcinin adının tutulduğu property’dir.
OtherFamilyDescription(String) Family property’sinin değeri 1 olduğunda (“Other”) kullanılan işlemci aile tipinin tutulduğu property’dir.
PNPDeviceID(String)

Cihazın Win32 Plug and Play cihaz Id’sinin tutulduğu property’dir.

PowerManagementCapabilities(UInt16)

İşlemcinin güç yönetimi ile ilgili özelliklerinin tutulduğu property’dir. Aldığı değerlerin açıklamaları aşağıdaki gibidir:
0 – Bilinmiyor
1 – Desteklenmiyor.
2 – Etkin değil
3 – Güç yönetimi özellikleri etkinleştirilmiş fakat hangi özelliğin etkin olduğu veya özellik hakkındaki bilgi mevcut değil.
4 – Cihazın güç durumunu kullanıma göre değiştirebileceğini belirtir. (Power State Settable)
5 – SetPowerState metodunun desteklendiğini belirtir. (Power Cycling Supported)
6 – SetPowerState metodunun PowerState değişkeni 5 olarak set edilerek invoke edilebileceğini belirtir. (Timed Power On Supported)
7 – SetPowerState metodunun PowerState değişkeni 5 olarak set edilerek ve Time parametresinin de spesifik bir tarih ve zamana veya zaman aralığına set edilerek invoke edilebileceğini belirtir.

PowerManagementSupported(Boolean)

İşlemcide güç yönetimi yapılıp yapılamayacağının tutulduğu boolean property’dir. Bu property güç yönetimi özelliklerinin etkinleştirimiş olup olmadığını belirtmez. Bu bilgi için PowerManagementCapabilities array’indeki öğelere bakılabilir.

ProcessorId(String) İşlemcinin özelliklerinin tanımlandığı işlemci bazlı bilginin tutulduğu property’dir.
ProcessorType(UInt16) İşlemcinin birincil fonksiyonunun tutulduğu property’dir.
Role(String) İşlemcinin rolünün belirlendiği string tipinde property’dir.
SocketDesignation(String) Devrelerde kullanılan chip socket’in tipinin tutulduğu property’dir.
Status(String)

İşlemcinin o anki durumunun tutulduğu property’dir. İşlevsel ve işlevsel olmayan birçok durum tanımlanabilir. İşlevsel disk durumları “OK” (Çalışıyor), “Degraded” (Bozulmuş) ve “Pred Fail”’dir. “Pred Fail” cihazın düzgün çalıştığını ancak yakın zamanda bir hata alınabilir olduğunu belirtir. İşlevsel olmayan durumlar ise “Error” (Hata), “Starting” (Başlatılıyor), “Stopping” (Durduruluyor) ve “Service”’dir. Service durumundaysa yönetimsel bazı işlemler yapılıyor anlamına gelir.

StatusInfo(UInt16)

Mantıksal sürücünün (logical device) durumunun tutulduğu property’dir. 3 ise etkin, 4 ise etkin değil, 2 ise bilinmeyen, 1 ise diğer başka bir durumda demektir. Bu property mantıksal sürücüye uygulanmıyorsa 5 yani uygun değildir değeri kullanılmalıdır.

Stepping(String) İşlemci ailesi içinde işlemcinin revision level’ının tutulduğu string tipinde property’dir.
SystemCreationClassName(String)

Gözlemlenen sistemin CreationClassName property’sidir.

SystemName(String)

Gözlemlenen sistemin ismidir.

UniqueId(String) İşlemci ailesi içinde ilgili işlemciye ait olan benzersiz Id numarasının tutulduğu property’dir.
UpgradeMethod(UInt16) Upgrade destekleniyorsa işlemcinin nasıl upgrade edilebileceğine dair CPU socket bilgisinin tutulduğu property’dir.
Version(String) İşlemci revizyon numarasının tutulduğu property’dir.
VoltageCaps(UInt32) İşlemcinin voltaj kapasitesinin tutulduğu property’dir.


VII)Win32_Service


Bilgisayarda çalışmakta olan servislere ilişkin bilgileri barındırır.


 



Açıklamalar.












































































AcceptPause(Boolean) Servisin pause edilip edilemeyeceğinin tutulduğu property’dir.
AcceptStop(Boolean) Servisin stop edilip edilemeyeceğinin tutulduğu property’dir.
Caption(String) Servisin kısa açıklamasının tutulduğu property’dir.
CheckPoint(UInt32) Servisin her durduğu, başladığı veya pause olduğu zamanlarda artan değerdir.
Description(String) Servisin açıklamasının tutulduğu property’dir.
DesktopInteract(Boolean) Servisin masaüstü ile etkileşim içinde olup olmadığının tutulduğu property’dir.
DisplayName(String) Servisin görüntülenen adının tutulduğu property’dir. Maksimum 256 karakter uzunluğunda olabilir.
ErrorControl(String) Servis başlarken hata verirse, ErrorControl property’si hatanın derecesini tutar. Bütün hatalar sistem tarafından kaydedilir. Bilgisayar kullanıcıyı “Ignore” tipi hatalarda uyarmaz. “Normal” tipindeki hatalarda kullanıcı uyarılır. “Severe” tipindeki hatalarda sistem en son düzgün konfigürasyonda yeniden başlatılır. “Critical” tipindeki hatalarda ise sistem düzgün bir configürasyonda yeniden başlatılır.
ExitCode(UInt32) Servis başlatılırken veya durdurulurken oluşan Win32 hata kodunun tutulduğu property’dir.
InstallDate(DateTime) Servisin kurulduğu tarihtir.
Name(String) Servisin tanımlandığı property’dir.
PathName(String) Servisin binary dosyasına ait fully qualified dosya yolunun tutulduğu property’dir.
ProcessId(UInt32) Servisin process identifier’ının tutulduğu property’dir.
ServiceSpecificExitCode(UInt32) Servis başlatılıyorken veya durduruluyorken servise özgü hataların tutulduğu property’dir.
ServiceType(String) Servisin tipinin tutulduğu property’dir.
Started(Boolean) Servisin başlatılıp başlatılmadığının tutulduğu property’dir.
StartMode(String) Servisin başlangıç modunun tutulduğu property’dir. Değeri “Boot” ise bir aygıt sürücüsünün işletim sistemi tarafından başlatıldığı anlamına gelir. Değeri “System” ise IoInitSystem tarafından başlatılan bir aygıt sürücüsü olduğu anlamına gelir. “Automatic” ise servisin service control manager tarafından bilgisayar başladığında başlatıldığı anlamına gelir. “Manual” servisin bir process’in StartService fonksiyonunu çağırdığı zaman service control manager tarafından başlatıldığı anlamına gelir. “Disabled” ise servisin başlatılamayacağı anlamına gelir.
StartName(String) Servisin hangi account name altında çalıştığının tutulduğu property’dir.
State(String) Base servisin mevcut durumunun tutulduğu property’dir.
Status(String)

Servisin o anki durumunun tutulduğu property’dir. İşlevsel ve işlevsel olmayan birçok durum tanımlanabilir. İşlevsel durumlar “OK” (Çalışıyor), “Degraded” (Bozulmuş) ve “Pred Fail”’dir. “Pred Fail” servisin düzgün çalıştığını ancak yakın zamanda bir hata alınabilir olduğunu belirtir. İşlevsel olmayan durumlar ise “Error” (Hata), “Starting” (Başlatılıyor), “Stopping” (Durduruluyor) ve “Service”’dir. Service durumundaysa sistemle ilgili yönetimsel bazı işlemler yapılıyor anlamına gelir.

SystemCreationClassName(String) Gözlemlenen sistemin CreationClassName’inin tutulduğu property’dir.
SystemName(String) Gözlemlenen sistemin adının tutulduğu property’dir.
TagId(UInt32) Servis için belirlenmiş olan unique bir tag değerinin tutulduğu property’dir. Tag değeri HKEY_LOCAL_MACHINE\System

\CurrentControlSet\Control\GroupOrderList’de bulunan registry kaydındaki servislerin başlatılma sıralarının belirlenmesinde kullanılabilir.

WaitHint(UInt32) Bekleyen bir start, stop, pause veya continue işlemi için tahmin edilen gerekli zamanın tutulduğu property’dir.


VIII)Win32_VideoController


Bilgisayarda bulunan ekran kartı ve yetenekleri hakkında bilgileri barındırır.



Açıklamalar.



































































































































































AcceleratorCapabilities(UInt16) Ekran kartının grafik ve 3D özelliklerinin tutulduğu property’dir.
AdapterCompatibility(String) Ekran kartının chip set’inin tutulduğu property’dir.
AdapterDACType(String) Digital-to-Analog converter’ın (DAC) adının veya ID’sinin tutulduğu property’dir.
AdapterRAM(UInt32) Ekran kartının belleğinin tutulduğu property’dir.
Availability(UInt16)

Ekran kartının durumunun ve kullanılırlığının taşındığı property’dir. Örneğin bu property’nin değeri 3 ise cihaz çalışıyor demektir. 4 ise uyarı, 5 ise test, 10 ise bozulmuş, 13, 14, 15 ve 17 ise değişik şekillerde power save modunda demektir. Bu 3 moddan 13 (“Power Save – Unknown”) cihazın power save modunda olduğuna işaret eder ancak cihazın durumunun tam olarak bilinmediğini belirtir. 14 ise (“Power Save – Low Power Mode”) cihazın yine power save modunda olduğunu fakat düşük performansta da olsa çalıştığını belirtir. 15 (“Power Save – Standby”), cihazın çalışır durumda olmadığını fakat hızlıca çalışır duruma getirilebileceğini belirtir. Son olarak 17 (“Power Save – Warning”) ise cihazın pover save modunda olduğunu ve uyarı verdiğini belirtir.

CapabilityDescriptions(String) Ekran kartının özelliklerinin detaylı açıklamalarının tutulduğu property’dir.
Caption(String) Ekran kartının kısa açıklamasının tutulduğu property’dir.
ConfigManagerErrorCode(UInt32)

Win 32 Configuration Manager hata kodunu verir. Aşağıda değerleri ve anlamları listelenmiştir:
0 – Cihaz düzgün çalışıyor.
1 – Cihaz düzgün bir şekilde ayarlanmamış.
2 – Windows bu cihaz için sürücüyü yükleyemiyor.
3 – Cihazın sürücüsü bozulmuş veya sistem bellek veya diğer kaynaklar açısından yetersiz durumda.
4 – Cihaz düzgün çalışmıyor. Sürücülerinden biri veya registry değerleri bozulmuş olabilir.
5 – Bu cihazın sürücüsü Windows’un yönetmediği veya kullanmadığı bir kaynağa ihtiyaç duyuyor.
6 – Cihazın boot ayarları diğer başka cihazlarla çakışıyor.
7 – Filtreleme yapılamıyor.
8 – Cihazın sürücü yükleyicisi bulunamıyor.
9 – Cihaz düzgün çalışmıyor çünkü cihazı kontrol eden firmware cihazın kaynaklarını hatalı belirliyor.
10 – Cihaz başlatılamıyor.
11 – Cihaz başarısız oldu.
12 – Cihazın kullanabileceği yeterli serbest kaynaklar bulunamıyor.
13 – Windows cihazın kaynaklarını doğrulayamıyor.
14 – Cihaz bilgisayar yeniden başlatılana kadar düzgün çalışmayacak.
15 – Cihaz olası bir re-enumeration problemi yüzünden düzgün çalışmıyor.
16 – Windows bu cihazın kullandığı bütün kaynakları doğrulayamıyor.
17 – Cihaz bilinmeyen bir kaynak türü istiyor.
18 – Cihazın sürücülerinin yeniden yüklenmesi gerekiyor.
19 – Registry değerleri bozulmuş olabilir.
20 – VXD Loader’ı kullanırken hata.
21 – Sistem Hatası: Cihazın sürücüsünü değiştirmeyi deneyin.
22 – Cihaz devre dışı bırakılmış.
23 – Sistem Hatası: Cihazın sürücüsünü değiştirmeyi deneyin. İşe yaramazsa cihazın dökümantasyonuna başvurun.
24 – Cihaz mevcut değil, düzgün çalışmıyor veya tüm sürücüleri yüklenmemiş.
25 – Windows hala cihazın kurulumunu yapıyor.
26 – Windows hala cihazın kurulumunu yapıyor.
27 – Cihaz geçerli bir log konfigürasyonuna sahip değil.
28 – Cihazın sürücüleri yüklü değil.
29 – Cihaz etkin değil çünkü cihazın firmware’i cihaza gerekli kaynakları sağlamadı.
30 – Cihaz başka bir cihazın kullandığı Interrupt Request (IRQ) kullanıyor.
31 – Cihaz düzgün çalışmıyor çünkü Windows cihaza gerekli sürücüleri yükleyemiyor.

ConfigManagerUserConfig(Boolean)

Cihazın kullanıcı tarafından belirlenmiş bir konfigürasyona sahip olup olmadığını belirtir.

CurrentBitsPerPixel(UInt32) Her pikseli için kullanılan bit sayısı.
CurrentHorizontalResolution(UInt32) Mevcut yatay piksel sayısı.
CurrentNumberOfColors(UInt64) Mevcut çözünürlükte desteklenen renk sayısı.
CurrentNumberOfColumns(UInt32) Harf modundaysa ekran kartının sütun sayısı. Değilse değeri 0′dır.
CurrentNumberOfRows(UInt32) Harf modundaysa ekran kartının satır sayısının tutulduğu property’dir. Değilse değeri 0′dır.
CurrentRefreshRate(UInt32) Ekran kartının yenilenme süresinin tutulduğu property’dir.
CurrentScanMode(UInt16) Mevcut scan modunun tutulduğu property’dir.
CurrentVerticalResolution(UInt32) Mevcut dikey piksel sayısı
Description(String) Ekran kartının açıklamasının tutulduğu property’dir.
DeviceID(String)

Ekran kartının sistemdeki diğer cihazlardan ayrıştırılmasını sağlayan sahip olduğu benzersiz string tipinde ID property’sidir.

DitherType(UInt32) Ekran kartının titreme tipinin tutulduğu property’dir.
DriverDate(DateTime) Yüklü ekran kartı sürücüsünün en son güncelleme günü ve saatinin tutulduğu property’dir.
DriverVersion(String) Ekran kartının driver’ının versiyon numarasının tutulduğu property’dir.
ErrorCleared(Boolean)

LastErrorCode property’sinde belirtilmiş olan hatanın temizlenmiş olup olmadığının tutulduğu property’dir.

ErrorDescription(String)

LastErrorCode property’sinde belirtilmiş olan hata ve düzeltmek için yapılabilecekler hakkında daha fazla bilgi sağlayan string tipinde property’dir.

ICMIntent(UInt32)

Hangi renk eşleştirme metodunun (Image Color Matching Intent) kullanılacağının tutulduğu property’dir.

ICMMethod(UInt32) Renk eşleştirme metodunun (ICM) nasıl handle edildiğinin tutulduğu property’dir.
InfFilename(String) Ekran kartının .inf dosyasının yolunun tutulduğu property’dir.
InfSection(String) Win32 video bilgisinin .inf dosyasının hangi bölümünde olduğu bilgisinin tutulduğu property’dir.
InstallDate(DateTime) Ekran kartının kurulduğu tarihin tutulduğu property’dir.
InstalledDisplayDrivers(String) Kurulu ekran kartının sürücüsünün adının tutulduğu property’dir.
LastErrorCode(UInt32) Cihaz tarafından verilen en son hatanın tutulduğu property’dir.
MaxMemorySupported(UInt32) Byte cinsinden desteklenen maksimum bellek.
MaxRefreshRate(UInt32) Hertz cinsinden ekran kartının maksimum refresh rate’inin tutulduğu property’dir.
MinRefreshRate(UInt32) Hertz cinsinden ekran kartının minimum refresh rate’inin tutulduğu property’dir.
Monochrome(Boolean) İmajların grayscale mi renkli mi gösterildiğinin tutulduğu property’dir.
Name(String) Ekran kartının adının tutulduğu property’dir.
NumberOfVideoPages(UInt32) Mevcut çözünürlük ve bellek tarafından desteklenen video page sayısının tutulduğu property’dir.
PNPDeviceID(String)

Cihazın Win32 Plug and Play cihaz Id’sinin tutulduğu property’dir.

PowerManagementCapabilities(UInt16)

Cihazın güç yönetimi ile ilgili özelliklerinin tutulduğu property’dir. Aldığı değerlerin açıklamaları aşağıdaki gibidir:
0 – Bilinmiyor
1 – Desteklenmiyor.
2 – Etkin değil
3 – Güç yönetimi özellikleri etkinleştirilmiş fakat hangi özelliğin etkin olduğu veya özellik hakkındaki bilgi mevcut değil.
4 – Cihazın güç durumunu kullanıma göre değiştirebileceğini belirtir. (Power State Settable)
5 – SetPowerState metodunun desteklendiğini belirtir. (Power Cycling Supported)
6 – SetPowerState metodunun PowerState değişkeni 5 olarak set edilerek invoke edilebileceğini belirtir. (Timed Power On Supported)
7 – SetPowerState metodunun PowerState değişkeni 5 olarak set edilerek ve Time parametresinin de spesifik bir tarih ve zamana veya zaman aralığına set edilerek invoke edilebileceğini belirtir.

PowerManagementSupported(Boolean)

Cihazda güç yönetimi yapılıp yapılamayacağının tutulduğu boolean property’dir. Bu property güç yönetimi özelliklerinin etkinleştirimiş olup olmadığını belirtmez. Bu bilgi için PowerManagementCapabilities array’indeki öğelere bakılabilir.

ProtocolSupported(UInt16) Ekran kartının “controlled” cihazlara erişmesi için kullanılan protokol’dür.
ReservedSystemPaletteEntries(UInt32)

Sistemin renk tablosundaki mevcut rezerve edilmiş entry’lerin tutulduğu property’dir.

Status(String)

Cihazın o anki durumunun tutulduğu property’dir. İşlevsel ve işlevsel olmayan birçok durum tanımlanabilir. İşlevsel disk durumları “OK” (Çalışıyor), “Degraded” (Bozulmuş) ve “Pred Fail”’dir. “Pred Fail” cihazın düzgün çalıştığını ancak yakın zamanda bir hata alınabilir olduğunu belirtir. İşlevsel olmayan durumlar ise “Error” (Hata), “Starting” (Başlatılıyor), “Stopping” (Durduruluyor) ve “Service”’dir. Disk service durumundaysa diskle ilgili yönetimsel bazı işlemler yapılıyor anlamına gelir.

StatusInfo(UInt16)

Mantıksal sürücünün (logical device) durumunun tutulduğu property’dir. 3 ise etkin, 4 ise etkin değil, 2 ise bilinmeyen, 1 ise diğer başka bir durumda demektir. Bu property mantıksal sürücüye uygulanmıyorsa 5 yani uygun değildir değeri kullanılmalıdır.

SystemCreationClassName(String)

Gözlemlenen sistemin CreationClassName property’sidir.

SystemName(String)

Gözlemlenen sistemin ismidir.

SystemPaletteEntries(UInt32)

Renk tablosundaki mevcut kayıt sayısının tutulduğu property’dir.

TimeOfLastReset(DateTime) Controller’ın en son reset’lendiği tarihin tutulduğu property’dir.
VideoArchitecture(UInt16) Ekran mimarisinin tutulduğu property’dir. Çrmeğin 5-VGA
VideoMemoryType(UInt16) Ekran bellek tipinin tutulduğu property’dir.
VideoMode(UInt16) Mevcut video modu.
VideoModeDescription(String) Mevcut çözünürlük, renk ve scan mode ayarlarının tutulduğu property’dir.
VideoProcessor(String) Ekran kartının açıklamasının tutulduğu property’dir.


IX)Diğer Classlar


Bu kısımda ise diğer class’lar gruplarına göre verilmiştir.









































































































































































































































































































































































































Computer System Hardware Classes

Win32_1394Controller
Win32_1394ControllerDevice
Win32_AllocatedResource
Win32_AssociatedBattery
Win32_AssociatedProcessorMemory
Win32_AutochkSetting
Win32_BaseBoard
Win32_Battery
Win32_BIOS
Win32_Bus
Win32_CacheMemory
Win32_CDROMDrive
Win32_ControllerHasHub
Win32_CurrentProbe
Win32_DefragAnalysis
Win32_DesktopMonitor
Win32_DeviceBus
Win32_DeviceMemoryAddress
Win32_DeviceSettings
Win32_DiskDrive
Win32_DiskDrivePhysicalMedia
Win32_DisplayConfiguration
Win32_DisplayControllerConfiguration
Win32_DMAChannel
Win32_DriverForDevice
Win32_Fan
Win32_FloppyController
Win32_FloppyDrive
Win32_HeatPipe
Win32_IDEController
Win32_IDEControllerDevice
Win32_InfraredDevice
Win32_IRQResource
Win32_Keyboard
Win32_MemoryArray
Win32_MemoryArrayLocation
Win32_MemoryDevice
Win32_MemoryDeviceArray
Win32_MemoryDeviceLocation
Win32_MotherboardDevice
Win32_MountPoint
Win32_NetworkAdapter
Win32_NetworkAdapterConfiguration
Win32_NetworkAdapterSetting
Win32_OnBoardDevice
Win32_ParallelPort
Win32_PCMCIAController
Win32_PhysicalMedia
Win32_PhysicalMemory
Win32_PhysicalMemoryArray
Win32_PhysicalMemoryLocation
Win32_PnPAllocatedResource
Win32_PnPDevice
Win32_PnPEntity
Win32_PnPSignedDriver
Win32_PnPSignedDriverCIMDataFile
Win32_PointingDevice
Win32_PortableBattery
Win32_PortConnector
Win32_PortResource
Win32_PowerManagementEvent
Win32_POTSModem
Win32_POTSModemToSerialPort
Win32_Printer
Win32_PrinterConfiguration
Win32_PrinterController
Win32_PrinterDriver
Win32_PrinterDriverDll
Win32_PrinterSetting
Win32_PrintJob
Win32_Processor
Win32_Refrigeration
Win32_SCSIController
Win32_SCSIControllerDevice
Win32_SerialPort
Win32_SerialPortConfiguration
Win32_SerialPortSetting
Win32_SMBIOSMemory
Win32_SoundDevice
Win32_SystemBIOS
Win32_SystemDriverPnPEntity
Win32_SystemEnclosure
Win32_SystemMemoryResource
Win32_SystemSlot
Win32_TapeDrive
Win32_TCPIPPrinterPort
Win32_TemperatureProbe
Win32_UninterruptiblePowerSupply
Win32_USBController
Win32_USBControllerDevice
Win32_USBHub
Win32_VideoConfiguration
Win32_VideoController
Win32_VideoSettings
Win32_VoltageProbe

WMI Service Management Classes

Win32_MethodParameterClass
Win32_WMISetting
Win32_WMIElementSetting

Performance Counter Classes

Win32_Perf
Win32_PerfFormattedData
Win32_PerfFormattedData_ASP_ActiveServerPages
Win32_PerfFormattedData_ContentFilter_IndexingServiceFilter
Win32_PerfFormattedData_ContentIndex_IndexingService
Win32_PerfFormattedData_InetInfo_InternetInformationServicesGlobal
Win32_PerfFormattedData_ISAPISearch_HttpIndexingService
Win32_PerfFormattedData_MSDTC_DistributedTransactionCoordinator
Win32_PerfFormattedData_NTFSDRV_SMTPNTFSStoreDriver
Win32_PerfFormattedData_PerfDisk_LogicalDisk
Win32_PerfFormattedData_PerfDisk_PhysicalDisk
Win32_PerfFormattedData_PerfNet_Browser
Win32_PerfFormattedData_PerfNet_Redirector
Win32_PerfFormattedData_PerfNet_Server
Win32_PerfFormattedData_PerfNet_ServerWorkQueues
Win32_PerfFormattedData_PerfOS_Cache
Win32_PerfFormattedData_PerfOS_Memory
Win32_PerfFormattedData_PerfOS_Objects
Win32_PerfFormattedData_PerfOS_PagingFile
Win32_PerfFormattedData_PerfOS_Processor
Win32_PerfFormattedData_PerfOS_System
Win32_PerfFormattedData_PerfProc_FullImage_Costly
Win32_PerfFormattedData_PerfProc_Image_Costly
Win32_PerfFormattedData_PerfProc_JobObject
Win32_PerfFormattedData_PerfProc_JobObjectDetails
Win32_PerfFormattedData_PerfProc_Process
Win32_PerfFormattedData_PerfProc_ProcessAddressSpace_Costly
Win32_PerfFormattedData_PerfProc_Thread
Win32_PerfFormattedData_PerfProc_ThreadDetails_Costly
Win32_PerfFormattedData_PSched_PSchedFlow
Win32_PerfFormattedData_PSched_PSchedPipe
Win32_PerfFormattedData_RemoteAccess_RASPort
Win32_PerfFormattedData_RemoteAccess_RASTotal
Win32_PerfFormattedData_RSVP_ACSRSVPInterfaces
Win32_PerfFormattedData_RSVP_ACSRSVPService
Win32_PerfFormattedData_SMTPSVC_SMTPServer
Win32_PerfFormattedData_Spooler_PrintQueue
Win32_PerfFormattedData_TapiSrv_Telephony
Win32_PerfFormattedData_Tcpip_ICMP
Win32_PerfFormattedData_Tcpip_IP
Win32_PerfFormattedData_Tcpip_NBTConnection
Win32_PerfFormattedData_Tcpip_NetworkInterface
Win32_PerfFormattedData_Tcpip_TCP
Win32_PerfFormattedData_Tcpip_UDP
Win32_PerfFormattedData_TermService_TerminalServices
Win32_PerfFormattedData_TermService_TerminalServicesSession
Win32_PerfFormattedData_W3SVC_WebService
Win32_PerfRawData
Win32_PerfRawData_ASP_ActiveServerPages
Win32_PerfRawData_ContentFilter_IndexingServiceFilter
Win32_PerfRawData_ContentIndex_IndexingService
Win32_PerfRawData_InetInfo_InternetInformationServicesGlobal
Win32_PerfRawData_ISAPISearch_HttpIndexingService
Win32_PerfRawData_MSDTC_DistributedTransactionCoordinator
Win32_PerfRawData_NTFSDRV_SMTPNTFSStoreDriver
Win32_PerfRawData_PerfDisk_LogicalDisk
Win32_PerfRawData_PerfDisk_PhysicalDisk
Win32_PerfRawData_PerfNet_Browser
Win32_PerfRawData_PerfNet_Redirector
Win32_PerfRawData_PerfNet_Server
Win32_PerfRawData_PerfNet_ServerWorkQueues
Win32_PerfRawData_PerfOS_Cache
Win32_PerfRawData_PerfOS_Memory
Win32_PerfRawData_PerfOS_Objects
Win32_PerfRawData_PerfOS_PagingFile
Win32_PerfRawData_PerfOS_Processor
Win32_PerfRawData_PerfOS_System
Win32_PerfRawData_PerfProc_FullImage_Costly
Win32_PerfRawData_PerfProc_Image_Costly
Win32_PerfRawData_PerfProc_JobObject
Win32_PerfRawData_PerfProc_JobObjectDetails
Win32_PerfRawData_PerfProc_Process
Win32_PerfRawData_PerfProc_ProcessAddressSpace_Costly
Win32_PerfRawData_PerfProc_Thread
Win32_PerfRawData_PerfProc_ThreadDetails_Costly
Win32_PerfRawData_PSched_PSchedFlow
Win32_PerfRawData_PSched_PSchedPipe
Win32_PerfRawData_RemoteAccess_RASPort
Win32_PerfRawData_RemoteAccess_RASTotal
Win32_PerfRawData_RSVP_ACSRSVPInterfaces
Win32_PerfRawData_RSVP_ACSRSVPService
Win32_PerfRawData_SMTPSVC_SMTPServer
Win32_PerfRawData_Spooler_PrintQueue
Win32_PerfRawData_TapiSrv_Telephony
Win32_PerfRawData_Tcpip_ICMP
Win32_PerfRawData_Tcpip_IP
Win32_PerfRawData_Tcpip_NBTConnection
Win32_PerfRawData_Tcpip_NetworkInterface
Win32_PerfRawData_Tcpip_TCP
Win32_PerfRawData_Tcpip_UDP
Win32_PerfRawData_TermService_TerminalServices
Win32_PerfRawData_TermService_TerminalServicesSession
Win32_PerfRawData_W3SVC_WebService













































































































































































































































































































































































































Operating System Classes

Win32_Account
Win32_AccountSID
Win32_ACE
Win32_ActiveRoute
Win32_BaseService
Win32_BootConfiguration
Win32_CIMLogicalDeviceCIMDataFile
Win32_ClassicCOMApplicationClasses
Win32_ClassicCOMClass
Win32_ClassicCOMClassSetting
Win32_ClassicCOMClassSettings
Win32_ClientApplicationSetting
Win32_CodecFile
Win32_CollectionStatistics
Win32_COMApplicationClasses
Win32_COMApplicationSettings
Win32_ComClassAutoEmulator
Win32_ComClassEmulator
Win32_COMApplication
Win32_COMClass
Win32_ComponentCategory
Win32_ComputerShutdownEvent
Win32_ComputerSystem
Win32_ComputerSystemEvent
Win32_ComputerSystemProduct
Win32_ComputerSystemProcessor
Win32_ComputerSystemWindowsProductActivationSetting
Win32_COMSetting
Win32_ConnectionShare
Win32_CurrentTime
Win32_DCOMApplication
Win32_DCOMApplicationAccessAllowedSetting
Win32_DCOMApplicationLaunchAllowedSetting
Win32_DCOMApplicationSetting
Win32_DependentService
Win32_Desktop
Win32_DeviceChangeEvent
Win32_DFSNode
Win32_DFSNodeTarget
Win32_DFSTarget
Win32_Directory
Win32_DirectorySpecification
Win32_DiskDriveToDiskPartition
Win32_DiskPartition
Win32_DiskQuota
Win32_DriverVXD
Win32_Environment
Win32_Group
Win32_GroupInDomain
Win32_GroupUser
Win32_IP4PersistedRouteTable
Win32_IP4RouteTable
Win32_IP4RouteTableEvent
Win32_ImplementedCategory
Win32_JobObjectStatus
Win32_LoadOrderGroup
Win32_LoadOrderGroupServiceDependencies
Win32_LoadOrderGroupServiceMembers
Win32_LocalTime
Win32_LoggedOnUser
Win32_LogicalDisk
Win32_LogicalDiskRootDirectory
Win32_LogicalDiskToPartition
Win32_LogicalFileAccess
Win32_LogicalFileAuditing
Win32_LogicalFileGroup
Win32_LogicalFileOwner
Win32_LogicalFileSecuritySetting
Win32_LogicalMemoryConfiguration
Win32_LogicalProgramGroup
Win32_LogicalProgramGroupDirectory
Win32_LogicalProgramGroupItem
Win32_LogicalProgramGroupItemDataFile
Win32_LogicalShareAccess
Win32_LogicalShareAuditing
Win32_LogicalShareSecuritySetting
Win32_LogonSession
Win32_LogonSessionMappedDisk
Win32_LUID
Win32_LUIDandAttributes
Win32_MappedLogicalDisk
Win32_ModuleLoadTrace
Win32_ModuleTrace
Win32_NamedJobObject
Win32_NamedJobObjectActgInfo
Win32_NamedJobObjectLimit
Win32_NamedJobObjectLimitSetting
Win32_NamedJobObjectProcess
Win32_NamedJobObjectSecLimit
Win32_NamedJobObjectSecLimitSetting
Win32_NamedJobObjectStatistics
Win32_NetworkClient
Win32_NetworkConnection
Win32_NetworkLoginProfile
Win32_NetworkProtocol
Win32_NTDomain
Win32_NTEventlogFile
Win32_NTLogEvent
Win32_NTLogEventComputer
Win32_NTLogEventLog
Win32_NTLogEventUser
Win32_OperatingSystem
Win32_OperatingSystemAutochkSetting
Win32_OperatingSystemQFE
Win32_OSRecoveryConfiguration
Win32_PageFile
Win32_PageFileElementSetting
Win32_PageFileSetting
Win32_PageFileUsage
Win32_PingStatus
Win32_PrinterShare
Win32_PrivilegesStatus
Win32_Process
Win32_ProcessStartTrace
Win32_ProcessStartup
Win32_ProcessStopTrace
Win32_ProcessTrace
Win32_ProgramGroup
Win32_ProgramGroupContents
Win32_ProgramGroupOrItem
Win32_ProtocolBinding
Win32_Proxy
Win32_QuickFixEngineering
Win32_QuotaSetting
Win32_Registry
Win32_ScheduledJob
Win32_SecurityDescriptor
Win32_SecuritySetting
Win32_SecuritySettingAccess
Win32_SecuritySettingAuditing
Win32_SecuritySettingGroup
Win32_SecuritySettingOfLogicalFile
Win32_SecuritySettingOfLogicalShare
Win32_SecuritySettingOfObject
Win32_SecuritySettingOwner
Win32_ServerConnection
Win32_Service
Win32_ServerSession
Win32_Session
Win32_SessionConnection
Win32_SessionProcess
Win32_ShadowCopy
Win32_ShadowProvider
Win32_ShadowStorage
Win32_ShadowBy
Win32_ShadowFor
Win32_ShadowOn
Win32_ShadowVolumeSupport
Win32_ShadowDiffVolumeSupport
Win32_ShadowContext
Win32_Share
Win32_ShareToDirectory
Win32_ShortcutFile
Win32_SID
Win32_SIDandAttributes
Win32_StartupCommand
Win32_SubDirectory
Win32_SystemAccount
Win32_SystemBootConfiguration
Win32_SystemConfigurationChangeEvent
Win32_SystemDesktop
Win32_SystemDevices
Win32_SystemDriver
Win32_SystemLoadOrderGroups
Win32_SystemLogicalMemoryConfiguration
Win32_SystemNetworkConnections
Win32_SystemOperatingSystem
Win32_SystemPartitions
Win32_SystemProcesses
Win32_SystemProgramGroups
Win32_SystemResources
Win32_SystemServices
Win32_SystemSetting
Win32_SystemSystemDriver
Win32_SystemTimeZone
Win32_SystemTrace
Win32_SystemUsers
Win32_Thread
Win32_ThreadStartTrace
Win32_ThreadStopTrace
Win32_ThreadTrace
Win32_TimeZone
Win32_TokenGroups
Win32_TokenPrivileges
Win32_Trustee
Win32_UserAccount
Win32_UserDesktop
Win32_UserInDomain
Win32_UTCTime
Win32_Volume
Win32_VolumeChangeEvent
Win32_VolumeQuota
Win32_VolumeQuotaSetting
Win32_VolumeUserQuota
Win32_WindowsProductActivation



































































































































Installed Applocations Classes

Win32_ActionCheck
Win32_ApplicationCommandLine
Win32_ApplicationService
Win32_Binary
Win32_BindImageAction
Win32_CheckCheck
Win32_ClassInfoAction
Win32_CommandLineAccess
Win32_Condition
Win32_CreateFolderAction
Win32_DuplicateFileAction
Win32_EnvironmentSpecification
Win32_ExtensionInfoAction
Win32_FileSpecification
Win32_FontInfoAction
Win32_IniFileSpecification
Win32_InstalledSoftwareElement
Win32_LaunchCondition
Win32_ManagedSystemElementResource
Win32_MIMEInfoAction
Win32_MoveFileAction
Win32_MSIResource
Win32_ODBCAttribute
Win32_ODBCDataSourceAttribute
Win32_ODBCDataSourceSpecification
Win32_ODBCDriverAttribute
Win32_ODBCDriverSoftwareElement
Win32_ODBCDriverSpecification
Win32_ODBCSourceAttribute
Win32_ODBCTranslatorSpecification
Win32_Patch
Win32_PatchFile
Win32_PatchPackage
Win32_Product
Win32_ProductCheck
Win32_ProductResource
Win32_ProductSoftwareFeatures
Win32_ProgIDSpecification
Win32_Property
Win32_PublishComponentAction
Win32_RegistryAction
Win32_RemoveFileAction
Win32_RemoveIniAction
Win32_ReserveCost
Win32_SelfRegModuleAction
Win32_ServiceControl
Win32_ServiceSpecification
Win32_ServiceSpecificationService
Win32_SettingCheck
Win32_ShortcutAction
Win32_ShortcutSAP
Win32_SoftwareElement
Win32_SoftwareElementAction
Win32_SoftwareElementCheck
Win32_SoftwareElementCondition
Win32_SoftwareElementResource
Win32_SoftwareFeature
Win32_SoftwareFeatureAction
Win32_SoftwareFeatureCheck
Win32_SoftwareFeatureParent
Win32_SoftwareFeatureSoftwareElements
Win32_TypeLibraryAction


Örnek uygulamamızda bilgisayarımızdaki hard disk, sürücü, işletim sistemi, bilgisayar, işlemci, BIOS, zaman dilimi, bellek, ekran kartı, process ve servis bilgilerini alacak ve uygulamamız üstünden bilgisayarda çalışan servisleri durdurup başlatacağız. İlk olarak projemize System.Management referansını ekleyelim:



Ardından ise System.Management namespace’ini kodumuzda using ile tanımlıyoruz:






using System.Management;



Formumuza birer treeview ve listview ekliyoruz. Bazı sistem bilgilerini alırken treeview bazılarını alırken listview kullanacağımız için ikisini de üst üste gelecek şekilde forma yerleştirip kullanılacakları zamanlarda visible property’lerini true ve/veya false olarak set edeceğiz. Formumuza bir menustrip ekledikten sonra aşağıdaki gibi öğeleri ekliyoruz:


 



Kodumuzda class level bir ManagementObjectSearcher (mos) nesnesi tanımlıyoruz. Ardından ise formumuzdaki listview’i dolduracağımız zaman kullanacağımız Listele metod’unu yazıyoruz:





private void Listele(string query, ManagementObjectSearcher m, ListView lv, TreeView tv)
{
    lv.Items.Clear();
    lv.Visible = true;
    tv.Visible = false;
    m.Query = new ObjectQuery(query);
    foreach
(ManagementObject mo in m.Get())
    {
        foreach
(PropertyData pd in mo.Properties)
        {
            if
(mo[pd.Name] != null)
            {
                ListViewItem
lvi = new ListViewItem();
                System.Windows.Forms.ListViewItem.ListViewSubItem lvi2 = new System.Windows.Forms.ListViewItem.ListViewSubItem();
                lvi.Text = pd.Name;
                lv.Items.Add(lvi);
                lvi2.Text = mo[pd.Name].ToString();
                lvi.SubItems.Add(lvi2);
            }
        }
    }
}


Listele metodunda ilk olarak parametre geçirilen listview’in item’larını temizliyoruz. Sonra da listview’ın visible’ını true, treeview’ı kullanmayacağımız için de treeview’ın visible’ını false olarak set ediyoruz. Ardından parametre geçirdiğimiz ManagementObjectSearcher nesnesinin (m) Query property’sine yine parametre geçirdiğimiz string tipinde query değişkenini atıyoruz. Ardından ise ManagementObjectSearcher’ın (m) Get metodunu kullanarak her bir ManagementObject içinde foreach ile dolaşmaya başlıyoruz. Bu ManagementObject’lerin propertylerini ve değerlerini listview’e eklemek içinse ManagementObject nesnesinin (mo) Properties array’indeki her bir PropertyData nesnesini foreach ile alıyoruz. Management object’in ilgili PropertyData’sının değeri null değilse ilk olarak ilgili PropertyData’nın adını listview’e ekliyoruz. Ardından ise ManagementObject nesnesinin (mo) ilgili PropertyData’sının aldığı değeri de listview’daki her property’nin karşısına ekliyoruz.





private void işletimSistemiBilgileriToolStripMenuItem_Click(object sender, EventArgs e)
{
    Listele(“Select * from Win32_OperatingSystem”, mos, listView1, treeView1);
}


private void bilgisayarBilgileriToolStripMenuItem_Click(object sender, EventArgs e)
{
    Listele(“SELECT * FROM Win32_ComputerSystem”, mos, listView1, treeView1);
}


private void işlemciBilgileriToolStripMenuItem_Click(object sender, EventArgs e)
{
    Listele(“SELECT * FROM Win32_processor”, mos, listView1, treeView1);
}


private void bIOSBilgileriToolStripMenuItem_Click(object sender, EventArgs e)
{
    Listele(“SELECT * FROM Win32_bios”, mos, listView1, treeView1);
}


private void zamanDilimiBilgileriToolStripMenuItem_Click(object sender, EventArgs e)
{
    Listele(“SELECT * FROM Win32_timezone”, mos, listView1, treeView1);
}


private void bellekBilgileriToolStripMenuItem_Click(object sender, EventArgs e)
{
    Listele(“SELECT * FROM Win32_LogicalMemoryConfiguration”, mos, listView1, treeView1);
}


private void ekranKartıBilgileriToolStripMenuItem_Click(object sender, EventArgs e)
{
    Listele(“SELECT * FROM Win32_VideoController”, mos, listView1, treeView1);
}


Şimdi de treeview’da göstereceğimiz hard disk, sürücü ve process bilgilerinin kodunu yazmaya geldi. İlk olarak treeview’ın nodelarını temizliyoruz ve formumuzdaki listview’ın visible property’sini false, treeview’ın visible property’sini true olarak set ediyoruz. Ardından class level tanımladığımız ManagementObjectSearcher nesnesinin (mos) Query property’sini set ediyoruz. Ardından ise ManagementObjectSearcher’ın Get metoduyla bütün ManagementObject’leri treeview’ın node’larına ekliyoruz. Ardından ise bir foreach içinde tekrar bu ManagementObject’lerde dolaşıyor ve Properties array’indeki PropertyData nesneleri için bir daha foreach yazıyoruz. Ardından ise ManagementObject’in Caption property’si treenode’ın text’ine eşitse, ilgili treenode’a ilgili PropertyData’nın adını ve değerini atıyoruz.
Hard disk, sürücü ve process bilgilerinin kodlarını bu şekilde yazabiliriz. Değişen tek şey ManagementObjectQuery’leri olacaktır.





private void tsmiHardDiskBilgileri_Click(object sender, EventArgs e)
{
    treeView1.Nodes.Clear();
    listView1.Visible = false;
    treeView1.Visible = true;
   
    mos.Query = new ObjectQuery(“SELECT * From Win32_DiskDrive”);
   
    foreach
(ManagementObject mo in mos.Get())
    {
        treeView1.Nodes.Add(mo["Caption"].ToString(), mo["Caption"].ToString());
    }

    foreach
(TreeNode tn in treeView1.Nodes)
    {
        foreach
(ManagementObject mo in mos.Get())
        {
            foreach
(PropertyData pd in mo.Properties)
            {
                if
(mo["Caption"].ToString() == tn.Text)
                {
                    if
(mo[pd.Name] != null)
                    {
                        tn.Nodes.Add(pd.Name + “: “ + mo[pd.Name].ToString());
                    }
                }
            }
        }
    }
}


private void sürücüBilgileriToolStripMenuItem_Click(object sender, EventArgs e)
{
    treeView1.Nodes.Clear();
    listView1.Visible = false;
    treeView1.Visible = true;

    mos.Query = new ObjectQuery(“SELECT * From Win32_LogicalDisk”);

    foreach
(ManagementObject mo in mos.Get())
    {
        treeView1.Nodes.Add(mo["Caption"].ToString(), mo["Caption"].ToString());
    }


    foreach (TreeNode tn in treeView1.Nodes)
   {
        foreach
(ManagementObject mo in mos.Get())
        {
            foreach
(PropertyData pd in mo.Properties)
            {
                if
(mo["Caption"].ToString() == tn.Text)
                {
                    if
(mo[pd.Name] != null)
                    {
                        tn.Nodes.Add(pd.Name + “: “ + mo[pd.Name].ToString());
                    }
                }
            }
        }
    }
}

private
void processBilgileriToolStripMenuItem_Click(object sender, EventArgs e)
{
    treeView1.Nodes.Clear();
    listView1.Visible = false;
    treeView1.Visible = true;

    mos.Query = new ObjectQuery(“SELECT * From Win32_Process”);

    foreach
(ManagementObject mo in mos.Get())
    {
        treeView1.Nodes.Add(mo["Caption"].ToString(), mo["Caption"].ToString());
    }


    foreach (TreeNode tn in treeView1.Nodes)
    {
        foreach
(ManagementObject mo in mos.Get())
        {
            foreach
(PropertyData pd in mo.Properties)
            {
                if
(mo["Caption"].ToString() == tn.Text)
                {
                    if
(mo[pd.Name] != null)
                    {
                        tn.Nodes.Add(pd.Name + “: “ + mo[pd.Name].ToString());
                    }
                }
            }
        }
    }
}


Sırada bilgisayarda kurulu olan servisleri getireceğimiz metod var. ServisleriGetir adında bir metod oluşturuyoruz ve ilk olarak listview’ın öğelerini ve kolonlarını temizliyoruz. Ardından ise listview’ın visible property’sini true, treeview’ın visible property’sini false olarak set ediyoruz. Sonrasında listview’a 4 adet kolon ekliyor ve genişliklerini set ediyoruz.
Class level tanımladığımız ManagementObjectSearcher nesnesinin (mos) Query property’sini set ettikten sonra Get metoduyla Caption, State, StartName ve StartMode property’lerini her process için listview’a ekliyoruz. Service Bilgileri menustrip öğesinin click event’inde de ServisleriGetir metodunu çağırıyoruz:





private void ServisleriGetir()
{
    listView1.Items.Clear();
    listView1.Columns.Clear();
    listView1.Visible = true;
    treeView1.Visible = false;


    listView1.Columns.Add(“Caption”);
    listView1.Columns.Add(“State”);
    listView1.Columns.Add(“StartName”);
    listView1.Columns.Add(“StartMode”);
    listView1.Columns[0].Width = 250;
    listView1.Columns[1].Width = 90;
    listView1.Columns[2].Width = 150;
    listView1.Columns[3].Width = 150;

    mos.Query = new ObjectQuery(“Select * from Win32_Service”);

    foreach
(ManagementObject mo in mos.Get())
    {
        ListViewItem
lvi = new ListViewItem();
        System.Windows.Forms.ListViewItem.ListViewSubItem lvi2 = new System.Windows.Forms.ListViewItem.ListViewSubItem();
        System.Windows.Forms.ListViewItem.ListViewSubItem lvi3 = new System.Windows.Forms.ListViewItem.ListViewSubItem();
        System.Windows.Forms.ListViewItem.ListViewSubItem lvi4 = new System.Windows.Forms.ListViewItem.ListViewSubItem();
        lvi.Text = mo["Caption"].ToString();
        listView1.Items.Add(lvi);
        lvi2.Text = mo["State"].ToString();
        lvi.SubItems.Add(lvi2);
        lvi3.Text = mo["StartName"].ToString();
        lvi.SubItems.Add(lvi3);
        lvi4.Text = mo["StartMode"].ToString();
        lvi.SubItems.Add(lvi4);
    }
}

private
void serviceBilgileriToolStripMenuItem_Click(object sender, EventArgs e)
{
    ServisleriGetir();
}

Şimdi uygulamamız üzerinden servisleri durdurup yeniden başlatacağımız kodu yazalım. Bunun için listview’ın MouseDown event’ine aşağıdaki kodu yazıyoruz. Event’te farenin sağ tuşuna tıklandığı zaman listview için yeni bir context menü oluşturup, context menu’ye eklemek için bir menu item oluşturuyoruz. Class level tanımladığımız _servisAdı property’sine listview’de tıklanan item’ın text’ini atıyoruz. Class level tanımladığımız ManagementObjectSearcher nesnemizin (mos) Query property’sine bu sefer de Win32_Service içinde Caption property’si _servisAdi olan servisleri getirecek property’i yazıyoruz. Böylece ManagementObjectSearcher nesnesinin Get metoduyla durdurma veya başlatma işlemini yapabileceğimiz servisin tüm özelliklerini elde ediyoruz. Sonrasında ise bir if içinde servisin çalışıp çalışmama durumuna göre menu item’ın text property’sini set ediyor ve _servisDurumu değişkenine de StopService veya StartService değerlerinden gerekli olanı atıyoruz. Son olarak da context menu’nun item’larına menu item’ı (mi) ekliyoruz. Listview’in ContextMenu property’sine oluşturduğumuz context menu’yu atıyoruz (cm). Sonrasında ise servisi durdurmak veya başlatmak için menu item’ın click event’ini handle ediyoruz:





private string _servisAdi;
private
string _servisDurumu;

private
void listView1_MouseDown(object sender, MouseEventArgs e)
{
    if
(e.Button == MouseButtons.Right)
    {
        ContextMenu
cm = new ContextMenu();
        MenuItem
mi = new MenuItem();

        _servisAdi = listView1.GetItemAt(e.X, e.Y).Text;

        mos.Query = new ObjectQuery(“Select * from Win32_Service WHERE Caption = ‘” + _servisAdi + “‘”);

        foreach
(ManagementObject mo in mos.Get())
        {
            if
(Convert.ToBoolean(mo["Started"]))
            {
                mi.Text = “Durdur”;
                _servisDurumu = “StopService”;
            }
           
else
           
{
                mi.Text = “Başlat”;
                _servisDurumu = “StartService”;
            }
        }
   
        cm.MenuItems.Add(mi);
        listView1.ContextMenu = cm;
        mi.Click += new EventHandler(mi_Click);
    }
        _servisAdi = “”;
}

Menu item’ın (mi) click event’inde ise class level ManagementObjectSearcher nesnesinin (mos) Query property’sine servisler içinde Caption property’si _servisAdı değişkeninin değerine eşit olan servisi çeken sorguyu atıyoruz. Ardından ManagementObjectSearcher’ın Get metoduyla elde ettiğimiz ManagementObject’in (mo) InvokeMethod metoduna _servisDurumu değişkenini geçirerek servisi çalışma durumuna göre durdurup / başlatıyoruz. Son olarak da listemizi yenilemek için ServisleriGetir metodunu çağırıyoruz:





void
mi_Click(object sender, EventArgs e)
{
    mos.Query = new ObjectQuery(“Select * from Win32_Service WHERE Caption = ‘” + _servisAdi + “‘”);
    ManagementObjectCollection
moc = mos.Get();

    foreach
(ManagementObject mo in moc)
    {
        mo.InvokeMethod(_servisDurumu, null, null);
    }

    ServisleriGetir();
}


 



Bu kısımda ise tüm WMI Class’larının özelliklerinin açıklamalarıyla beraber nasıl listelenebileceğini inceleyelim. Bunun için öncelikle bir uygulama yazıyoruz ve uygulamada bulunan combobox içine tüm WMI Class’larının isimlerini yüklüyoruz. Daha sonrasında ise bu combobox’tan seçilmiş olan class’a ait property’leri, bu property’lerin tiplerini ve açıklamalarını bir datatable’a doldurup girdde göstereceğiz.
Bunun için öncelikle combobox’ın SelectedIndexChanged event’ını aşağıdaki gibi yazıyoruz:






private void cmbClasses_SelectedIndexChanged(object sender, EventArgs e)
{
    string
txt = cmbClasses.SelectedItem.ToString();
    ManagementClass
m = new ManagementClass(txt.Substring(txt.IndexOf(“-”)+1).Trim());
    m.Options.UseAmendedQualifiers = true;

    DataTable
dt = new DataTable();
    dt.Columns.Add(“Name”, typeof(string));
    dt.Columns.Add(“Type”, typeof(string));
    dt.Columns.Add(“Description”, typeof(string));

    foreach
(PropertyData pd in m.Properties)
    {
        DataRow
dr = dt.NewRow();
        dr["Name"] = pd.Name;
        dr["Type"] = pd.Type.ToString();

       
try
       
{
            dr["Description"] =pd.Qualifiers["Description"].Value.ToString();
        }
        catch
(Exception ex)
        {
       
        }
        dt.Rows.Add(dr);
    }
    grdDescription.DataSource = dt;
}


Bu event’in içinde ise ilk önce ManagementClass tanımlarken constructor’unda WMI class’ının adını string olarak geçiyoruz. daha sonrasında ise dolduracağımız datatable şemasını oluşturuyor ve classda bulunan propert’ler içinde Management Class nesnesine ait Properties collection’unda bulunan her bir PropertyData nesnesi için datatable’ımıza row’ları eklemeye başlıyoruz. PropertyData nesnesinin Name property’si ile mevcut property’nin adını, Type property’si ile tipini alabiliyoruz. Bu property’e ait açıklamayı alabilmek için ise PropertyData nesnesindeki Qualifiers propertsinde bulunan Description değerini kullanabiliriz. Ancak bu değer her property’de dolu olmadığı için try catch bloğu içine yazılmıştır. Oluşturduğumuz bu datatable’ı DataGridView nesnesine bağlayarak kullanıcıya gösterilmesini sağlıyoruz.


 



Makale serimin bu son bölümünde .NET ile WMI bileşenlerinin nasıl sorgulanabileceğine dair bir örnek yaptım. Umarım faydalı olmuştur.


Işıl ORHANEL

    Merhabalar,

    Bilindiği üzere Microsoft SQL Server Reporting Services projelerimiz aracılığı ile toplanan verilerin anlam ifade edebilmesi, karar alma mekanizmalarında rol oynayabilmesi için gerekli raporları kolay ve hızlı bir biçimde oluşturmak amacıyla Microsoft tarafından sunulan bir araçtır. Reporting Services ile raporlarımızı grafik,tablo veya matrix tablo formatlarında ister Web ister Windows uygulamalarımızda kullanabiliriz. Bu makalemde ise Reporting Services ile raporlarımıza kod ekleyerek veya derlenmiş kod kütüphanelerini referans göstererek raporlarımızı nasıl zenginleştirebileceğimizi anlatacağım. Bu tip bir işleme gitmemizi gerektirecek koşullar, veritabanı veya Reporting Services tarafından sunulan fonksiyonlar veya özellikler ile istediğimiz sonucu elde edemeyeceğimiz durumlardır. Örneklendirmek gerekirse karışık döngüler ve karar mekanizması içeren sonuçlar, veritabanında şifreli olarak duran verilerin kullanıcıya raporda sunulması gibi durumlar gösterilebilir.


    Reporting Services’de raporlarımıza kod ekleyebileceğimiz iki yöntem mevcuttur. Bunlardan ilki custom code yazmak diğeri ise daha önceden derlenmiş bir kütüphaneyi referans göstermektir.

    Visual Studio’da yeni bir report server project oluşturalım (New Project -> Business Intelligence Projects -> Report Server Project) ve Reports klasörüne yeni bir rapor ekleyelim.

    Eklediğimiz raporda ilk olarak nasıl embedded kod kullanabileceğimize dair bir örnek yapalım.

    Örnekte kendisine parametre olarak verilen string tipinde değişkeni ters olarak yazan bir fonksiyonu raporumuza dahil edelim. Bunun için Report Properties ekranındaki Code sekmesini seçerek aşağıdaki kodu ekrandaki textbox’ın içine yazıyoruz:








Public Function TersineCevir(yazi as String) as String
Dim c as Char() = yazi.ToCharArray()
Array.Reverse(c)
Dim TersYazi as String = New String(c)
Return TersYazi
End Function


    Bu ekrandaki textbox’a class veya fonksiyon yazılabilir fakat dikkat edilmesi gereken nokta kodun sadece VB.NET ile yazılmış olması gerektiğidir.Kodumuzu ekrana yazdıktan sonra OK tuşuna basarak pencereyi kapıyoruz.

    Kodu ekleyip kaydettikten sonra sıra kullanımına geldi. Report Parameters ekranını kullanarak rapora bir tane parametre ekleyeceğim ve oluşturduğum parametreyi TersineCevir fonksiyonuna parametre olarak verip tersine çevrilmiş yazıyı textbox’da göstereceğiz.

    İlk olarak rapor parametremizi oluşturalım:



    Report Parameters ekranında string tipinde Yazi değişkenini raporumuza parametre olarak ekledik. Şimdi Layout ekranına bir textbox ekliyoruz ve Value property’sine aşağıdaki ifadeyi yazıyoruz (Textbox’a sağ tıkladığımızda açılan menüdeki Expression…’a tıklayarak Edit Expression ekranını kullanarak da textbox’a istediğimiz değeri atayabiliriz):






=Code.TersineCevir(Parameters!Yazi.Value)



    Raporun Preview ekranına geçtiğimizde göreceğimiz Yazı textbox’ına yazdığımız yazı View Report butonuna bastığımızda raporumuzda ters olarak yazılacaktır:


 



    Görüldüğü üzere RS’te embedded kod kullanımı son derece basit bir şekilde yapılabilmektedir.

    Şimdi ise bahsettiğimiz ikinci yöntemi kullanarak raporlarımızda bir kod kütüphanesini nasıl kullanabileceğimize bakalım.

    Yapacağım örnekte SQL veritabanında şifreli şekilde tutulan verileri bir crypto dll’ini kullanarak raporumuzda decrypt edilmiş halde nasıl gösterebileceğimizden bahsedeceğim.

    İlk olarak rapor projemizin Shared Data Sources klasörüne veritabanına bağlanabilmemiz için yeni bir data source ekliyorum:




    Şifreler veritabanında aşağıda da görüldüğü gibi KisiId, KisiAdi ve Sifre alanlarını barındıran Kisiler adlı bir tablo bulunuyor. Sifre alanındaki veriler encrypt edilmiş halde veritabanında tutuluyor. Bizim yapacağımız şey ise bu verileri decrypt edilmiş halde raporumuzda sunmak olacak.



    Raporumuzda kullanacağım Crypto.dll dosyası Encrypt ve decrypt adında string tipinde veri döndüren iki fonksiyondan oluşmakta. Öncelikle bu dll’i Vısual Studio’nun \Common7\IDE\PrivateAssemblies klasörü altına kopyalamamız gerek. (Örneğin C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies)

    Ayrıca,
raporumuzu uzaktaki
bir makinaya deploy ederken kullandığımız dll’leri makinadaki SQL server’ın kurulduğu lokasyondaki MSSQL.3\Reporting Services\ReportServer\bin klasörü altına kopyalamamız gerekir. (Örneğin C:\Program Files\Microsoft SQL Server\MSSQL.*\Reporting Services\ReportServer\bin)

    Ardından ise raporumuzun Report Properties ekranındaki References sekmesinde bu dll’i refererans olarak gösteriyoruz:


 



    Bu noktada dikkat edilmesi gereken husus dll’i referans verirken mutlaka \Common7\IDE\PrivateAssemblies klasöründen referans verilmesi gerektiğidir. Ayrıca dll dosyasındaki her değişiklikten sonra dll bu klasör altından da güncellenmelidir.

    Şimdi sırada aynı ekrandaki Classes alanına fully qualified şekilde dll dosyası içindeki class isimlerini ve class’ların alınacak olan instance’larının isimlerini yazmaya geldi. Bizim dll dosyamız içindeki class’ın adı cryptography ve instance adını da cryp olarak vererek classes alanına eklemeyi yapıyorum:


 



    Artık raporumuzda dll’imizi kullanmaya hazırız. Raporumuzun Data sekmesinde Sifreler veritabanının Kisiler tablosundaki verileri getirecek olan dataset’i oluşturuyoruz:




    Ardından da Layout sekmesine geçip raporumuza bir tablo ekliyoruz ve dataset’te çektiğimiz verileri tablonun field’larına atıyoruz:


    Resimde görüldüğü gibi tabloda şifreleri göstereceğimiz alana aşağıdaki kodu yazarak eklediğimiz dll’deki decrypt fonksiyonunu çağırdık:





=Code.cryp.decrypt(Fields!Sifre.Value)


    Raporumuzun Preview sekmesine geçip View Report butonuna bastığımızda veritabanındaki şifreler decrypt edilmiş şekilde görülecektir:


 



    Bu makalemde RS ile raporlarımızda embedded code ve dll kullanımını anlattım.
   
    Görüldüğü gibi son derece basit bir şekilde raporlarımıza daha fazla fonksiyonalite ve daha karmaşık işlemler yapabilme yetisini dll ve kod kullanarak kazandırabiliriz.

    Umarım faydalı olmuştur.

    Işıl ORHANEL

    Hepimizin de bildiği gibi günlük hayatımızda birçok alanda şifreler ile çeşitli işlemler yapıyoruz. Bu yüzden bize özel olan verilerin özelliğini ve gizliliğini korumak için de kullanmak üzere seçtiğimiz şifrelerin güvenilir olması büyük önem taşımaktadır. Şifrelerin güvenilir olması için de hem zor tahmin edilecek özellikte olmaları hem de bazı kötü niyetli kişiler tarafından programatik olarak zor kırılabilir özellikte olmaları gerekir. Bu yüzden şifreleri belirlerken anlamlı ve/veya belirli bir mantığa göre sıralanmış harf/rakam öbeklerinden ziyade bir anlamı olmayan ve harf/rakam/simge kombinasyonlarından oluşan anlamsız kelimeler kullanmak çok önemlidir. Bu anlamsız harf öbeklerini uygulamalarımızda Guid.NewGuid() fonksiyonunu kullanıp Guid (Globally Unique Identifier) oluşturarak veya SQL’de newid() fonksiyonu ile oluşturabiliriz.

    Bu makalemde ise ben kullanıcının önceden belirlediği kriterlere göre şifre oluşturan bir class yazacağım. Bu kriterler şifrede kullanılacak olan harf, rakam ve sembol sayıları olacak ve kullanıcı şifre oluşturulurken kullanılacak olan harf, rakam ve sembolleri istediği taktirde belirleyebilecek. Şifre oluşturan class’ı yazdıktan sonra da örnek bir uygulamada kullanımını inceleyeceğiz.

    Şifre oluşturacak olan class’ımızı yazmaya başlamadan önce class’ın çalışma mantığını inceleyelim. Yazacağımız class HarfSayisi, SembolSayisi ve RakamSayisi property’leri set edildiğinde SifreyiOlustur fonksiyonu ile bizim için belirlemiş olduğumuz sayıda karakter içeren bir şifre oluşturacak. Aynı zamanda şifrede yeralmasını istenilen harfleri, sembolleri ve rakamları set edip, şifre oluşturulduğunda sadece belirlenenlerin kullanılması da mümkün olacak.

    Aşağıda PasswordGenerator class’ının öğeleri listelenmiştir:

Property’ler






















RakamSayisi (int)


Şifrede kaç tane rakam kullanılacağının set edildiği property’dir.


HarfSayisi (int)


Şifrede kaç tane harf kullanılacağının set edildiği property’dir.


SembolSayisi (int)


Şifrede kaç tane sembol kullanılacağının set edildiği property’dir.


Harfler (string[])


Şifre oluşturulurken hangi harflerin kullanılacağının set edildiği property’dir.


Semboller (string[])


Şifre oluşturulurken hangi sembollerin kullanılacağının set edildiği property’dir.


Rakamlar (string[])


Şifre oluşturulurken hangi rakamların kullanılacağının set edildiği property’dir.


Constructor’lar










PasswordGenerator()


 


PasswordGenerator(int RakamSayisi, int HarfSayisi, int SembolSayisi)


 


Fonksiyon







SifreyiOlustur (string)


Şifreyi generate eden fonksiyon


    Aşağıda görüldüğü üzere Harfler, Semboller ve Rakamlar property’leri default olarak değer taşımaktadırlar fakat bu property’ler readonly tanımlanmamışlardır, kullanıcı tarafından değer atanabilir:





private string[] _Harfler = new string[] { “a”, “b”, “c”, “d”, “e”, “f”, “g”, “h”, “i”, “j”, “k”, “l”, “m”, “n”, “o”, “p”, “r”, “s”, “t”, “u”, “v”, “y”, “z” };
public
string[] Harfler
{
    get { return _Harfler; }
    set
{ _Harfler = value; }
}



private string[] _Semboller = new string[] { “!”, “@”, “#”, “$”, “%”, “,”, “&”, “*” };
public string[] Semboller
{
    get
{ return _Semboller; }
    set
{ _Semboller = value; }
}


private string[] _Rakamlar = new string[] { “0″, “1″, “2″, “3″, “4″, “5″, “6″, “7″, “8″, “9″ };
public string[] Rakamlar
{
    get
{ return _Rakamlar; }
    set
{ _Rakamlar = value; }
}


    PasswordGenerator class’ının diğer property’leri de aşağıdaki şekilde tanımlanmışlardır:






private int _RakamSayisi;
public
int RakamSayisi
{
    get
{ return _RakamSayisi; }
    set
{ _RakamSayisi = value; }
}



private int _HarfSayisi;
public
int HarfSayisi
{
    get
{ return _HarfSayisi; }
    set
{ _HarfSayisi = value; }
}


private int _SembolSayisi;
public
int SembolSayisi
{
    get
{ return _SembolSayisi; }
    set
{ _SembolSayisi = value; }
}


    PasswordGenerator constructor’ları aşağıdaki gibi tanımlanmıştır:






public PasswordGenerator()
{

}



public PasswordGenerator(int RakamSayisi, int HarfSayisi, int SembolSayisi)
{
    _RakamSayisi = RakamSayisi;
    _HarfSayisi = HarfSayisi;
    _SembolSayisi = SembolSayisi;
}


    Aşağıda kodu bulunan SifreyiOlustur fonksiyonunu ile şifre oluşturulabilir:






public string SifreyiOlustur()
{
    Random
rnd = new Random();
    List
<string> sifre = new List<string>(_RakamSayisi + _HarfSayisi + _SembolSayisi);
    for
(int ir = 0; ir < _RakamSayisi; ir++)
    {
        sifre.Add(_Rakamlar[rnd.Next(0, _Rakamlar.Length)]);
    }
    for
(int ih = 0; ih < _HarfSayisi; ih++)
    {
        sifre.Add(_Harfler[rnd.Next(0, _Harfler.Length)]);
    }
    for
(int i = 0; i < _SembolSayisi; i++)
    {
        sifre.Add(_Semboller[rnd.Next(0, _Semboller.Length)]);
    }



string olusturulanSifre = “”;

while
(sifre.Count > 0)
{
    int
rand = rnd.Next(0, sifre.Count);
    olusturulanSifre += sifre[rand];
    sifre.RemoveAt(rand);
}


return olusturulanSifre;
}



    Şifreyi oluştur fonksiyonunda ilk olarak Random bir değişken tanımlıyoruz. Bu random değişken Harfler, Rakamlar ve Semboller array’lerindeki elemanların random index’lerindeki elemanları oluşturacağımız şifreye atayacak.

    Ardından ise string tipinde veri taşıyacak olan bir List tanımlıyoruz ve uzunluğunu şifredeki rakam, harf ve sembollerin sayılarının toplamı olarak belirliyoruz.

    Sonra üç ayrı for döngüsünde belirlenmiş olan rakam sayısı, harf sayısı ve sembol sayısı kadar karakteri class’ın Harfler, Rakamlar ve Semboller array’lerinden random olarak seçip sifre List’ine ekliyoruz.

    Sonrasında ise string tipinde olusturulanSifre değişkenini tanımlıyoruz ve bir while döngüsünde sifre List’indeki elemanlar bitene kadar List’in random indexlerindeki karakterleri olusturulanSifre değişkenine atıyoruz ve atadığımız elemanı List’ten çıkarıyoruz. Bunu yapmamızdaki amaç oluşturduğumuz şifredeki rakam, harf ve sembollerin harf harf, rakam rakam veya sembol sembol gruplanmış şekilde değil, birbirlerine karışmış şekilde string değişkene yerleşmelerini sağlamak.

    Son olarak da fonksiyonumuzu olusturulanSifre değişkenini döndürecek şekilde tamamlıyoruz.

    Şimdi oluşturduğumuz PasswordGenerator class’ını bir windows uygulaması içinde kullanalım. Bir Windows formunu aşağıdaki şekilde tasarlayalım:



    Formdaki textbox’lara şifrede kullanılacak olan öğelerin sayılarını yazdıktan sonra Oluştur butonuna basıldığında formdaki label’da oluşturulan şifre görüntülenecek. Şimdi Oluştur butonunun Click event’ine aşağıdaki kodu yazalım:






private void btnOlustur_Click(object sender, EventArgs e)
{

    if
(txtHarfSayisi.Text != “” || txtRakamSayisi.Text != “” || txtSembolSayisi.Text != “”)
    {

        PasswordGenerator
pg = new PasswordGenerator();
        pg.HarfSayisi = Convert.ToInt32(txtHarfSayisi.Text);
        pg.RakamSayisi = Convert.ToInt32(txtRakamSayisi.Text);
        pg.SembolSayisi = Convert.ToInt32(txtSembolSayisi.Text);
        pg.Semboller = new string[] {“#”, “@”, “!”, “*” };
        lblSifre.Text = pg.SifreyiOlustur();
    }
}



    PasswordGenerator class’ının bir instance’ını aldıktan sonra HarfSayisi, RakamSayisi ve SembolSayisi property’lerine textbox’lardaki değerleri atıyoruz. Semboller property’sinde ise kullanılacak olan #, @, ! ve * sembollerini tanımlıyoruz. lblSifre’nin text property’sine de SifreyiOlustur fonksiyonunun geri döndürdüğü değeri atıyoruz.

    Uygulamamızda butona bastığımızda şifremiz aşağıdaki gibi oluşturulacaktır:



    Bu makalemde programatik olarak şifre oluşturmaktan bahsettim. Umarım faydalı olmuştur.

    Işıl ORHANEL

    Merhaba,


    Bu makalemde sizlere FileSystemWatcher isimli component’tan bahsedeceğim. Bu component adından da anlaşılacağı gibi File System üzerinde gerçekleşebilecek çeşitli olayları izleyebilme özelliğine sahiptir. Bu izleme tipi genellikle dosyaların bir uygulama tarafından takip edilmesi veya File System üzerindeki değişikliklerin takip edilmesi amacıyla kullanılır. Bu uygulamaların ne tip uygulamalar olduğunu örneklememiz gerekir ise; File System üzerindeki değişikliklerin takip edilmesi için basit bir ftp tarzı uygulama, dosyaların takip edilmesi için ise belirli bir klasöre dosya kopyalandıktan(ftp ile olabilir) sonra devreye girip bu dosyanın içeriğini batch bir şekilde işleyip uygulamamıza import eden bir listener akla ilk gelen örnekler arasındadır. Çok kısaca ve basitçe özetleyecek olursak bir klasör içindeki dosyalar, klasörler ve alt klasörlerde meydana gelen oluşturulma, isim değiştirme, silinme gibi değişiklikleri FileSystemWatcher class’ı yardımıyla kolaylıkla takip edebiliriz. Peki bu takip işlemini yaparken faydalanacağımız event’lat metodlar veya propertyler nelerdir? Öncelikle bunları inceleyelim.

    FileSystemWatcher class’ı aşağıdaki öğelerden meydana gelmiştir:



FileSystemWatcher class’ının belli başlı property, event ve metodlarının açıklamaları aşağıda listelenmiştir:

Property’ler



















EnableRaisingEvents (bool)


Uygulamamızda kullandığımız FileSystemWatcher nesnesinin aktif olup olmadığının set edildiği property’dir. Eğer true olarak set edilmişse component’in eventleri tetiklenecektir, false ise event’ler tetiklenmeyeceğinden dosyalardaki değişiklikler izlenmeyecektir.


Filter (string)


Hangi dosyalardaki değişikliklerin izleneceğinin set edildiği property’dir. Belirli bir dosyayı izlemek için Filter property’sine dosyanın adı verilebilir. Belirli türde bir dosyayı izlemek için örneğin text file’ları izlemek için Filter property’si “*.txt” olarak set edilebilir. Belirlenen klasördeki tüm dosyalar izlenmek istenirse de bu property “*.*” olarak set edilebilir.


IncludeSubdirectories (bool)


Bir klasördeki alt dizinlerin de FileSystemWatcher ile izlenmesi isteniyorsa IncludeSubdirectories property’si true olarak set edilir.


NotifyFilter (NotifyFilters)

İzlenecek değişikliklerin tanımlandığı propertydir.

Path (string)


İzlenecek olan dizinin veya dosyanın yolunun tutulduğu property’dir.


Method’lar






WaitForChanged


WaitForChangedResult nesnesini döndüren iki overload’ı olan bir metoddur. WaitForChangedResult nesnesi izlenen dosya ile ilgili oluşmuş olan değişikliklere ait bilgilerin tutulduğu bir nesnedir. WaitForChanged metodunun da ilk overload’ı WatcherChangeTypes enum’unda tutulan dosyada hangi tür değişikliğin olacağı verilerek çağırılır. İkinci overload’ı ise hangi tür değişikliğin olacağının yanısıra timeout’a düşmeden önce ne kadar bekleneceğinin süresi milisaniye tipinden verilerek çağırılır.


Event’ler















Changed


Path property’sinde belirtilmiş olan yerdeki dizinde veya dosyada bir değişiklik meydana geldiğinde tetiklenir. Bu eventta Changed, Created ve Deleted eventlarıda yakalanabilir.


Created


Path property’sinde belirtilmiş olan yerde yeni bir dizin veya dosya oluşturulduğunda tetiklenir.


Deleted


Path property’sinde belirtilmiş olan yerde yeni bir dizin veya dosya silindiğinde tetiklenir.


Renamed


Path property’sinde belirtilmiş olan yerdeki dizinin veya dosyanın adı değiştiğinde tetiklenir.


    Görüldüğü gibi FileSystemWatcher nesnesi ile dosya ve dizinlerde meydana gelen değişiklikleri yukarıdaki propertyleri set ettiğimiz ölçüde fırlatılabilecek eventlar yardımıyla izleyebiliriz.

    Şimdi belirlemiş olduğumuz bir klasörde meydana gelen değişikliklerin kaydını tutan örnek bir uygulama yazalım. Uygulamamız bir windows service olsun ve OnStart metodunda FileSystemWatcher nesnemizi oluşturup property’lerini tanımlayalım:






protected override void OnStart(string[] args)
{
        FileSystemWatcher
fsw = new FileSystemWatcher();
        fsw.Filter = “*.*”;
        fsw.IncludeSubdirectories = true;
        fsw.NotifyFilter = NotifyFilters.Attributes | NotifyFilters.CreationTime | NotifyFilters.DirectoryName | NotifyFilters.FileName;
        fsw.Path = @”C:\fswMakale;
        fsw.Created += new FileSystemEventHandler(fsw_Created);
        fsw.Deleted += new FileSystemEventHandler(fsw_Deleted);
        fsw.Renamed += new RenamedEventHandler(fsw_Renamed);


        fsw.EnableRaisingEvents = true;       
}


    Kodda da görüldüğü gibi FileSystemWatcher nesnemizin Filter property’sine tüm dosyaları izlemesi için *.* ifadesini atadık.

    İzlediği dosya yolunda bulunan alt klasörleri de izlemesi için
IncludeSubdirectories property’sini true olarak set ettik.

    Hangi tür değişikliklerin izleneceğinin set edildiği NotifyFilter property’sine ise NotifyFilters enum’unun Attributes, CreationTime, DirectoryName, FileName öğelerini atadık.

    Uygulamamızın dinleyeceği dosyaların ve klasörlerin bulunduğu dosya yolunu da Path property’sinde set ediyoruz.

    Ardından Created, Deleted ve Renamed event’lerini çağırıyoruz ve FileSystemWatcher nesnemizi EnableRaisingEvents property’sini true olarak set ederek aktif hale getiriyoruz.


    Şimdi sırasıyla OnStart metodunda çağırdığımız Created, Deleted ve Renamed event’lerinde neler yapacağımıza bakalım:





void fsw_Created(object sender, FileSystemEventArgs e)
{
        StreamWriter
sw = new StreamWriter(@”C:\fswMakaleLog.txt”, true);
        sw.WriteLine(“* Dosya / Klasör: “ + e.Name + ” -> “ + DateTime.Now.ToString() + ” tarihinde oluşturuldu.”);
        sw.Close();
}


    Yeni bir dosya ya da klasör oluşturulduğunda fswMakaleLog.txt dosyasına aşağıdaki gibi bir kayıt yazılacak:

    * Dosya / Klasör: New Text Document.txt -> 12.04.2007 22:42:51 tarihinde oluşturuldu.






void fsw_Deleted(object sender, FileSystemEventArgs e)
{
        StreamWriter
sw = new StreamWriter(@”C:\fswMakaleLog.txt”, true);
        sw.WriteLine(“* Dosya / Klasör: “ + e.Name + ” -> “ + DateTime.Now.ToString() + ” tarihinde silindi.”);
        sw.Close();
}


    Bir dosya silindiğinde fswMakaleLog.txt dosyasına aşağıdaki gibi bir kayıt yazılacak:

    * Dosya / Klasör: IO.txt -> 12.04.2007 23:05:17 tarihinde silindi.






void fsw_Renamed(object sender, RenamedEventArgs e)
{
        StreamWriter
sw = new StreamWriter(@”C:\fswMakaleLog.txt”,true);
        sw.WriteLine(“* Dosya / Klasör: “ + e.OldName + ” -> “DateTime.Now.ToString() + ” tarihinde “ + e.Name + ” olarak değiştirildi.”);
        sw.Close();
}


    Bir dosyanın ismi değiştirildiğinde ise fswMakaleLog.txt dosyasına aşağıdaki gibi bir kayıt yazılacak:

    * Dosya / Klasör: EskiDosyaAdi.txt -> 12.04.2007 23:08:22 tarihinde YeniDosyaAdi.txt olarak değiştirildi.

    Bu yazdığımız kodu bir windows servis projesi içine implement etmemiz halinde artık Windows servisimiz C sürücüsünün altındaki fswMakale klasörünü dinleyecek ve yine C sürücüsünün altındaki fswMakaleLog.txt dosyasında klasörde meydana gelen değişikliklerin kayıtlarını yazacak. Servisi kurup çalıştırdıktan ve belirlediğimiz klasörde dosya oluşturma, silme, yeniden isimlendirme gibi bazı işlemleri yaptıktan sonra aşağıdaki gibi bir log dosyamız olacak:



    Bu makalemde sizlerle beraber FileSystemWatcher component’ini inceleyerek bu bileşen ile yapabileceğimiz işlemleri ve uygulamalarımıza katabileceğimiz ekstra özellikleri incelemiş olduk. Umarım faydalı olmuştur.


    Işıl ORHANEL

    Merhabalar,

    Bu makalemde textbox’dan oluşan bir Windows uygulamasında hergün birçok kere yaptığımız iki işlemi C# ile kendi uygulamamız için yazacağız. Bu işlemlerden ilki bir text dosyasına sağ tıkladığımızda açılan context menüde yeralan Open With… öğesine tıkladığmızda kendi uygulamamızı seçerek text dosyasının uygulamamız içindeki TextBox içinde açılmasını sağlamak olacak. Diğeri ise bir text dosyasını uygulamamız üstüne sürükleyip bıraktığımızda içeriğinin uygulamamızda görüntülenmesi olacak.

    İlk olarak text dosyalarını Open With aracılığıyla uygulamamızda açtığımızda içeriklerinin uygulamamızda görüntülenmesini sağlayan kodu yazalım.






static class Program
{
    [STAThread]
    static
void Main(string[] args)
   
{
        string
fileName = “”;
        if
(args.GetLength(0) > 0)
        {
            fileName = args[0];
        }
        Application
.EnableVisualStyles();
        Application
.SetCompatibleTextRenderingDefault(false);
        Application
.Run(new Form1(fileName));
    }
}



    Görüldüğü üzere uygulamamızdaki Program.cs class file’ında bazı değişiklikler yaparak başladık. Uygulama başlarken Main metodunda args string array’ini parametre olarak geçiriyoruz. Bu array’in ilk öğesinde (args[0]) Open With ile açılan dosyanın ismi tutulacak. Metodun başlangıcında string tipinde fileName değişkenini tanımlıyoruz. args array’inin ilk sırasında eleman bulunuyorsa bu elemanın değerini fileName property’sine eşitliyoruz.

    Ardından ise formumuzun string tipinden parametre alan ikinci constructor’ı ile uygulamamızı çalıştırıyoruz.

    Formumuzun string tipinden değişkeni parametre alan constructor’ına ise aşağıdaki kodu yazıyoruz:







public
Form1(string fileName)
{
    InitializeComponent();
    if
(fileName != “”)
    {
       
StreamReader sr = new StreamReader(fileName, Encoding.GetEncoding(“iso-8859-9″));
        txtYazi.Text = sr.ReadToEnd();
        sr.Close();
    }
}



    Formun bu constructor’ında fileName yani sağ tıklayıp Open With ile açmak istediğimiz dosyanın yolu boş gelmemişse StreamReader nesnesine fileName parametresini geçirerek dosyayı okuyup, formumuzdaki TextBox’a yazdırıyoruz.

    Uygulamamızı derledikten sonra herhangi bir text dosyasına sağ tıklayıp program listesinden uygulamamızı seçtiğimizde ve açtığımızda text dosyasının içeriğini uygulamamızdaki textbox’ta görebiliriz:



   Şimdi sıra uygulamamıza başka bir text dosyasını sürükleyip bıraktığımızda dosya içeriğinin textbox’ta görüntülenmesini sağlamaya geldi. Kodlamaya geçmeden önce formumuzdaki textbox’ın AllowDrop property’sini true olarak set etmemiz gerekiyor. Ardından ise textbox’ın DragDrop ve DragEnter event’lerini handle ediyoruz. Sürükleyip bırakılan dosyanın içeriğini almak için textbox’ın DragDrop ve DragEnter event’lerini handle edeceğiz. Fakat öncesinde Windows formlarında sürükleyip bırakma ve clipboard’dan kopyalama-yapıştırma işlemlerinin yapılmasını sağlayan DataObject class’ından bahsedeceğim.

    C#’da DataObject class’ı biraz önce de bahsettiğim gibi clipboard işlemleri ve sürükle-bırak işlemlerini gerçekleştirmemizi sağlayan class’tır. IDataObject interface’ini implement etmiştir ve dosya sürükleme bırakma işlemi yapıldığı zaman sürükleyip bırakılan dosyaların isimlerinin tutulduğu bir array’i taşır. DataObject class’ının DataFormats class’ı ile de hangi türde dosya ile işlem yaptığımızı belirtebiliriz. DataObject nesnesinde sürükleme bırakma veya kopyalama yoluyla dosya taşımak için SetData metodu veya DataObject’in constructor’ı kullanılır. DataObject’in taşıdığı verilere erişmek içinse GetData metodu kullanılır.


    Bu açıklamalardan sonra ilk olarak txtYazi textbox’ının DragEnter event’ini handle ederek kodlamaya başlayalım. DragEnter event’i herhangi bir sürükleme-bırakma işlemi başlamışsa ve fare imleci ilgili kontrole girmişse tetiklenir. DragEnter event’i handle edilmişse kullanıcı kontrol üstüne bir dosyayı sürüklediğinde kontrolün sürükleme-bırakma işlemine uygun olduğuna dair imleç oluşur. Bu event’in parametrelerinden DragEventArgs’ın Data property’si IDataObject tipindendir.
   
    Bizim bu event tetiklendiği zaman yapmamız gereken şey GetDataPresent fonksiyonu ile DataObject içinde taşınan veri sürükleme bırakma sonucu oluşmuşsa DragEventArgs’ın Effect property’sini DragDropEffects.Copy olarak set etmek olacaktır.
DragDropEffects enumeration’ı bir dosya sürüklenip bırakıldığı zaman bırakılacağı yere ne şekilde taşınacağının set edilmesini sağlar. Biz örneğimizde kopyalanması için Copy DragDropEffect’ini kullandık. Aksi durumlar için de Effect property’sini DragDropEffects.None olarak set ettik:





private void txtYazi_DragEnter(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.FileDrop))
    {
        e.Effect = DragDropEffects.Copy;
    }
   
else
   
{
        e.Effect = DragDropEffects.None;
    }
}



    Şimdi de sırada txtYazi’nin DragDrop event’ini handle etmek var. Kullanıcı dosyayı kontrol üzerindeyken bırakırsa DragDrop event’i tetiklenir. Biraz önce DataObject class’ının sürüklenip bırakılan verilerin tutulduğu bir array taşıdığından bahsetmiştim. Bizim bu event’i handle ederken yapmamız gereken de bu array’de tutulan veriyi GetData fonksiyonuyla almak olacaktır. Ardından da bir array tanımlayıp bu veriyi de array’e atadıktan sonra bu array’in taşıdığı dosyayı Array nesnesinin GetValue fonksiyonuyla alıyoruz. Dosyayı StreamReader ile okuyup txtYazi’nin Text property’sine atıyoruz:







private void txtYazi_DragDrop(object sender, DragEventArgs e)
{
   
//txtYazi’nin AllowDrop property’si true olmalı!!
   
Array a = (Array)e.Data.GetData(DataFormats.FileDrop);
    if
(a != null)
    {
        string
s = a.GetValue(0).ToString();
        StreamReader
sr = new StreamReader(s);
        txtYazi.Text = sr.ReadToEnd();
        sr.Close();
        this
.Activate();       
    }
}



    Bu makalemde C# ile Open With context menü öğesinin kullanımı ve sürükle-bırak işlemlerinin nasıl yapıldığını açıklamalar ve örnekler ile anlatmaya çalıştım. Örneklerde de görüldüğü gibi oldukça rahat bir biçimde bu iki işlemi Windows uygulamalarımızda kullanabiliriz. Faydalı olmasını umarım.

Işıl ORHANEL

ClickOnce ve SystemDeployment hakkında yazdığım dökümana buradan ulaşabilirsiniz.

ClickOnceVeSystemDeployment

Merhabalar,

Bugünden itibaren bu sayfalarda iş yaşamım ağırlıklı olmak üzere tecrübelerimi, başımdan geçenleri sizlerle paylaşacağım.

Gün geçtikçe daha faydalı ve daha güzel yazılarla dolu olacak bir blog’un ilk adımlarını attığıma inanıyorum.

Tekrar görüşmek üzere… :)

    Merhabalar,

    Bu makalemde internet sitelerinde form doldururken veya login olurken flood saldırılarına karşı kullanımı gittikçe artmaya başlayan güvenlik resimlerinin C# ile nasıl oluşturulabileceğine dair örnek bir uygulama yapacağım. Ardından da örnek bir ASP uygulamasında kullanımını özetleyeceğim. Uygulamamız bittiğinde aşağıdaki resme benzer resimler oluşturabilir hale gelecek ve böylece sitemizdeki formlar verilerin otomatik olarak post edilmesini sağlayan programlar ile yapılan flood saldırılarına karşı korunacak:

Resimde rastgele seçilecek olan dört arkaplana yerleştirilmiş altı rakam ve/veya harften oluşan bir yazı, bir poligon ve beş çizgi olacak ve bu bahsedilen öğelerden hiçbiri resmin sınırlarının dışında kalmayacak.

Şimdi önce çizgileri ve poligonu oluşturduğumuz CizgilerVePoligonuOlustur metodunu inceleyelim:

        private void CizgilerVePoligonuOlustur(Image img, Random rnd)
{
Graphics
g = Graphics.FromImage(img); //Graphics nesnemizi oluşturuyoruz.
//ilk olarak 5 tane çizgimizi oluşturalım:
for (int i = 0; i < 5; i++)
{
int
x1 = rnd.Next(0, img.Width);
int
x2 = rnd.Next(0, img.Width);
int
y1 = rnd.Next(0, img.Height);
int
y2 = rnd.Next(0, img.Height);
Pen
p2 = new Pen(Color.FromArgb(rnd.Next(0, 255), rnd.Next(0, 255), rnd.Next(0, 255)), 3);
g.DrawLine(p2, x1, y1, x2, y2);
}
//poligonu oluşturalım:
List<Point> points = new List<Point>();
            for (int i = 0; i < rnd.Next(3, 10); i++)
{
Point
po = new Point(rnd.Next(0, img.Width), rnd.Next(0, img.Height));
points.Add(po);
}
Pen
p = new Pen(Color.FromArgb(rnd.Next(0, 255), rnd.Next(0, 255), rnd.Next(0, 255)), 2);
g.DrawPolygon(p, points.ToArray());
}

    Metoddaki ilk döngüde 5 Graphics nesnesinin DrawLine metodunu kullanarak 5 tane çizgi oluşturacağız. Bu yüzden öncelikle metoda parametre gönderdiğimiz Image tipinden olan img değişkeni ile Graphics nesnemizi oluşturuyoruz (g).

DrawLine metodunun overload’larından bir tanesini kullanarak da çizgilerimizi oluşturmaya başlayacağız. Bunun için çizginin renginin ve kalınlığının belirlendiği bir Pen nesnesini p2 değişkeni ile tanımlıyoruz. Renklerin random olarak tanımlanması için Color.FromArgb metodunun içinde random olarak 0-255 değerleri arasında red, green ve blue değerlerini atıyoruz.

Çizginin başlayıp biteceği iki noktanın x ve y koordinatlarını oluşturmak için de x1, y1, x2, y2 noktalarını tanımlıyoruz. Burada önemli olan bir nokta çizeceğimiz çizgilerin resmimizin dışında oluşturulmamaları gerektiğidir. Bu yüzden noktalara random değer atarken maximum değerlerine resmimizin genişlik ve yükseklik değerlerini veriyoruz.

Beş çizgiyi oluşturmak için bir for döngüsü içinde 4 koordinatı ve Pen nesnesini (p2) oluşturuyoruz.

    Bir sonraki döngüde ise poligonumuzu oluşturacağız. En az 3, en fazla 10 köşeli bir poligon oluşturacağız ve kaç köşeli olacağı random olarak döngüye girmeden önce belirlenecek.

Döngünün dışında Point nesnesi alan bir list tanımlıyoruz. Döngünün içinde poligonun random olarak belirlenecek köşe sayısı kadar nokta oluşturuyoruz ve tanımladığımız list’e ekliyoruz (points).

    Ardından poligonun rengini ve kenar kalınlığının set edileceği Pen nesnesini (p) tanımlıyor ve Graphics nesnesinin (g) DrawPolygon metod’u ile poligonumuzu da oluşturuyoruz.

Güvenlik resminiz için Graphics nesnesinin diğer Draw… ile başlayan metodlarını kullanarak elips, dikdörtgen gibi başka şekiller de oluşturabilirsiniz.

    Artık sıra güvenlik resmimizin yazısını oluşturmaya geldi. Yazıyı oluştururken dikkat edilmesi gereken bazı noktalar bulunmakta:
* Oluşturduğumuz yazının içindeki hiçbir harf resmin sınırları dışına taşmamalı, resmin sınırları dışında bir yerde oluşturulmamalı,
* Herbir harfin lokasyonu diğer harflerinkinden farklı olmalı yani hiçbir harf bir diğeriyle üst üste gelecek şekilde resmin üstüne yazdırılmamalı

    Bu noktaları da gözönünde bulundurursak bize her bir harfin resim üstündeki pozisyonunu ve harfin kendisini taşıyan bir nesne oluşturmak ve bu nesnenin property’leri üzerinden işlemlerimizi gerçekleştirmek faydalı olur. Bu yüzden Nokta adında bir class oluşturuyorum ve bu class’ın taşıyacağı Nokta tipinden değişkenin x property’sini resmimizdeki her harfin bulunduğu noktanın x değerine atamak için oluşturuyorum. Resmimizin içindeki harflerin üstüste gelmelerini engellemek için yani x değeri üstünden ne kadar sonrasına başka bir harfi yerleştirebileceğimizi bilebilmemiz için her harfin bulunduğu noktanın x değerinin yanısıra harfin genişliğini de bilmemiz gerekir. Bunun için Nokta class’ına integer tipinden Width property’sini de eklemek uygun olacaktır. Son olarak güvenlik resminin yazısına ulaşmak için resimlerdeki her harfin kendisini taşıyan bir Text property’si oluşturuyoruz ve class’ımızın x ve width parametrelerini alan constructor’ını oluşturuyoruz:

        public class Nokta

        {
public
Nokta(int x, int width)
{
_x = x;
_width = width;
}
private
int _x;
public
int X
{
get
{ return _x; }
set
{ _x = value; }
}
private
int _width;
public
int Width
{
get
{ return _width; }
set
{ _width = value; }
}
private
string _Text = “”;
public
string Text
{
get
{ return _Text; }
set
{ _Text = value; }
}
}

    Güvenlik resmimize eklediğimiz harflerin üst üste gelip gelmediklerini kontrol etmek için boolean tipinden sonuç döndüren bir fonksiyon yazacağız. Bu fonksiyon parametre olarak Nokta tipinden bir değişken ve Nokta tipinden değişkenlerden oluşan bir List alacak. Nokta tipinden değişken, resmimize yeni eklenecek olan harfin x pozisyonunu, genişliğini ve harfin kendisini taşıyacak ve List de önceden resmimize eklenmiş olan harflerin x pozisyonlarını, genişliklerini ve harflerini taşıyan diğer Nokta tipinden değişkenleri taşıyacak. Bir foreach döngüsü içinde yeni eklenecek olan harf, listedeki diğer harflerle üst üste geliyor mu diye kontrol edilecek.

Bir harfin bir diğer harfle üst üste gelmesi ya da yerlerinin çakışıp çakışmadığını 4 koşulda kontrol edeceğiz. Bunlar:

1- Bir noktanın x değeri diğerinin x değerinden küçükse ve x değeri küçük olan noktanın x değeri ile genişliğinin toplamı, diğerinin x değerinden büyükse (1),(Eklenecek olan harfin x pozisyonu listedeki harflerin birinin x pozisyonundan küçükse ve eklenecek olan harfin x değeri ile genişliğinin toplamı, listedeki harflerin birinin x noktası değerinden büyükse (1),)
2- Bir noktanın x değeri ve genişliği toplamı diğerinin x değerinden büyükse ve x değeri büyük olan noktanın x değeri ve genişliği toplamı diğer noktanın x değeri ve genişliği toplamından büyükse (2),
3- Bir noktanın x değeri diğerinden büyükse ve x değeri büyük olan noktanın x değeri ve genişliği toplamı diğer noktanın x değeri ve genişliği toplamından küçükse (3),
4- Bir noktanın x değeri diğerinden küçükse ve x değeri küçük olan noktanın x değeri ve genişliği toplamı diğer noktanın x değeri ve genişliği toplamından büyükse (4)
bu noktalar çakışıyor demektir ve harflerimizi bu noktalar dışında oluşturmamız gerekiyor demektir. Yazacağımız fonksiyon yukarıdaki 4 koşuldan biri sağlandığında true, hiçbiri sağlanmadığında false değer döndürecektir:

private bool pointCheck(Nokta n, List<Nokta> nList)
{
foreach
(Nokta m in nList)
{
if
(m.X <= n.X && m.Width + m.X >= n.X) //1
{
return
true;
}
else
if (n.X + n.Width >= m.X && m.X + m.Width >= n.X + n.Width) //2
{
return
true;
}
else
if (n.X >= m.X && n.X + n.Width <= m.X + m.Width) //3
{
return
true;
}
else
if (n.X <= m.X && n.X + n.Width >= m.X + m.Width) //4
{
return
true;
}
}
            return false;
}

    Şimdi de güvenlik resminin yazısını oluşturacak kodu inceleyelim:

private string YaziyiOlustur(Image img, Graphics g, Random rnd)
{
string
[] alfabe = new string[] { “a”, “b”, “c”, “d”, “e”, “f”, “g”, “h”, “i”, “j”, “k”, “l”, “m”, “n”, “o”, “p”, “r”, “s”, “t”, “u”, “v”, “y”, “z”, “0″, “1″, “2″, “3″, “4″, “5″, “6″, “7″, “8″, “9″ };
SizeF
sf = new SizeF();
List
<Nokta> plist = new List<Nokta>();
string
s = “”;

            for (int i = 0; i < 6; i++)
{
Font
f = new Font(“Verdana”, rnd.Next(18, 24), FontStyle.Bold);
s = alfabe[rnd.Next(1, 33)];
sf = g.MeasureString(s, f);
PointF
pp = new PointF();
Nokta
n = null;
bool
Available = false;
while
(!Available)
{
pp = new PointF(rnd.Next(0, img.Width – Convert.ToInt32(sf.Width)), rnd.Next(0, img.Height – Convert.ToInt32(sf.Height)));
n = new Nokta(Convert.ToInt32(pp.X), Convert.ToInt32(sf.Width));
n.Text = s;
if
(!pointCheck(n, plist))
{
Available = true;
}
}

                Color colorFore = Color.FromArgb(rnd.Next(0, 255), rnd.Next(0, 255), rnd.Next(0, 255));
Color
colorBack = Color.FromArgb(rnd.Next(0, 255), rnd.Next(0, 255), rnd.Next(0, 255));
System.Drawing.Drawing2D.HatchBrush hb = new System.Drawing.Drawing2D.HatchBrush(System.Drawing.Drawing2D.HatchStyle.NarrowVertical, colorFore, colorBack);
g.DrawString(s, f, hb, pp);

                plist.Add(n);
}

            plist.Sort(delegate(Nokta p1, Nokta p2) { return p1.X.CompareTo(p2.X); });

string result = “”;

            foreach (Nokta n in plist)
{
result += n.Text;
}

            return result;
}

    Güvenlik resminin yazısını oluşturmak için yukarıdaki YaziyiOlustur fonksiyonunu kullanacağız. YaziyiOlustur fonksiyonunda ilk olarak alfabe adında harfler ve rakamlardan oluşan bir string array tanımlıyoruz.

Ardından resimdeki harflerin yükseklik ve genişliklerini ölçebilmemiz için SizeF tipinden bir değişken tanımlıyoruz (sf). Ardından da resimdeki tüm harflerin Nokta tipinden özelliklerinin ekleneceği List’i (plist) ve noktaların Text property’lerine atayacağımız string değişkeni tanımlıyoruz (s).

Güvenlik resminde 6 harf olacak ve bu yüzden bir for döngüsünün içinde 6 kere dolaşarak yukarıda da belirttiğimiz kriterlere uyacak yazıyı oluşturacağız.

İlk olarak oluşturulacak olan harfin fontunu belirliyoruz (f). Yazıdaki harflerin herbiri boyutları random olarak 18-24 pt arası berlirlenmiş, bold Verdana fontta olacaklar.

Hangi harfin yazıda olacağını da s değişkenine alfabe array’indeki random seçilen bir index’teki harfi atayarak belirliyoruz.

Sonraki aşamada fonksiyona parametre geçirdiğimiz Graphics nesnesinin (g) MeasureString metodunu kullanarak f fontunda oluşturulmuş olan s değişkeninin SizeF tipinden değerini alıyoruz ve bu değeri sf’ye eşitliyoruz.

Ardından Available adında boolean bir değişken tanımlıyoruz. Bu değişkeni tanımlamaktaki amacımız bir while döngüsü içinde oluşturduğumuz harflerin pozisyonlarını (Nokta tipinden değerlerinin) daha önceden eklenmiş olan harflerin pozisyonlarıyla çakışma olmayana kadar biraz önce yazdığımız PointCheck fonksiyonuyla kontrol etmek ve çakışma yoksa Nokta listesine eklemek.

While döngüsünü daha detaylı incelediğimizde yaptığımız ilk işin yeni oluşturacağımız harfin resimdeki pozisyonunu belirlemek için döngünün dışında tanımladığımız pp nesnesinin bir instance’ını almak olduğu görülüyor. Harfin diğer harflerle çakışmaması için PointF’in x pozisyonuna 0 ile resmin genişliğinin harfin genişliğinden çıkarılması sonucu elde edilen sayısı arasında random bir değer atıyoruz. y pozisyonuna ise 0 ile resmin yüksekliğinden harfin yüksekliğinin çıkarıldığı zaman elde edilen sayı arasında random olarak belirlenen bir sayıyı atıyoruz.

Döngünün dışında tanımladığımız Nokta türünden n nesnesinin de x değerine pp’nin x değerini, genişliğine sf’nin genişliğini atıyoruz, text’ine de s’yi atıyoruz.

Bir sonraki adımda pointCheck fonksiyonunda oluşturduğumuz nesnenin listede olup olmadığını kontrol ediyoruz. Eğer pointCheck fonksiyonu false değer döndürürse bu n nesnesinin listeye eklenebileceğini belirtir ve Available değişkeni true olur.     Available true olduğu için artık while döngüsüne girmez ve g nesnesinin DrawString metodunu kullanarak harfimizi resme yazdırabiliriz. DrawString metodunun sırasıyla string, font, brush, pointF tipinden nesnelerini alan overload’ını kullanacağız. Elimizde tanımlamış olduğumuz string (s), font (f) ve pointF (pp) nesneleri bulunmakta olduğundan sadece yeni bir brush nesnesi oluşturuyoruz (hb). DrawString ile harfi yazdırdıktan sonra listemize (plist) ekliyoruz.

Son olarak sıra resmimizin yazısını okumaya geldi. Listedeki Nokta nesnelerini x değerlerine göre sıralarsak soldan sağa doğru yazılmış şekilde yazımızı elde edebiliriz. List’in sort metoduyla bu sıralamayı yaptıktan sonra listedeki her Nokta nesnesinin Text property’sini tanımlamış olduğumuz result değişkenine atıyoruz ve resmimizdeki yazıyı da elde etmiş oluyoruz.

Burada belirtmem gereken bir nokta bulunuyor. Resmimizi oluştururken altı karakterden fazla kullanmak istersek veya fontun boyutunu artırırsak harflerin tamamının resme sığmama olasılığı yükselir ve metodumuz while döngüsü içinde sonsuz döngüye girebilir. Bu yüzden daha fazla karakter kullanmak veya font boyutunu artırmak için resmin boyutunun da artırılması gerekir.

Şimdi Windows uygulamamızdaki forma picturebox, label ve buton ekleyelim. Butona bastığımızda resim oluşturulacak ve yazı label’da gösterilecek. Butonun click eventine aşağıdaki kodu yazıyoruz:

private void btnResmiOlustur_Click(object sender, EventArgs e)
{
Random
rnd = new Random();
Image
img = Image.FromFile(@”Arkaplanlar\arkaplan” + rnd.Next(1, 5) + “.jpg”);
pictureBox1.Image = img;
CizgilerVePoligonuOlustur(img, rnd);
Graphics g = Graphics.FromImage(img);
lblYazi.Text = YaziyiOlustur(img, g, rnd);
}

Görüldüğü üzere kodda random bir değişken (rnd) tanımlıyoruz ve projemizin debug klasöründe yeralan Arkaplanlar klasörü içindeki resimlerden bir tanesini güvenlik resimimize arkaplan olarak atıyoruz. Sonrasında CizgilerVePoligonuOlustur metodunu çağırıyoruz ve resmimizdeki 5 çizgi ve poligonun çizilmesini sağlıyoruz. Ardından da Graphics nesnesini oluşturup (g) biraz önce yazdığımız YaziyiOlustur fonksiyonunu çağırıyoruz ve fonksiyonun döndürdüğü string değeri yazı label’ının Text property’sine atıyoruz.

Uygulamamızı çalıştırıp Resmi Oluştur butonuna tıkladığımızda güvenlik resmimiz oluşacaktır:

Şimdi örnek bir ASP uygulamasında resmimizi oluşturalım. Bunun için yeni bir class project oluşturdum ve GuvenlikResmi adında bir class’a kodu taşıdım. Bu class Image(resim için) ve string(resim yazısı için) tipinde iki adet readonly property taşıyor. Resmin constructor’ında arkaplan resimlerinin bulunduğu klasörün yolunu parametre geçirerek resmi oluşturuyoruz. Resim oluşturulduktan sonra Yazı property’sini Session’da tutacağız ve textbox’a girilen değer Session’da tutulan değerle aynıysa kabul edeceğiz.

Projemize ilk olarak resmin oluşturulacağı Resim.aspx sayfasını ekliyorum ve Load’ında aşağıdaki kodu yazıyorum:

protected void Page_Load(object sender, EventArgs e)
{
        GuvenlikResmim.GuvenlikResmi gr = new GuvenlikResmim.GuvenlikResmi(@”C:\Arkaplanlar\);
Session["ResimYazisi"] = gr.Yazi;
Response.ContentType = “image/jpeg”;
gr.Resim.Save(Response.OutputStream, ImageFormat.Jpeg);
}

Şimdi sıra güvenlik resminini formumuzda kullanmaya geldi. Başka bir sayfada image, textbox ve buton’dan oluşan bir form oluşturalım. Image kontrolünün ImageUrl property’sine Resim.aspx’i atayalım ve buton’un click event’ine aşağıdaki kodu yazalım:

    protected void btnGonder_Click(object sender, EventArgs e)
{
if
(txtResimYazisi.Text != Session["ResimYazisi"].ToString())
{
Response.Write(“Hata!”);
txtResimYazisi.Text = “”;
}
else
{
Response.Write(“Tamam”);
imgGuvenlikResmi.Visible = false;
txtResimYazisi.Visible = false;
btnGonder.Visible = false;
}
}

    Kodda da görüldüğü gibi textbox’da yazan değer Session’da tuttuğumuz değerle aynıysa kabul edilecek, farklıysa Hata yazısı çıkacak ve başka bir resim oluşturulacak:

    Bu makalemde güvenlik resmi oluşturulması ve kullanımı hakkında bilgi vermeye çalıştım. Projenin kodunu indirip inceleyebilirsiniz.

Faydalı olmasını umarım.

Işıl Orhanel.

Merhabalar,

       Bu makalemde uygulamalarımızın kısayollarını IWshRuntimeLibrary bileşenini kullanarak masaüstüne nasıl simge olarak ekleyebileceğimizden bahsedeceğim. .Net ortamında bir uygulama oluşturduğumuzda uygulamamıza kısayol eklemek doğrudan mümkün olmadığından Windows Scripting Host Object Model yardımıyla kısayolları oluşturabiliriz.

      Örneğimizde uygulamamıza masaüstünde, start-up’da kısayollar oluşturacağız. Formumuzu aşağıdaki gibi tasarlayalım:



Kodlamaya başlamadan önce projemize IWshRuntimeLibrary referansını eklememiz gerekecek. Bunun için referans ekleme ekranını açıp COM sekmesindeki listede yeralan Windows Script Host Object Model component’ini seçmeliyiz:



Ardından kodumuza aşağıdaki using statement’i ekliyoruz:

        using
IWshRuntimeLibrary;

        Ardından da
kısayol oluşturmamızı sağlayacak aşağıdaki metodu yazıyoruz. Bu metod parametre olarak kısayolun nerede oluşturulacağını (Environment.SpecialFolder) ve kısayolun adını (linkName) alacak ve kısayolu belirtilen parametrelerle oluşturacak:





        private void KisayolOlustur(Environment.SpecialFolder f, string linkName)
        {
            IWshRuntimeLibrary.IWshShortcut kisayol;
//kısayolu oluşturuyoruz.
            WshShell
w = new WshShell();
//WshShell class’ının instance’ını alıyoruz.
            kisayol = (IWshShortcut)w.CreateShortcut(Environment.GetFolderPath(f) + linkName);
//kısayolun nerede ve hangi adla oluşturulacağını parametreler ile belirtiyoruz.
            kisayol.TargetPath = Application.ExecutablePath;
//kısayolun çalıştıracağı uygulamanın yolunu belirtiyoruz.
            kisayol.Description = “İlk kısayolumuzu oluşturduk.”;
//kısayol açıklamasını belirtiyoruz. 
           
kisayol.IconLocation = Application.StartupPath + @”\1.ico”;
//kısayolun simgesi
            kisayol.Save();
        }


        Metodda kısayolun oluşturulacağı yeri Environment.SpecialFolder enum’undan alınacak şekilde yazmış olmama rağmen başka bir lokasyon da CreateShortcut metodunun içine yazılarak o lokasyona oluşturulması sağlanabilir. Ayrıca TargetPath property’sinde uygulamanın kendisinin yolu belirtilmiş olmasına rağmen herhangi başka bir dosyanın da yolu yazılarak o dosya çalıştırılabilir:


         kisayol.TargetPath = @”C:\Windows\Notepad.exe“;

         Kısayolun Description property’si kısayolun tooltip’inin set edildiği property’dir.

        Son olarak kısayolun simgesinin lokasyonunu Application.StartupPath olarak set ettiğimizde uygulamanın debug klasöründe bulunan simgeyi işaret etmiş oluruz. Fakat simgenin lokasyonu da başka bir lokasyon olarak set edilebilir.


        Şimdi sıra formumuzdaki iki butonun kodunda yazmış olduğumuz metodla masaüstünde ve bilgisayar başlarken uygulamanın çalışması için Startup’da kısayol oluşturmaya geldi:







        private void btnMasaustu_Click(object sender, EventArgs e)
        {
            KisayolOlustur(Environment.SpecialFolder.Desktop, @”\Kısayolum.lnk”);
        }


        private void btnStartUp_Click(object sender, EventArgs e)
        {
            KisayolOlustur(Environment.SpecialFolder.Startup, @”\Kısayolum.lnk”);
        }


       Uygulamamızı çalıştırdığımızda ve butonlara tıkladığımızda masaüstünde ve startup klasöründe kısayollarımız oluşturulacaktır:



  Makalemin başında da belirttiğim gibi .Net ortamında smartclient uygulamalar başta olmak üzere bazı durumlarda doğrudan kısayol oluşturmak mümkün olmasa da IWshRuntimeLibrary namespace’i ile kolayca kısayol oluşturabilir ve uygulamalarımızda kullanabiliriz.

Faydalı olması dileğiyle.


Işıl Orhanel