處理Windows 95的長文件名中斷詳解_第1頁
處理Windows 95的長文件名中斷詳解_第2頁
處理Windows 95的長文件名中斷詳解_第3頁
處理Windows 95的長文件名中斷詳解_第4頁
處理Windows 95的長文件名中斷詳解_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、處理Windows 95的長文件名中斷詳解Gold Eagle 很多朋友在DOS環(huán)境下寫過程序,而且有許多和文件處理有關(guān)。眾所周知,DOS下的文件名為8.3的格式,而Windows 95開始使用長文件名格式,以前的DOS下的程序只能按8.3格式來處理這些長文件名,讀取文件或目錄名時還好,最多只是看起來有些不順眼(都變成PROGRA1、MYPROD3.EXE這樣的文件名了),要創(chuàng)建新的目錄和文件時就麻煩了,因為以前的DOS下的開發(fā)環(huán)境(如Tubro C 2.0, Borland C+ 3.1, Turbo Pascal等)沒有處理長文件名的函數(shù),所有的長文件名在以前的函數(shù)中都被截尾處理了。找了一

2、些資料,發(fā)現(xiàn)Windows 95提供了處理長文件名的中斷,翻譯并整理成文,希望對大家有點幫助。 本文介紹的所有功能都是通過INT 21H來調(diào)用的。 Windows 95是通過21H號中斷的71H子中斷來處理長文件名的,列表如下: AL值 功能 = = 0DH 重置驅(qū)動器 39H 創(chuàng)建子目錄 3AH 刪除子目錄 3BH 改變當(dāng)前目錄 41H 刪除文件 43H 讀取/設(shè)置文件屬性 47H 得到當(dāng)前目錄 4EH 查找第一個符合條件的文件(findfirst) 4FH 查找下一個符合條件的文件(findnext) 56H 移動(改名)文件 60H TRUENAME 6CH 創(chuàng)建/打開文件 A0H 讀取

3、卷信息 A1H 結(jié)束文件查找(findfirst/findnext) A6H 讀取文件信息 A7H 時間轉(zhuǎn)換 A8H 產(chǎn)生短文件名(8.3格式) A9H 服務(wù)器創(chuàng)建/打開文件 AAH 開始/結(jié)束SUBST 中斷調(diào)用后CF置位表示出錯(AX存儲出錯代碼),CF清零表示成功 說明: 如果返回出錯代碼7100H,說明不支持此功能,將調(diào)用老式的中斷 為與老版本DOS兼容(7.0以前),在調(diào)用前先將CF置位以確認(rèn)在退出 時它被置位 另外還有幾個功能是未公開的:AL=A2H,A3H,A4H,A5H,其中AL=A2H的功能已知,與AL=4FH功能類似,這幾個功能是Windows內(nèi)部使用的,在本文就不介紹了。

4、一、重置驅(qū)動器 入口:AX = 710DH CX = 0000H 將文件系統(tǒng)緩沖區(qū)(buffer)實際寫盤,并重置驅(qū)動器 0001H 將文件系統(tǒng)緩沖區(qū)(buffer)和緩存(cache)實際寫盤, 并重置驅(qū)動器 0002H 重新掛接DriveSpace卷 DX = 驅(qū)動器號(00H = A:,01H = B:,等等) 出口: CF清零 對應(yīng)老式的調(diào)用:AH=0DH二、創(chuàng)建子目錄 入口:AX = 7139H DS:DX -> 長目錄名(ASCIZ串) 出口:中斷調(diào)用后CF置位表示出錯(AX存儲出錯代碼),CF清零表示成功 對應(yīng)老式的調(diào)用:AH=39H三、刪除子目錄 入口:AX = 713A

5、H DS:DX -> 要刪除的長目錄名(ASCIZ串) 出口:中斷調(diào)用后CF置位表示出錯(AX存儲出錯代碼),CF清零表示成功 對應(yīng)老式的調(diào)用:AH=3AH四、改變當(dāng)前目錄 入口:AX = 713BH DS:DX -> 要設(shè)為當(dāng)前目錄的長目錄名(ASCIZ串) 出口:中斷調(diào)用后CF置位表示出錯(AX存儲出錯代碼),CF清零表示成功 對應(yīng)老式的調(diào)用:AH=3BH五、刪除文件 入口:AX = 7141H DS:DX -> 要刪除的文件的長文件名(ASCIZ串) SI = 通配符和屬性標(biāo)志 0000H 不支持通配符,搜索屬性也被忽略 0001H 支持通配符,只有名字和屬性匹配的才刪

