- 相關(guān)推薦
用Windows終端仿真程序?qū)崿F(xiàn)微機(jī)遠(yuǎn)程文件傳送
有些硬盤防拷貝是通過對(duì)硬盤FAT表中的簇鏈的檢測(cè)來實(shí)現(xiàn)的,這與本文所推薦的方法原理一樣,都是通過檢測(cè)文件位置信息是否被改變來判斷文件是否已被移動(dòng)的。但前者涉及到定位FAT表及文件所在目錄等繁瑣工作,而且還和硬盤型號(hào)及格式化信息有關(guān),編程很不方便。本文所介紹的方法則不然,它直接與操作系統(tǒng)打交道,取出操作系統(tǒng)內(nèi)核中現(xiàn)成的數(shù)據(jù),即利用DOS系統(tǒng)文件表(SYSTEM FILE TABLE 簡(jiǎn)稱SFT)來實(shí)現(xiàn)防拷貝。當(dāng)您打開硬盤上的一個(gè)文件并移動(dòng)讀寫指針時(shí),DOS會(huì)時(shí)刻記錄讀寫指針?biāo)鶎?duì)應(yīng)的硬盤位置。一個(gè)稍大些的文件在硬盤上要占用多個(gè)簇,這些簇并不是連續(xù)的,而是由操作系統(tǒng)一般按照“就近循環(huán)分配”原則為該文件分配的,這些簇的絕對(duì)簇號(hào)具有一定的隨機(jī)性,在FAT表中形成一個(gè)簇鏈。移動(dòng)讀寫指針超過一個(gè)簇的大小時(shí),則所對(duì)應(yīng)的絕對(duì)簇號(hào)也要變化。只要該文件沒有被移動(dòng)過(拷貝或整理硬盤),這些簇號(hào)就是固定的。一旦該文件被移動(dòng)了,根據(jù)DOS簇分配原則,這些對(duì)應(yīng)的簇號(hào)就會(huì)改變。由此,我們可以檢查特定的文件指針?biāo)鶎?duì)應(yīng)的絕對(duì)簇號(hào)是否改變了來判斷該文件是否已被非法移動(dòng)。
SFT是DOS在文件管理上的一個(gè)很重要的數(shù)據(jù)結(jié)構(gòu)。只要DOS開始引用一個(gè)文件或設(shè)備,它必然要建立一個(gè)SFT。該表記錄了文件設(shè)備名、目錄特性、設(shè)備特性、文件大小和位置、DDPB(塊設(shè)備)或設(shè)備驅(qū)動(dòng)程序標(biāo)題(字符設(shè)備)的地址,以及打開模式等有關(guān)文件的存儲(chǔ)、訪問和操作的管理信息。其中有幾項(xiàng)數(shù)據(jù)可以用來確定文件在硬盤上的位置,它們是:文件讀寫指針?biāo)鶎?duì)應(yīng)的絕對(duì)簇號(hào),目錄項(xiàng)的相對(duì)索引號(hào)(即目錄項(xiàng)在目錄扇區(qū)中的序號(hào)),目錄項(xiàng)所在扇區(qū)的扇區(qū)號(hào)。
那么怎樣利用這幾項(xiàng)數(shù)據(jù)防拷貝呢?這里所說的防拷貝是指可以拷貝但拷貝后的文件不能執(zhí)行或不能被使用,包括數(shù)據(jù)文件和可執(zhí)行文件。若是可執(zhí)行文件,則其本身包括一段檢測(cè)代碼,用以判斷其本身是否已被非法移動(dòng)。若是數(shù)據(jù)文件,則在使用該數(shù)據(jù)文件的可執(zhí)行文件中包括一段檢測(cè)代碼,來判斷該數(shù)據(jù)文件是否已被非法移動(dòng)。當(dāng)?shù)谝淮螌⒁粋(gè)文件裝入硬盤后,它所占有的硬盤的簇號(hào)已是固定的了。這樣我們就可以作一個(gè)加密程序,在該程序里,約定一個(gè)或多個(gè)秘密的值N,N1,N2…,然后將文件指針分別移動(dòng)到N或N1,N2…,在SFT中取出那幾項(xiàng)硬盤位置數(shù)據(jù),再用約定的秘密算法加以運(yùn)算,就得到了包含被加密文件位置信息的“鑰匙”,將它存于另一個(gè)文件中或干脆附加在被加密文件的末尾。在使用該文件的可執(zhí)行文件的檢測(cè)代碼中,按同樣的算法取得當(dāng)前的“鑰匙”,與先前保存的“鑰匙”相比較,若相等,則說明文件沒有被移動(dòng)過,程序正常執(zhí)行,否則,說明文件已不在先前的位置了,即已被非法移動(dòng)過了,則程序異常執(zhí)行。
我們先看看DOS系統(tǒng)中SFT的具體結(jié)構(gòu),系統(tǒng)有多個(gè)SFT,這個(gè)數(shù)目取決于CONFIG.SYS文件中的FILES=N的N值。在DOS4.0,5.0,6.0中,每個(gè)SFT的長(zhǎng)度是3BH。多個(gè)SFT形成SFT數(shù)組,并不是整個(gè)系統(tǒng)的所有SFT組成一個(gè)連續(xù)的大數(shù)組,而是可能有多個(gè)SFT數(shù)組,每個(gè)數(shù)組由一個(gè)控制塊管理,它們之間由指針連接。每個(gè)SFT數(shù)組的結(jié)構(gòu)如下:
偏移量 長(zhǎng)度 說明
00H DWORD 指向下一個(gè)SFT數(shù)組的指針
04H WORD 本SFT數(shù)組內(nèi)的SFT數(shù)目
06H nBYTEs 由SFT組成的數(shù)組(n=本數(shù)組中SFT數(shù)目*每個(gè)SFT所占字節(jié)數(shù))
我們還必須知道第一個(gè)SFT數(shù)組所在的地址。這可由DOS功能調(diào)用52H先取得DOS的多重表指針,在多重表偏移量04H處即是一個(gè)長(zhǎng)指針,它即指向第一個(gè)SFT數(shù)組的頭部。這樣剩下的SFT數(shù)組的位置也就知道了。
每當(dāng)DOS打開一個(gè)新文件時(shí),DOS就從這些SFT數(shù)組中找一個(gè)空閑的SFT項(xiàng),分配給該文件。以后DOS就用此SFT控制訪問該文件。那么怎樣確定一個(gè)剛打開的文件所對(duì)應(yīng)的SFT項(xiàng)是SFT數(shù)組中的第幾項(xiàng)呢?我們利用文件句柄和文件句柄表。每個(gè)進(jìn)程都有一個(gè)文件句柄表,當(dāng)
[1] [2] [3]
【用Windows終端仿真程序?qū)崿F(xiàn)微機(jī)遠(yuǎn)程文件傳送】相關(guān)文章:
飛行仿真中遙控器驅(qū)動(dòng)程序的設(shè)計(jì)與實(shí)現(xiàn)05-02
地形仿真實(shí)現(xiàn)04-30
Mobile TV技術(shù)介紹及終端實(shí)現(xiàn)05-02
基于Windows CE嵌入式車載導(dǎo)航終端的設(shè)計(jì)04-26
新型雙級(jí)解耦合微機(jī)械陀螺設(shè)計(jì)與仿真04-26
仿真訓(xùn)練系統(tǒng)基于DirectPlay的RTI設(shè)計(jì)與實(shí)現(xiàn)04-27
無(wú)人機(jī)視景仿真的建模與實(shí)現(xiàn)04-27
飛機(jī)校靶視景仿真系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)05-03