Microsoft make things complicated
最近研究寫NTFS驅(qū)動下的讀寫壓縮/稀疏文件功能的時候被微軟雷到了。
真不愧“微軟讓事情變得復(fù)雜 (Microsoft make things complicated)”的傳聞。
壓縮/占位流描述組居然可以分別存放到兩個屬性中.......徹底囧掉了......為了省幾個字節(jié)的空間,代碼復(fù)雜度起碼提高一個數(shù)量級,犯得上么.......
?
然后又發(fā)現(xiàn)一個更囧的情況:NTFS屬性中的流可以被任意拆開描述,一個10個簇長的流可以被寫成10個1個簇的流!
比如:
11 08 10
LCN 10,LENGTH 08
完成可以被改成:
11 01 10 11 01 01 11 01 01 11 01 01 11 01 01 11 01 01 11 01 01 11 01 01
?
-_-b
?
也就是說,16個簇的壓縮單元可能被寫成16個流的描述,而不受壓縮單元尺寸限制的稀疏文件,則存在無限可能......
而且還都能通過CHKDSK的檢查并能被WINDOWS正常訪問。
更可悲的是:這些流可能被拆開存放于多個屬性中......雖然WINDOWS自身并不會這樣做,但只要這是合法的,那別的程序就只能無條件的支持......
?
綜上。非常簡單的壓縮/稀疏文件操作邏輯,理論上有演變成無聊,復(fù)雜,效率低下的多屬性下流描述的修改操作的可能,而且事實(shí)上,程序必須處理此種狀況。代碼復(fù)雜度因?yàn)檫@個小小的設(shè)計巨增。
?
?
勞資痛恨微軟那幫BT!