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