Windows DLL Uzantısı hakkında İnceleme Resimli + Videolu

Kodla Büyü

KingSkrupellos

Seçkin Üye
Seçkin Üye
Mesajlar
554
Merhaba Arkadaşlar ben KingSkrupellos.Bugün size (.DLL ) dosyasının hikayesini anlatıcam. Hem ne olduğunu bilirsiniz hemde kendiniz de uygulayarak kullanabilirsiniz.
Konuya başlamadan önce birkaç video paylaşımında bulunucam.
Windows DLL Dosyaları nasıl kaydedilir
http://www.youtube.com/watch?v=AY5bs2mINek
DLL hataları nasıl düzeltilir
http://www.youtube.com/watch?v=8504APfFQGE
http://www.youtube.com/watch?v=O49jSUChjIg
http://www.youtube.com/watch?v=P_VvOIOY7VE
http://www.youtube.com/watch?v=X_nMmOXrT1k
http://www.youtube.com/watch?v=3889MfU5ESs
DLL Dosyaları nereye atılır ?
http://www.youtube.com/watch?v=02ik7aaRNhM
DLL uzantılı dosyaları ile not defteri açma
http://www.youtube.com/watch?v=HyjA6LtfSc4
C# DLL Dosyası oluşturma
http://www.youtube.com/watch?v=9PfEC0MIcJw
DLL Dosyası eksik hatasının çözümü
http://www.youtube.com/watch?v=gb4a0SPAMdM
DLL Dosyaları nasıl düzenlenir ?
http://www.youtube.com/watch?v=X4-UIB8N5Q4
DLL-Files-Missing-in-Windows.jpg

