2008年12月28日 星期日

FBWF 概說 和 FBWF+WIM 的問題

以下純屬推測...歡迎研究討論

FBWF 其實是 Windows XP-E (Windows® XP Embedded) 所推出的
Windows® XP EmbeddedFile 和 WinPE 有類似的地方
Windows® XP EmbeddedFile 也有人簡稱 XPE
不過我自己為了分別是用 XP-E 和 XPE 來區分
一個是 Windows XP-E 一個是 WinPE 不要搞混
在實質上... XP-E 才是真正用在 崁入式系統...也就是 迷你系統
其實大家要求的 XPE...應該是要去用 XP-E 去做才對
不過這要有相對的知識技術...我是做不來啦(光 XPE 就快不行了)
Windows PE 是用來 維修 測試 或 安裝系統 用的一個臨時系統...

可以看一下這個 pdf 技術文件
按住可移動圖片 相關連結 (須登錄後才能看到)

簡單說 FBWF (File-Based Write Filter)
照字面翻意思大概為 檔案基本寫入過濾器(濾鏡)
技術文件中很多地方用了很多專有名詞可能很難看懂(我也不是很懂)
但簡單來說和我最開始推測的...有一部份是差不多的
簡單說...是用 "寫入篩選快取記憶體" ... 寫入篩選 指的應該就是 Write Filter 的意思
也就是說一部份的重點在這個 "寫入篩選快取記憶體"

只不過 FBWF 照 pdf 文件的原意用途...是用於 檔案保護
不過拿被 XPE 上...卻不是這樣用

這裡先說 pdf 文件中說的 FBWF 大至上的原理
程度較高的...看文件中的 結構說明圖片 應該就有大概的瞭解

要簡單說的話是 磁碟 + 快取
也就是 磁碟 和 快取 的結合

以 pdf 文件中的名詞來說...也就是

受保護的磁碟區 + 寫入篩選快取記憶體 (Write Filter) = 複合檔案系統檢視

而 複合檔案系統檢視 就是我們實際上看到的 檔案系統資料

從某個角度來看和 WIM 開 寫入模式 有點像
WIM 開 寫入模式 的情況
WIM 檔 + 暫存目錄 = 實際看到的檔案系統資料

把上面2個用意義來表示

原始資料 + 變動資料 = 實際看到(當前)資料

(註: WIM 在解掛時...才會把 暫存目錄 中的 變動資料 重新打包回 WIM檔 中)


*************************************
前面有提到 FBWF 一部份的功能在於 保護檔案
也就是 FBWF 的功能在於
如果 啟用的 FBWF 的 保護檔案
不管怎麼修改檔案...實際上只是在 寫入篩選快取記憶體
只要重開機就還原了

受保護的磁碟區(原始資料) + 寫入篩選快取記憶體(實際上的變更資料) = 複合檔案系統檢視(實際上的檔案系統資料)

簡單說... XPE 使用了 FBWF 中的 寫入篩選快取記憶體 來產生額外的可用空間

*************************************
WIM 和 FBWF 而產生的 BUG:

我說的 WIM+FBWF BUG 不是 FBWF 的 BUG
而是指 "WIM+FBWF" BUG

WIM 的部份這裡我不多說 (簡單說就是掛載而以)

如果把 WIM 掛載 和 FBWF 會發生什麼情況咧
照我前面說的 FBWF 大概的原理...這裡我用意義簡化一下

原來磁區的檔案系統資料 + 寫入篩選快取記憶體 = 實際看到的檔案系統資料

如果在 FBWF 啟動後...要用 WIM 掛載...會因為 FBWF 而不能掛載
簡單說因為 FBWF 控制了 "磁區層級" "檔案層級" 的管理
這2個 我也不太懂...在文章中...這2個只是很不起眼的名詞
不過看文章就是要知道重點...就算不知道那個 名詞 在說什麼

因為電腦很多東西都很喜歡分 層級...像 網路 也分什麼 OSI 7層

雖然不知道 "磁區層級" "檔案層級" 的意義
因為 pdf 文件中也沒詳細說明
不過大至上還是推測的出來...

想簡單一點...就是 系統處理 的動作
而將其分為幾個 層級(不同的應用方面和處理動作)
(層級 之間也可能有連帶關係)

例如: 類似像一般使用用 虛擬光碟 掛載 映像檔
當然所 對應 的 層級 可能不一樣
例如 搞不好有 "裝置層" 之類的

虛擬光碟 就是在原本系統的 相對應的層級 中加入一台 光碟
而光是增加 裝置 也不行...也要在別的 層級 做相對應的動作
例如 負責管理 C: D: E: 這些 磁碟代號 的層級...加入 裝置 的 磁碟代號

大家也可以試一下 subst 這個指令
輸入 subst /? 就知道其用途了...這就是一種應用

所以雖然 不知道 "磁區層級" "檔案層級" 的會處理的動作和應用
(不過看字意大概也知道和什麼有關係吧)
不過... WIM 和 FBWF 很明顯...在這裡有了衝突

WIM 是掛載到 目錄 ...基本上應該是 "檔案層級" 的應用
FBWF 應該是包含 "磁區層級" 和 "檔案層級"

這裡可以分析推測一下衝突的原理
前面有說到 啟動 FBWF 後才掛載 WIM 的情況
這可能是因為 FBWF 的關係...FBWF 的原理是

原來磁區的檔案系統資料 + 寫入篩選快取記憶體 = 實際看到的檔案系統資料

WIM 不是 "原來磁區的檔案系統結構" 也不是 "寫入篩選快取記憶體"
除非 WIM 掛載可以加入到 FBWF 的 "原來磁區的檔案系統結構" 或 "寫入篩選快取記憶體"
否則就不會變成 "實際看到的檔案系統結構"

而這也可以說明了先掛載 WIM 的情況

前面有提到以 寫入模式 掛載時:
WIM 檔 + 暫存目錄 = 實際看到的檔案系統資料

而如果是一般模式:
WIM 檔 = 實際看到的檔案系統資料 (掛載的目錄為 唯讀)

也就是說...先掛載 WIM 的情況在 層級 的結果上是 應用 WIM 處理後的情況
而這之後才使用 FBWF 就會變成下面的情況

先掛載 WIM 應用的結果:
一般模式:
WIM 檔 = 實際看到的檔案系統資料A
寫入模式:
WIM 檔 + 暫存目錄 = 實際看到的檔案系統資料A

後啟動 FBWF 結果:
原來磁區的檔案系統資料 = 檔案系統結構A ... (因為 WIM 先應用了)

FBWF本來的應用:
原來磁區的檔案系統資料 + 寫入篩選快取記憶體 = 實際看到的系統資料(檔案系統資料B)

2個情況加在一起最後等於:
WIM 掛載後應用結果的檔案系統資料 A + 寫入篩選快取記憶體 = 實際看到的系統資料(檔案系統資料B)

而且別忘了 FBWF 的檔案變動 是用 "寫入篩選快取記憶體"
所以 WIM 一般掛載 時的 "唯讀" 情況...因為 FBWF 是寫入 "寫入篩選快取記憶體" ...而不存在了


************************************

最後...這篇長文...有些可能說的不是很正確
因為我不是專業技術人員
大多是參考了資料和測試...所推判的結果
但主要是要解釋 原因 情況 問題 大概的 "意義"
所以細部的地方不一定對...只是針對 "意義" 上說明大概的原理

簡單的來說...意義 就是 WIM+FBWF 之間有衝突 而有 BUG 可以利用
而不知道實在搞不清楚的人...在實作測試中就可以發現
所以還是多多 DIY 做測試吧!