6、除 CL = 搜索屬性 CH = 必匹配(must-match)屬性 出口:中斷調(diào)用后CF置位表示出錯(AX存儲出錯代碼),CF清零表示成功 對應(yīng)老式的調(diào)用:AH=41H六、讀取/設(shè)置文件屬性 入口:AX = 7143H DS:DX -> 文件名(ASCIZ串) BL = 00H 讀取屬性 返回:CX = 文件屬性 01H 設(shè)置屬性 CX = 文件屬性 02H 讀取壓縮文件的物理大小 返回:DX:AX = 文件的實際使用磁盤空間字節(jié)數(shù) 03H 設(shè)置最后寫入日期/時間 DI = 新的最后寫入日期 CX = 新的最后寫入時間 04H 讀取最后寫入日期/時間 返回:DI = 最后寫入日期 CX

7、 = 最后寫入時間 05H 設(shè)置最后訪問日期 DI = 新的最后訪問日期 06H 讀取最后訪問日期 返回:DI = 最后訪問日期 07H 設(shè)置創(chuàng)建日期/時間 DI = 新的創(chuàng)建日期 CX = 新的創(chuàng)建時間 SI = 百分秒數(shù) 08h 讀取創(chuàng)建日期/時間 返回:DI = 創(chuàng)建日期 CX = 創(chuàng)建時間 SI = 百分秒數(shù) 出口:中斷調(diào)用后CF置位表示出錯(AX存儲出錯代碼),CF清零表示成功 成功時返回值請參看本小節(jié)的“入口”部分 對應(yīng)老式的調(diào)用:AH=43H 請參考:附一、附二、附三七、得到當(dāng)前目錄 入口:AX = 7147H DL = 驅(qū)動器號 (00H = 當(dāng)前驅(qū)動器,01H = A:,等等

8、) DS:SI -> 用于存儲目錄名(ASCIZ串)的內(nèi)存區(qū) 出口:中斷調(diào)用后CF置位表示出錯(AX存儲出錯代碼),CF清零表示成功 目錄名將存儲于DS:SI指向的內(nèi)存區(qū) 說明:返回的目錄名不包含驅(qū)動器字母、冒號或打頭的反斜杠,而且不一 定是長文件名,這個功能返回的是用于改變的此目錄的路徑,可能 包含長短文件名混合的字符串。 提供的內(nèi)存區(qū)(DS:SI指向的)的最小空間應(yīng)該由AX=71A0H功能測 定。 對應(yīng)老式的調(diào)用:AH=47H八、查找第一個符合條件的文件 入口:AX = 714EH CL = 允許的屬性(位0和位5忽略) CH = 必須的屬性 SI = 0000h 使用Windows

9、 95的64位文件時間格式 0001h 使用MS-DOS的日期/時間值,在雙字中日期為高位, 時間為低位 DS:DX -> 帶通配符的文件名(“*”和“*.*”都區(qū)配所有文件) ES:DI -> 用于存儲FindData結(jié)構(gòu)的空間 出口:中斷調(diào)用后CF置位表示出錯(AX存儲出錯代碼),CF清零表示成功 成功時返回:AX = filefind handle (用于繼續(xù)搜索) CX = Unicode轉(zhuǎn)換標(biāo)志 位0 返回的長文件名含有無法轉(zhuǎn)換的Unicode 字符,被下劃線替代 位1 返回的短文件名含有無法轉(zhuǎn)換的Unicode 字符,被下劃線替代 說明:這個功能僅當(dāng)IFSMgr運行時有

10、效,而不是DOS 7.0純DOS模式 應(yīng)用程序應(yīng)在搜索完成后立即調(diào)用AX=71A1H功能結(jié)束搜索 對應(yīng)老式的調(diào)用:AH=4EH 請參考:附一、附二、附三、附四 九、查找下一個符合條件的文件 入口:AX = 714FH BX = filefind handle(由功能AX=714EH來) SI = 0000h 使用Windows 95的64位文件時間格式 0001h 使用MS-DOS的日期/時間值,在雙字中日期為高位, 時間為低位 ES:DI -> 用于存儲FindData結(jié)構(gòu)的空間 出口:中斷調(diào)用后CF置位表示出錯(AX存儲出錯代碼),CF清零表示成功 成功時返回:CX = Unicod

11、e轉(zhuǎn)換標(biāo)志 位0 返回的長文件名含有無法轉(zhuǎn)換的Unicode 字符,被下劃線替代 位1 返回的短文件名含有無法轉(zhuǎn)換的Unicode 字符,被下劃線替代 說明:這個功能僅當(dāng)IFSMgr運行時有效,而不是DOS 7.0純DOS模式 對應(yīng)老式的調(diào)用:AH=4FH 請參考:附二、附三、附四十、移動(改名)文件 入口:AX = 7156H DS:DX -> 舊的文件名(ASCIZ) ES:DI -> 新的文件名(ASCIZ) 出口:中斷調(diào)用后CF置位表示出錯(AX存儲出錯代碼),CF清零表示成功 說明:文件可以改名到不同的目錄,但必須是同一驅(qū)動器。 對應(yīng)老式的調(diào)用:AH=56H十一、TRUE