DLL nedir Sorusunun Cevabı : Açılımı Dinamic Link Library ( fonksiyonlar Kütüphanesi ) olan bu uzantı birçok programın fonksiyonlarını yerine getirmesi için gereken ek dosyalardır. bazı DLL dosyaları özel programlarla açılıp düzenleme yapılabilir. Windows işletim sisteminin çekirdeğini oluşturulan dll dosyaları (dynamic link library) bilgisayar kullanan herkesin sıklıkla karşılaştığı dll hatalarına oldukça müsait dosyalardır. Programların çalışmaları için gerek duyulan birinci derecedeki dosyalar, yürütülür dosya ya da program dosyası adı verilen dosyalardır. Örneğin .exe uzantılı, bilgisayarla haşır neşir olanların "exe`ler" (ya da egzeler) diye tabir ettiği dosyalar, program dosyalarıdır. Fakat bugün kullandığımız programların çoğu, .exe`ler ve .dll`ler de dahil olmak üzere, birçok dosyaya gerek duyarlar.DLL`ler, yürütülebilir işlevlerin (fonksiyonların) ya da öngülerin yer aldığı, birçok program tarafından kullanılabilen kütüphane...
DLL farklı exeler tarafından istenildiği zaman kullanılma özelliğine sahiptir ki bu da DLL kodunun memory'de sadece bir kopyasının bulunmasını yeterli kılar.
En basit örneği verecek olursak.
Diske yazma işlemi her işlem gibi (.COM işlemleri hariç) Windows API'si üzerinden yapılan bir işlemdir. Bir program diske birşey yazacakken isteğini Windows'a bildirir ve Windows diske yazma göreviyle ilgili DLL kodunu, istekte bulunan programa kullandırır. Düşünsenize; eğer diske yazma işleminde bulunan her program için bu görevi yerine getiren kod parçasının bir kopyası memory'e konulsaydı, verimlilik yerlerde sürünürdü.
DLL' in Çıkış Noktası

Windows' un ilk versiyonlarında programların çalışması için adres alanları yeterince kısıtlıydı. Tek işlemci üzerinde birden çok programın yürütülebilmesi için adres alanlarının daha etkin bir şekilde kullanılması gerekiyordu. Bu nedenle işletim sistemi operasyonlarına DOS üzerinden, yüksek seviye işlemlere de dinamik link kütüphaneleri üzerinden ulaşılması çözümü getirildi. Bu kütüphaneler programlar tarafından ortak olarak kullanılabilecek ve aynı fonksiyona ihtiyaç duyan programlar için o kütüphanenin bir kez belleğe yüklenmesi yeterli olacaktı. Örneğin; GDI (-Graphics Device Interface -Grafiksel Gösterim Arayüzü) kodları belirli cihazlara göre farklılık gösterir, Renkli Grafiksel Adaptör ve Hp Laser Jet Yazıcı gibi. API çağrısı yapılarak çağrılan cihaza göre üzerine farklı kodlar eklenerek istenilen işlem yaptırılabilir. İki işlem aynı anda yapıldığı zaman ortak olarak kullanılan kodun bulunduğu DLL' in bir kez belleğe yüklenmesi yeterlidir.
Avantajları
1. C, çalışma zamanı fonksiyonlarına erişimi sağlar. Bazı programlama dillerinde elde edilemeyen fonksiyonlar C dilinde elde edilir. Bu dillerde C dili ile yazılan fonksiyonlara erişildiği zaman ortam kısıtlarından kurtulmuş olunur. Örneğin; _dos_getdiskfree fonksiyonu diskteki mevcut boş alanı hesaplamak için kullanılmaktadır. Ayrıca, C dili doğal makine kodlarına en yakın programlama dillerinden biridir. Bu dilde düzgün kodlanan programlar diğerlerine göre daha hızlıdır.
2. Fonksiyonlara ya da verilere ihtiyaç duyuldukça DLL' ler belleğe yüklenir. Bu da ihtiyaç duyulan bellek miktarını düşürdüğü gibi programların yüklenme süresini kısaltır. Bilindiği üzere, .exe dosyaların büyüklükleri genel olarak ortalama bir program için küçümsenemeyecek bir boyuttadır. Program her çalıştırıldığında tüm exe hafızaya yüklenip çalıştırılır, bu da hafızanın fazlasıyla şişmesine neden olur. O yüzden tüm kodlar exe ye gömülmek yerine DLL dosyalarına bölünür ve gerektiğinde hafızaya yüklenip kullanılırlar.
3. Herhangi bir dilde yazılmış bir DLL ,diğer bir dilden uygun tipte parametreler kullanılarak çağrıldığında da kullanılabilir. Diller arasında geçiş sağlandığı için programlama yeteneği artar.
4. Programların bakımı ve hata gidermesi kolaydır. Program işlevlere göre dll dosyalarına bölündüğünde hata düzeltme ya da güncelleme durumunda sadece düzeltilecek fonksiyonun bulunduğu DLL' e bakmak yeterlidir.
5. DLL fonksiyonları exe dosyaları içerisine yazılmadığından, exe dosyalarının diskte kapladığı toplam alan azalır. Dinamik bir kütüphaneden bir fonksiyon çağrıldığında bağlayıcı, kodu exe dosyanın içerisine yazmaz. Exe dosya içerisinde özel bir bölüme fonksiyonun hangi DLL içerisinde olduğunu yazar. Exe uzantılı dosya çalıştırılacağı zaman Windows'un yükleyici programı exe dosya ile birlikte bu dosyanın kullandığı DLL dosyalarını da belleğe yükler. Programın çalışma zamanı sırasında DLL içerisinde bulunan fonksiyonların çalışması sırasında akış dll dosyasının içerisine girerek buradaki fonksiyonu çalıştırır.
Dezavantajları
1. Dinamik kütüphane kullanan bir programın başka bir makinede çalıştırılabilmesi için exe dosyasının yanı sıra dll dosyalarının da taşınması gerekir.
2. Dinamik kütüphane sisteminin kullanılabilmesi için sistemin bir sanal bellek mekanizmasına sahip olması, yani genel olarak bellek probleminin olmaması gerekir. Çünkü bir dll'den bir tek fonksiyon bile çağrılacak olsa bütün modül belleğe yüklenmek zorundadır.
3. Dinamik kütüphane kullanan bir programın yükleme zamanı göreli olarak daha uzundur.
1) * Dependency Walker programı hangi EXE dosyasının hangi DLL dosyalarına gerek duyduğunu veya hangi fonksiyonları çağırdığını görmeyi sağlar. eğer bu program işinize yaramazsa google ile "DLL dependency" diye aratarak başka programlar deneyebilirsiniz.
dependencywalker.png

Orijinal Sitesinden indir => http://www.dependencywalker.com/
2) * Resource Hacker programı exe veya DLL dosyalarını açıp değiştirmeye olanak verir.
İndir => http://www.tamindir.com/resource-hacker/
resourcehacker.jpg

ARTIK DLL'LER => Bir programı kurduğunuzda, program kendi DLL’ lerini sisteme kurar. Genellikle de, kaldırılan bir program, kendi DLL’ lerini de siler. Fakat bazen, bu program kaldırma işlemi sırasında silinmeyen ve kullanılmayan DLL’ ler sistemde kalırlar. Bu dosyalara, artık dosyalar, artık DLL'ler (orphan DLLs) denir. Program kaldırma için kullanılan iyi bir yazılım, bu tür artık dosyaları bulup sistemden temizleyebilir. Artık DLL'ler genellikle sistemde fazla yer tutmaz. Hatta birbirinin kopyası olan ve farklı dizinlerde bulunan "mükerrer" DLL'ler bile pek yer tutmazlar. Kısacası, artık DLL'leri silmek size çok çok, 20-30 MB'lık bir sabit sürücü alanı kazandırır.
SİLERKEN DİKKAT => Fakat, DLL dosyalarını silerken dikkatli olmak gerekir. Programlarınızdan birinin çalışmak için gerek duyduğu DLL’ lerden birini silerseniz, programınız çalışmaz. Bir programı sistemden kaldırdığınızda, DLL'lerinin de silinmesi için size önereceğimiz en iyi yöntem, programla birlikte gelen kaldırma (uninstall) özelliğini ya da yazılımını kullanmaktır. Eğer programın böyle bir özelliği yoksa ya da başarısız oluyorsa, ayrıca bir program kaldırma (uninstall) yazılımı kullanmanız gerekebilir. Advanced Systemcare programının Uninstaller adlı bir programı var bunu size önerebilirim.
Orijinal Sitesinden indirmek için : http://www.iobit.com/advanceduninstaller.html
iobituninstaller.png

DLL’LERİN FOYASI MEYDANA ÇIKSIN => Basit bir Registry ayarıyla, .DLL'lerin kendi ikonlarıyla görünmesini sağlayın.DLL’leri ve Denetim Masası uygulamalarınızı canlandıracak bir önerim var. En sık kullandığınız metin düzenleyici programınızı (Notepad, Wordpad) açıp yeni bir dosyaya şu aşağıdakileri yazın. Yazım hatası yapmamaya özen gösterin:
Kod:
REGEDIT4
[HKEY_CLASSES_ROOTclpfileDefaultIcon]
@=”%1”
[HKEY_CLASSES_ROOTdllfileDefaultIcon]
@=”%1”
Dosyayı DLL.reg adıyla istediğiniz yere kaydedin. Metin düzenleyici programınızı kapatıp bu dosyayı bulun ve üzerine sağ tıklayın. Karşınıza çıkan menüde, Merge’ü (Birleştir) seçin. Herhangi bir yazım hatası yapmadıysanız, dosyanızdaki bilgilerin Windows95 kayıtlarına başarılı bir şekilde girildiğini belirten mesajla karşılaşacaksınız.Şimdi de C:WindowsSystem dizinine bakın. DLL ve CPL dosyalarınızın ikonlarının eskiden o bildik iki çarkla ifade edilirken şimdi farklı olduğunu göreceksiniz. Bu yeni ikonlar, hem dosyaların rahat ayırt edilmesini hem de işlevlerinin belli olmasını sağlar. Bu yeni ikonlarla karşınıza çıkmayan dosyalar da olabilir; bunlar büyük olasılıkla “türü
bilinmeyen” DLL ve CPL’ler olacaktır. Bunlar da Windows logosuyla belirtilecektir.Windows’taki .EXE dosyaları, Explorer’da (Windows Gezgini) içerdikleri ilk ikonla gösterilirler; .DLL dosyaları da hep aynı ikonu kullanır. Bunun nedeni de, sanal olarak, her bir .EXE dosyasının en az bir ikonunun olmasına karşın, .DLL dosyalarının çoğunun ikon sayısının biri geçmemesidir. Bir başka önemli fark da, .EXE dosyalarını üzerine çift tıklayarak çalıştırabilirken, .DLL dosyalarını çalıştırmamanızdır. Denetim Masası uygulama dosyaları (.CPL) ise, birçok şeyi içeren bir torba gibidir. Çalıştırılabilirler, ancak bazı .CPL dosyaları (Main.cpl gibi) birden çok dosyayı bünyesinde barındırdığından, Explorer’da üzerine çift tıkladığınızda yalnızca biri çalışır. Yine de, okurumuzun da belirttiği gibi, .DLL’in içerdiği ikon, bu dosyanın işlevi hakkında yeterli ipucu verebilir. Şekil 1 ve 2’de okurumuzun önerdiği yöntemin uygulanmasından önce ve sonra, .DLL’lerin görüntüsünün nasıl değiştiğini görebilirsiniz. Bu düzenlemeyi bitmap dosyalarına da uygulayabilirsiniz. Bu yöntemin uygulanmasının ardından, her bir bitmap dosyası kendi içeriğinin küçük bir görüntüsünü sunacaktır. Bir sürü bitmap dosyasıyla aynı anda uğraşmak gerektiğine, böyle bir özellik epey yararlı olabilir. Fakat aynı zamanda, Explorer’da bir dizinin içindeki dosyaların görüntülenme süresini de uzatabilir, aklınızda bulunsun. Bitmap dosyalarının ikonlarını bu yönde değiştirmek için, okurumuzun önerdiği .REG dosyasına iki satır daha ekleyip, “dllfile” ya da “clpfile” ifadesini “Paint.Picture”la değiştirin. Eğer sisteminize başka bir bitmap düzenleyici uygulama kurmuşsanız, bu yöntem işe yaramayabilir. Çünkü .BMP dosyalarının içsel adı “Paint.Picture”dan başka bir ifadeye değiştirilmiştir (örneğin “PSP.Image”). Hangi adı kullanacağınızı bulmak için, Regedit’i (Kayıt düzenleyici) çalıştırıp Ctrl-F tuş bileşenini kullanın (Bul işlevi için bu kısayol kullanılır). Bulunacak ifade için de “.bmp” yazın. “Match the whole string” ve “Keys” kutusunu işaretlemeyi unutmayın. Diğer kutuları boş bırakın. “.bmp” adlı bir anahtar bulacaksınız, bu arada, aradığınız içsel ad da, sağ pencerede karşınıza çıkacak.
Bağlantılar statik ve dinamik olmak üzere ikiye ayrılmaktadır:

1-) Statik bağlantılar icra sırasında değişmezler ve programınızın icrası sırasında kütüphane içindeki
fonksiyonlara erişim için gerekli tüm adres bilgileri icra edilebilir dosya derlendiği sırada
belirlenmiştir ve sabittir.

2-) Dinamik bağlantılar ise sadece gerektiği zaman kurulurlar. Eğer programınız ihtiyaç duyduğu bir
fonksiyonu kendi içinde bulamazsa o zaman Windows gerekli dll’i yükler ve içindeki fonksiyonları
programınızın emrine verir. Bu sırada Windows dll içindeki tüm fonksiyonların adreslerini çözümler
ve dinamik olarak programınız arasında bağlantı kurulmasını sağlar.

Örneğin Visual Basic içinde kullanılan tüm özel kontroller birer dll’dir. Tek farkı sadece Visual Basic tarafından işlenen mesajların kendine özgü işlem gerektirmesidir.

Neden DLL kullanılır?

Dll neden kullanmamız gerektiğini 4 ana başlık altında toplayabiliriz.

- C İcra anı (Run-Time) fonksiyonlarına erişim:

C İcra anı kütüphanesi Visual Basic programcılarına bahşedilmeyen bir çok yararlı fonksiyonları barındırır. Örneğin _dos_getdiskfree fonksiyonu diskteki mevcut boş alanı hesaplamak için kullanılmaktadır.

- Windows API’ye (Uygulama Programlama Arayüzü) Erişim:

Bazı Windows API fonksiyonları "Callback" özelliğine sahiptir. Yani bunu açıklamak gerekirse API çağrısının işlenmesi sırasında Windows’un o fonksiyonu rekürsif olarak yani tekrarlı olarak çağırması diyebiliriz. Buna örnek olarak "EnumTaskWindows" fonksiyonunu verebiliriz. Bu fonksiyon o anda icra edilen görevlerin sahiplendiği pencerelerin "handle" yani bir çeşit tanımlayıcısını geri döndürmede kullanılır diyebiliriz.

- Hız:

C, 0 ve 1 gibi doğal makine diline en yakın programlama dillerinden biridir. Bu programlarınızın eğer doğru olarak kodlanmış ise c dilinde en hızlı olarak çalışacağı anlamına gelmektedir.

- Kullanılacağı zaman yüklenme:

Bir dll içindeki kod veya veri sadece gerektiği zaman belleğe alınır. Bu programların ihtiyaç duyduğu bellek miktarının düşük olmasını sağlamakla beraber yüklenme süresini azaltırlar.

Bir Dll’in Anatomisi

Her dll, çalıştırılabilir dosyalar tarafından kullanılabilmesi için içinde mutlaka bir LibMain fonksiyonu ve Windows Çıkış Prosedürü(WEP) bulundurması gerektirmektedir.

- LibMain:

Bir DLL yukarıda da belirtildiği gibi mutlaka LibMain fonksiyonu barındırması gerekir. LibMain fonksiyonu DLL’in yüklenmesini isteyen ilk program tarafından çağırılır ve aşağıdaki açıklanan parametreler bu fonksiyona aktarılır:

- HANDLE : DLL örneğinin handle değerini belirtir.
- WORD : Kütüphane’nin veri segmentini belirtir.
- WORD : Yığın boyutu
- LPSTR : Komut satırı parametreleri

-WEP:

WEP(Windows Çıkış Prosedürü) bir dll’in bellekte artık görevi bittiğinde temizlenmesi işlemini gerçekleştirir. Windows işletim sistemlerinde her dll içinde bir tane WEP fonksiyonu gereklidir. Windows 3.1 için bu seçimliktir. Bir WEP fonksiyonu Visual C’de modül tanımlama dosyasında (.DEF) aşağıdaki gibi bulunmalıdır.

EXPORTS
WEP

- İhraç edilmiş Fonksiyonlar:

Bu fonksiyonlar sizin DLL içinden çağırmak istediğiniz fonksiyonlardır. Bunlar geriye doğru uyumluluk sağlamak için _export._export ile gösterilir. Ayrıca çağırmak istediğiniz tüm fonksiyonlar dll’inizin (.DEF) dosyası içinde listelenmiş olması gerekmektedir.

3- DLL hatalarının sebepleri

coğu DLL hatasının sebebi aslında O dllnin bilgisayarda bulunmadığı içindir (örnek : yeni bir program kuruyoruz açtığımızda dll hatası veriyor.)
ancak DLL hatalarının hepsi DLL eksikliği yüzünden çıkmıyor mesela kullanım içerisinde DLL kötü yazılımlar tarafından hasar görebiliyor ve bu nedenle coğumuzun kullandığı virüs programları tarafından karantinaya alınıyor ve o eskiden girebildiğiniz programa girmeye calıştığınızda DLL hatası alıyoruz

gelelim oyunlar için hata sebeplerine oyunlarda DLL hatası genellikle DirectX sürümünden kaynaklanır zaten coğu oyun DLL hatasındada d3dx9_"...".dll olarak geçer peki bu DLL sorunlarını nasıl çözebiliriz.

4- DLL hatalarının çözümü
Hatanın çözümünün en kolay yolu DLL dosyasını tekrar indirip Win32 yada system32 nin içine atmaktır. %100 işe yarar. dll-files.com sitesi size yardımcı olacaktır.
C# Dili ile DLL dosyalarını uygulaması ve kullanımı – abdullahaltintas.com sitesinden alıntı yaptım.
Visual Studio kullanarak uygulama geliştirirken bazı durumlarda kaynak kodlarımıza DLL (Dynamic Link Library) dosyalarını referans olarak eklemek isteyebiliriz. Bazı durumlarda hazır oluşturulmuş kütüphaneleri (dll) eklemek gerekli olabilirken, bazı durumlarda ise kendi dll dosyamızı oluşturup daha sonra bu kütüphane dosyamızı diğer projelere referans olarak ekleyip kullanmak isteyebiliriz. Bu yazımızda sizlere basit bir dll dosyasının nasıl oluşturulacağını ve diğer projelerimize bu dll dosyasının nasıl referans edilerek kullanıma alınacağını resimlerle görselleştirerek aktarmaya çalışacağım.
Öncelikle dll dosyası oluşturabilmek için Visual Studio ortamında yeni proje açma ekranından “Class Library” templete ini seçiyoruz ve oluşturacağımız dll dosyamıza bir isim veriyoruz. Örneğimizde OgrenciLibrary isminde bir dll oluşturuyoruz.
1d59f0.png

29c202.png

30b85f.png

470f39.png

5.png

6.png

7.png

9.png

10.png

117ae39.png

Karşımıza gelen ekranda standart bir class yapısı mevcut durumda ve biz bu classın adını Ogrenci olarak değiştiriyoruz. Daha sonra bu sınıfa ait property (özellik) leri tanımlıyoruz. Burada tanımladığımız Ad, Soyad ve Yas isimli property ler dll oluşturulduktan sonra diğer projelerde kullanılırken karşımıza çıkacaktır. Gerekli tanımlamaları yaptıktan sonra projeyi F6 ile derliyoruz.
Class Library projesini F6 ile build ettikten sonra dll dosyasının oluşturulduğunu kontrol edelim. Bunun için projemizin oluşturulduğu dosya yolundaki Bin\Debug klasörü altına bakalım.
Gördüğünüz gibi OgrenciLibrary ismindeki dll dosyamız oluşturulmuş durumda. Şimdi bizim oluşturduğumuz bu dll dosyasını başka bir projemize nasıl ekleyeceğiz ve kullanacağız inceleyelim.
Oluşturulan dll dosyasını kullanmak için yeni bir proje açıyoruz. Biz şu an için var olan solution üzerine sağ tıklayarak add ==> new project ile yeni bir console uygulaması açıyoruz.
Şimdi sıra açılan yeni console projesine daha önce oluşturulan dll dosyasını referans etmeye (eklemeye) geldi. Bunun için yeni açılan projede Solution Explorer penceresindeki Referance isimli sekmede sağ tıklayarak referans ekleme penceresine geliyoruz.
Açılan referans ekleme penceresinden oluşturduğumuz dll dosyasını veya başka bir yerden temin ettiğimiz diğer dll dosyasını seçiyoruz ve OK diyerek dll dosyasını projemize ekliyoruz.
Bu işlemin ardından References bölümünün altında eklediğimiz OgrenciLibrary ismindeki dll dosyamız gözüküyor ve projemize dahil etmiş oluyoruz. Daha sonra eklenen dll i using ile kullanıma alıyoruz.
Artık projemize oluşturulan dll dosyası eklenmiş durumda ve yeni projemizde dll içerinde bulunan Ogrenci classını ve buna ait Ad, Soyad ve Yas isimli property leri kullanabiliriz. Bununla beraber yeni projemize ait dosya yolundaki Bin\Debug klasörüne bakarsak OgrenciLibrary ismindeki dll dosyasının buraya eklenmiş olduğunu göreceksiniz.
Yeni uygulamamızda dll e ait Ogrenci sınıfının property lerine değerler vererek ekrana yazdıralım. Örnek olarak Ad için ALLAHIN BİR KULU, Soyad için BilgisayarBilisim.Net ve Yas için ise 26 değerlerini atayalım ve bu değerleri ekrana yazdıralım.
Son olarak projemizi derleyip çalıştıralım ve sonucu hep beraber görelim:
Gördüğünüz gibi kendi oluşturduğumuz dll dosyasını başka bir projeye referans ettik ve bu dosyadaki Ogrenci ismindeki sınıfı ve elemanlarını kullandık. Kendi oluşturduğumuz dll dosyaları gibi başka yerlerden temin edebileceğimiz diğer dll dosyalarını da projelerimize referans olarak ekleyip kullanabiliriz.
Son olarak DLL Dosya Problemlerini çözmek için bir program vericem. DLL Files Fixer
Mesela dll hatalarına şu durumlarda çok rastlarız: Oyun kurulumlarında bir dll dosyası eksik hatası alırız ve kurulum yarıda kesilir. Veya oyunu kurduktan sonra, çalıştırdığımızda “bilmemne.dll” hatası diye uyarı verir ve oyuna giemeyiz işte bu gibi durumlarda, Program eksik olan dosyayı bilgisayarınıza kurarak, Oyunun keyfini çıkarabilirsiniz.
lB0mXr.png

İndir : http://www.dll-files.com/fixer/
Ayrıca Windows 7 İşletim Sistemi için DLL dosyalarının anlamlarına bakabilirsiniz.
http://www.win7dll.info/
Konuyla ilgili soru, görüş ve önerilerinizi bana bildirirseniz çok sevinirim. Yorumlarınızı bekliyorum. Bir başka yazıda görüşmek üzere… Bu dökümanın tamamı bana aittir. Bazı resimleri konuya ve yazıları konuya uygun olarak hepsini derleyip toparlayarak geniş bir anlatım yapmak istedim. KingSkrupellos. Emeğe Saygı.
 
Geri
Üst