什么是DLL (動態(tài)連接庫)
DLL(動態(tài)連接庫),既然是動態(tài),那么就是有靜態(tài)連接庫,我想如果這么說大家會更明白:也許有的人在DOS下編寫過程序都明白這么一件事情,我寫了一個程序,里面有一個功能就是把屏幕的內容翻轉在轉90°打印出來,那么我需要把整個程序寫好放到我的所有代碼中,但是如果我寫另外一個程序的時候也有相通的功能,我可以調用以前的程序這個功能嗎?當然是不可以的了,所以我就要重新的寫一次,如果有5個需要調用這個功能的程序,我的這個功能函數需要20K的地方,那么我的硬盤就有80K的垃圾出現(20k*5 - 20k),這僅僅是一個函數,大家是否可以數清除WINDOWS如果這樣來寫,需要多少函數嗎?你看看所有的按鈕、滾動條、ListboxTextboxcheckBox窗體、打印對話框、顏色對話框、打開、保存、另存、字體對話框、文件的排列、拷貝、粘貼...... 這一切的一切是不是都需要在所有的程序中都要寫出來呢?如果真的是這個樣子,那么我們的windows應該按TB來計算了(1TB=1024GB),也許你說你的硬盤很大,那么他們還要在運行的時候占用相同大下的內容呢!所以發(fā)展出來了,動態(tài)連接庫(dll)這個感念:
動態(tài)連接,就是把這些相通的功能、函數都放到一種特殊形式的windwos可執(zhí)行文件中(dll),生成一個DLL的時候,程序員需要寫出,其中包含那些函數需由其他程序來訪問。這個過程叫做對函數的“導出”
創(chuàng)建windows程序的時候,專門的連接程序對程序的對象文件進行掃描,并生成一個列表,列出那些調用的函數在那個DLL那個位置,指定各個函數所在位置的過程叫做對函數的“導入”,當程序運行的時候,一旦要求用到執(zhí)行文件內部沒有的函數,windows就會自動裝載動態(tài)連接庫,使應用程序可以訪問這些函數。此時,每個函數的地址都會解析出來,并且以動態(tài)的方式連接到程序里--這便是術語“動態(tài)連接”的由來。
另外還有一個好處,就是當你更新你的這個函數的版本和功能的時候,靜態(tài)連接所需要做的工作是多少(假設按windwos來說他有上千個這樣的函數,一共有100多個程序來使用,那靜態(tài)連接需要100000次的更新,動態(tài)連接只需要1000次),從而也節(jié)省了內存的空間。
動態(tài)連接庫不一定是DLL擴展名的,也可以是ocx、vbx、exe、drv 等等的
大家可以發(fā)現在調用WIN32 api的時候里面都會有說明是來自于那個dll等宿主文件的,現在我就在這里講講一些標準的dll用途:
看下面這個API聲明:
Public Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
看見kernel32了嗎,其實這個就是kernel32.dll的名字,你可以在你的硬盤里找到他,這就是說GetWindowsDirectory這個函數是在kernel32.dll里面,他的別名是GetWindowsDirectoryA,()中是他的參數,有兩個一個是字符型,一個是長整型,返回值也是長整型。lpBuffer ------- String,指定一個字串緩沖區(qū),用于裝載Windows目錄名。除非是根目錄,否則目錄中不會有一個中止用的“”字符nSize ---------- Long,lpBuffer字串的最大長度,返回值 為Long,復制到lpBuffer的一個字串的長度。如lpBuffer不夠大,不能容下整個字串,就會返回lpBuffer要求的長度。零表示失敗。這就是API聲明的意義所在!
DLL的說明
KERNEL32.DLL ---- 低級內核函數。使用他可以完成內存管理、任務管理、資源控制等。
USER32.DLL------于windows管理有關的函數。消息、菜單、光標、計時器、通信和其他大多數非現實函數都可以從這里找到
GDI32.DLL-------圖形設備接口庫。于設備輸出有關的函數:大多數繪圖、顯示場景、圖元文件、坐標及其字體函數都可以從這梨找到。
COMDLG32.DLLLZ32.DLLVERSION.DLL---這都是提供一些附加函數的庫,包
括通用對話框、文件壓縮、版本控制的支持。
COMCTL32.DLL --------一個新的windows控件集合,比如TreeView和RichTextBox等等,最初這個好像是為了win95而制作的,但是現在也使用與NT下
MAPI32.DLL---------提供了一套電子郵件的專用函數
NETAPI32.DLL--------提供了一套訪問和控制網絡的函數
ODBC32.DLL--------(不用我再說了吧)ODBC功能的DLL之一
WINMM.DLL------(這可不是WINDOWS的MM)是多媒體控制訪問函數集合
windows api正在快速發(fā)展和變化,是你我任何單個人都追趕不上的速度發(fā)展,幸運的是我們不用掌握所有的windows API,只是掌握需要經常使用的WINDOWs api和他的常規(guī)結構、基本感念就可以了,這亮點很重要。
dll文件知識
一、DLL文件常識,DLL是DynamicLinkLibrary的縮寫,意為動態(tài)鏈接庫。在Windows中,許多應用程序并不是一個完整的可執(zhí)行文件,它們被分割成一些相對獨立的動態(tài)鏈接庫,即DLL文件,放置于系統(tǒng)中。當我們執(zhí)行某一個程序時,相應的DLL文件就會被調用。一個應用程序可有多個DLL文件,一個DLL文件也可能被幾個應用程序所共用,這樣的DLL文件被稱為共享DLL文件。DLL文件一般被存放在C:WindowsSystem目錄下
二、修改DLL文件的具體應用在系統(tǒng)的組策略和注冊表中,我們可以修改一些鍵值來優(yōu)化我們的系統(tǒng),并加強操作系統(tǒng)的安全性??墒?,對于限制下載、禁止刪除文件等功能,我們無法通過上述的操作來完成,這只有通過修改系統(tǒng)DLL文件來實現。目前,我們通過修改系統(tǒng)的DLL文件,可以實現禁止刪除文件、禁止IE下載、禁止IE另存為、禁止文件打開方式等功能。
三、系統(tǒng)中部分DLL文件的功能
1、Browselc.dllIE所需要調用的庫文件DLL結構雛形就是它了
2、Shdoclc.dll系統(tǒng)窗口及設置等,如刪除文件、重命名
3、Shell32.dll系統(tǒng)窗口及設置等,如刪除文件、重命名
4、Cryptui.dllIE控件下載及提示對話框程序
四、修改DLL文件的方法
1、下載DLL文件修改工具EXESCOPE6.0-6.3或6.4工具
2、獲取Browselc.dll、Shdoclc.dll、Shell32.dll和Cryptui.dll這幾個鏈接文件。在找這幾個文件時,最好將其他機器的硬盤,掛接在本機中,然后用本機的操作系統(tǒng)啟動并復制這幾個文件。
3、在修改DLL文件的時候,打開該鍵值,在右面的對話框中將所要修改的鍵值禁用即可,不要刪除,以備日后恢復(如圖)
五、DLL文件修改秘籍
1、禁止下載的修改方法:打開Shdoclc.dll修改資源--對話框---4416,將4416鍵值禁用即可。
2、禁止網頁添加到收藏夾,打開Shdoclc.dll修改資源--對話框---21400,將該鍵值禁用即可。
3、禁止惡意網頁加載控件,修改Cryptui.dll文件,要同時修改5個地方才能完全禁止資源--對話框---130資源--對話框---230資源--對話框---4101資源--對話框---4104資源--對話框---4107將以各對話框中的相應鍵值,修改成為禁用就可以了。
4、禁止系統(tǒng)刪除文件修改Shell32.dll,這個文件需要修改5個地方才可以禁止系統(tǒng)刪除文件。資源--對話框---1011資源--對話框---1012資源--對話框---1013資源--對話框---1021資源--對話框---1022將以上五個地址的鍵值禁用就可以了!
5、禁止文件被改名,修改shell32.dll,有2個地方需要修改資源--對話框---1018資源--對話框---1019將以上兩處的相應鍵值,修改為禁用就可以了!
6、禁止運行菜單,修改shell32.dll,將資源--對話框---1018鍵值設置為禁用。
7、禁止系統(tǒng)文件被挪動修改shell32.dll,需要修改4個地方資源--對話框---1014資源--對話框---1015資源--對話框---1016資源--對話框---10178、禁止目標另存為,修改Shdoclc.dll文件,需要修改3個地方資源--菜單--258---257資源--菜單--258---252資源--菜單--24641--2268在這個修改中,我們要把各對應的鍵值刪除。打開該鍵值后,右鍵菜單中有刪除。在資源--菜單--24641—2268中,有多項該鍵值,請逐一刪除。
8、禁止自定義文件夾選項修改Shell32.dll文件,需要修改以下4個地方資源--菜單--215---28719資源--菜單--216---28719資源--菜單--217---28719資源--菜單--216---28719找到以上四處鍵值,直接需要刪除后即可,而不是禁用。
9、禁止IE文件夾選項,修改Browselc.dll文件,需要修改3個鍵值資源--菜單--263(這里有多個請刪除)---41251(刪除)資源--菜單--266(也有多個請刪除)---41329(刪除)資源--菜單--268---41251(刪除)在上面的3個鍵值中,個別鍵值有多處,請逐一刪除。
10、禁止98文件共享控件,修改Msshrui.dll,需要修改2個地方資源---對話框----1---AutoRadioButton資源---對話框----30---AutoRadioButton將以上兩處的鍵值禁用即可。其他的選項,可以根據自己的需要進行修改。找到相應的功能鍵值,將不需要的功能,禁用就可以了。
11、禁止文件的打開方式,修改Url.dll,需要修改2個地方資源---對話框---7000資源---對話框---7005將以上兩處的鍵值禁用即可。
12、禁止更改系統(tǒng)桌面,修改Shdoc401.dll,有2處地方需要修改資源---對話框---29952---PushButton:瀏覽資源---對話框---29952---PushButton:圖案將以上兩處的鍵值禁用即可。
13、禁止系統(tǒng)文件夾自定義,修改Shd401lc.dll,有2處地方需要修改資源---對話框---29957資源---對話框---29958將以上兩處的鍵值禁用即可。15、禁止文件保存路徑及打開,修改Comdlg32.dll,有2處地方需要修改資源---對話框---1547資源---對話框---1548將以上兩處的鍵值禁用即可。
六、注意事項
1、本文以WindowsXP/2000操作系統(tǒng)的DLL文件修改為例,并不一定適用于Windows98操作系統(tǒng),請在修改DLL文件時注意。
2、在禁止下載的操作中,除修改禁止下載的鏈接文件Shdoclc.dll外,還要修改禁止文件另存為的鏈接文件Shdoclc.dll。如果修改一個鏈接文件無法實現相應的功能,請查看其他鏈接文件中是否存在需要修改的鍵值。
3、修改后的DLL鏈接文件,需要在DOS模式下導入并重新啟動機器才有效。
4、本文章只介紹了我們日常操作中經常用到的DLL修改選項,其他選項請參看DLL文件中的具體選項進行修改。
5、在修改DLL文件前,請先備份系統(tǒng)原有的DLL文件,以備修改失敗恢復。
評論