12、NAME 入口:AX = 7160H CL = 00H 獲取規(guī)范路徑 01H 獲取短文件名 02H 獲取規(guī)范化長文件名或路徑 CH = SUBST擴(kuò)展標(biāo)志 00H 返回的路徑是不包含SUBST的盤符的真實路徑 80H 返回的路徑可以包含SUBST的盤符 DS:SI -> 文件或路徑名(ASCIZ串),長短均可 ES:DI -> 261字節(jié)的存儲區(qū)用于存放規(guī)范路徑或長文件名 (CL=00H或02H) 或67字節(jié)(可能是128字節(jié))的存儲區(qū)用于存放短文件名 (CL=00H或02H) 出口:中斷調(diào)用后CF置位表示出錯(AX存儲出錯代碼),CF清零表示成功 出錯碼:02H 目錄中找不到此文

13、件(目錄)或僅指定了盤符 03H 無效路徑或無效盤符 成功時ES:DI指向的存儲區(qū)寫入了返回的路徑或文件名 對應(yīng)老式的調(diào)用:AH=60H十二、創(chuàng)建/打開文件 入口:AX = 716CH BX = 訪問模式和共享標(biāo)志(附五) CX = 屬性 DX = 打開模式(附六) DS:SI -> 文件名(ASCIZ串) DI = 別名提示(在短文件名為了消除二義性的數(shù)字) 出口:中斷調(diào)用后CF置位表示出錯(AX存儲出錯代碼),CF清零表示成功 成功時:AX = 文件句柄 CX = 0001H 文件被打開 0002H 文件被創(chuàng)建 0003H 文件被替換 對應(yīng)老式的調(diào)用:AH=6CH 請參考:附一,附五

14、,附六 十三、讀取卷信息 入口:AX = 71A0H DS:DX -> 根目錄名(ASCIZ串),如“C:” ES:DI -> 存儲文件系統(tǒng)名的內(nèi)存區(qū)(一般32字節(jié)就夠了) CX = ES:DI指向內(nèi)存區(qū)的大小 出口:中斷調(diào)用后CF置位表示出錯(AX存儲出錯代碼),CF清零表示成功 成功時:BX = 文件系統(tǒng)標(biāo)志 CX = 文件名最大長度(通常是255) DX = 路徑名最大長度(通常是260) ES:DI指向的內(nèi)存區(qū)被填充為“FAT”、“NTFS”、 “CDFS”等 BUG:Windows 95 SP1中此功能對于CD-ROM會返回DX=0000H 對應(yīng)老式的調(diào)用:無 請參考:附

15、七十四、結(jié)束文件查找 入口:AX = 71A1H BX = filefind handle (從功能AX=714EH來) 出口:中斷調(diào)用后CF置位表示出錯(AX存儲出錯代碼),CF清零表示成功 說明:由功能AX=714EH開始文件搜索后必須調(diào)用此功能來釋放filefind hadle 這個功能僅當(dāng)IFSMgr運行時有效,而不是DOS 7.0純DOS模式 對應(yīng)老式的調(diào)用:無十五、讀取文件信息 入口:AX = 71A6H BX = 文件名柄 DS:DX -> 用于存儲文件信息的內(nèi)存區(qū) CF置位 出口:中斷調(diào)用后CF置位表示出錯(AX存儲出錯代碼),CF清零表示成功 成功時DS:DX指向的內(nèi)存

16、區(qū)被寫入文件信息 對應(yīng)老式的調(diào)用:無 請參考:附八十六、時間轉(zhuǎn)換 入口:AX = 71A7H DS:SI -> QWORD格式文件時間 BL = 00H 文件時間到DOS時間 返回:CX = DOS時間 DX = DOS日期 BH = 百分秒數(shù) 01H DOS時間到文件時間 CX = DOS時間 DX = DOS日期 BH = 百分秒數(shù) 返回:DS:SI指向的內(nèi)存區(qū)被填充 出口:中斷調(diào)用后CF置位表示出錯(AX存儲出錯代碼),CF清零表示成功 成功時的其余返回數(shù)據(jù)請看“入口”部分 說明:BL=00H時,如果文件時間不在01/01/1980和12/31/2107之間失敗 對應(yīng)老式的調(diào)用:無

