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