17、 請參考:附八十七、產(chǎn)生短文件名(8.3格式) 入口:AX = 71A8H DS:SI -> 長文件名(ASCIZ串),允許不帶路徑 ES:DI -> 用于存儲短文件名(ASCIZ串)的內(nèi)存區(qū) DH = 短文件名格式 00H 11字符/FCB文件名格式 01H DOS 8.3 DL = 字符集 位7-4:短文件名的字符集 位3-0:長文件名的字符集 00h Windows ANSI 01h 當(dāng)前的OEM字符集 02h Unicode 出口:中斷調(diào)用后CF置位表示出錯(AX存儲出錯代碼),CF清零表示成功 對應(yīng)老式的調(diào)用:無十八、服務(wù)器創(chuàng)建/打開文件 入口:AX = 71A9H BX

18、 = 訪問模式和共享標(biāo)志(附五) CX = 屬性 DX = 打開模式(附六) DS:SI -> 文件名(ASCIZ串) DI = 別名提示(在短文件名為了消除二義性的數(shù)字) 出口:中斷調(diào)用后CF置位表示出錯(AX存儲出錯代碼),CF清零表示成功 成功時:AX = 全局文件句柄 CX = 0001H 文件被打開 0002H 文件被創(chuàng)建 0003H 文件被替換 說明:僅用于實模式服務(wù)器 對應(yīng)老式的調(diào)用:無 請參考:附一,附五,附六十九、開始/結(jié)束SUBST 入口:AX = 71AAH BH = 00H 開始SUBST DS:DX指向的內(nèi)存區(qū)用于輸入 01H 結(jié)束SUBST 不用指定DS:DX

19、 02H 查詢SUBST DS:DX指向的內(nèi)存區(qū)用于輸出 BL = 驅(qū)動器號 (00H=默認(rèn),01H=A:,等等) DS:DX -> 與驅(qū)動器關(guān)聯(lián)的路徑名(ASCIZ串) 出口:中斷調(diào)用后CF置位表示出錯(AX存儲出錯代碼),CF清零表示成功 說明:只有BH=00H時BL才可為00H 對應(yīng)老式的調(diào)用:無二十、最后說明 本文的原始資料來源于Ralf Brown's Interrupt List(英文版),這個中斷大全包含的內(nèi)容相當(dāng)豐富,實在是一份很好的編程參考資料。 由于本人水平有限,加上時間匆忙,翻譯和整理得不是很好,不盡人意之處,請多多包含。若有不正確的地方,請指正。 大家可以

20、將本文隨意傳播,以服務(wù)于更多朋友,但敬請各位傳播本文時務(wù)必保持其完整性,多謝了。 過些時間我可能會寫一些應(yīng)用這些中斷調(diào)用的例程,作為對本文的補充,完成后,會通過郵件列表geprogram(金鷹的程序員天地)發(fā)布,有興趣的朋友可以加入此郵件列表,方法是: 1、發(fā)一封空郵件到 sml-geprogram-subscribe 2、回復(fù)您收到的一封確認(rèn)信 與我聯(lián)系,請Email至:goldeagle 或:pengyin Gold EagleNov.26,1999 于廣東東莞附一:文件屬性各位的意義: 位 描述 = = 7-8 保留(在Novell Netware中被使用) 6 未使用 5 存檔(A)

21、4 目錄(D) 3 卷標(biāo) 2 系統(tǒng)(S) 1 隱藏(H) 0 只讀(R)附二:文件日期格式 位 描述 = = 15-9 年份減去1980 8-5 月 4-0 日附三:文件時間格式 位 描述 = = 15-11 小時(0-23) 10-5 分 4-0 秒/2附四:Windows 95長文件名FindData結(jié)構(gòu) 偏移 長度 描述 = = = 00H DWORD 文件屬性位0-6為標(biāo)準(zhǔn)文件屬性位8:臨時文件 04H QWORD 文件創(chuàng)建時間(從1/1/1601開始的100ns數(shù)) 0CH QWORD 最后訪問時間 14H QWORD 最后修改時間 1CH DWORD 文件長度(高32位) 20H DWORD 文件長度(高32位) 24H 8 BYTEs 保留 (apparently unused) 2CH 260 BYTEs 長文件名(ASCIZ串) 130H 14 BYTEs 用于向后兼容的短文件名(ASCIZ串) 說明:在Windows95B中,如果目錄結(jié)構(gòu)中不包含長文件名信息,則返回的短 文件名為空。由于這個原因,請使用長文件(偏移量2CH)。附五、Windows 95的訪問/共享模式 位 描述 = = 2-0 文

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論