Windows文件系統過濾驅動程序介紹
文件系統過濾驅動程序攔截針對某個文件系統或另一個文件系統過濾驅動程序的請求。通過在請求到達預期目標之前攔截請求,過濾器驅動程序可以擴展或替換由請求的原始目標提供的功能。過濾器驅動程序概念是WindowsI/O子系統最強大的體系結構特性之一。過濾器可以通過簡單地將自己附加到現有設備上來為該設備的功能增加價值。當然,過濾設備不需要更改底層設備的驅動程序。
在Windows系統中,最常見也是最強大的一個地方是在文件系統上插入過濾器。文件系統過濾器在I/O操作到達文件系統之前攔截I/O操作(來自應用程序和系統本身)。這使它們能夠監視、跟蹤、管理、操作,甚至在文件系統看到I/O操作之前接受或拒絕它們。大多數人熟悉的文件系統過濾器類型可能是防病毒過濾器。這種類型的過濾器通常攔截文件打開請求,并在過濾器(或者更可能是在用戶模式下運行的相關服務)掃描正在打開的文件以查找病毒時將其掛起。如果發現任何病毒,則可以取消打開的請求。如果未發現病毒,則允許打開的請求正常完成。
文件系統過濾器通常用于從剛才描述的防病毒和惡意軟件掃描,到軟件許可證跟蹤和管理,到審計和更改文件跟蹤,再到訪問透明數據加密和解密。文件系統過濾器還可以用于其他不太明顯的目的。例如,由于文件系統過濾器可以查看哪些文件被創建和寫入,因此它們通常在備份產品和分層存儲子系統中發揮關鍵作用。由于文件系統過濾器能夠成為應用程序看到的文件系統“名稱空間”的第一個解釋器,因此它們還可以執行強大的文件重定向操作,例如使遠程文件(例如存儲在云中的某個地方的文件)看起來是本地的。
自從在WindowsXPSP2中引入以來,文件系統迷你過濾器模型已經成為實現文件系統過濾器的首選機制。這是有充分理由的,因為minfilter模型為文件系統過濾器驅動程序開發提供了一個優秀的組織和支持框架。由于GitHub上有相當好的文檔和一組重要的示例,許多開發人員認為編寫文件系統minfilter完全在他們的能力范圍內。他們是對的,只要他們在一定的范圍內。
標準迷你過濾器驅動程序
最常見的文件系統類型是minfilter,它監視并可能跟蹤或記錄在文件系統級別執行的各種操作。某些迷你過濾器(如防病毒掃描程序)甚至可能批準或不批準某些操作。但是,這些篩選器不參與更改它們篩選的文件中數據的視圖或大小。我們稱這樣的過濾器為標準迷你過濾器,因為它們代表了存在的絕大多數文件系統迷你過濾器。
隔離迷你過濾器驅動程序
隔離迷你過濾器驅動程序是一個Windows文件系統迷你過濾器驅動程序,它將文件數據的視圖與同一文件的實際底層數據分開。隔離迷你過濾器的典型示例是訪問透明加密/解密過濾器。隔離迷你過濾器使用“相同堆棧”概念,并通過為每個視圖提供唯一的緩存部分來提供不同的視圖。透明的加密隔離過濾器驅動程序可以創建訪問數據的兩個視圖,一個是從本地存儲加密的,因此您的數據始終在本地磁盤中加密,另一個是解密給授權用戶,對于每個打開的文件,過濾器驅動程序將創建一個唯一的內存緩存,因此如果用戶或進程具有不同的權限,則不會看到相同的數據視圖。當進程或用戶被授權訪問加密文件時,過濾器驅動程序將在讀取請求期間解密內存中的數據,因此被授權的進程可以獲得純文本,或者將獲得加密文本。當加密過濾器驅動程序關閉時,加密文件無法訪問,當應用程序打開加密文件時,它將獲得密文,因此沒有啟用加密過濾器驅動程序,任何人都無法讀取加密文件。
隔離過濾器將文件數據的視圖與文件系統存儲的實際底層數據分開(或“隔離”)。編寫這種類型的Minifilter通常與編寫標準的Windows文件系統一樣復雜,因為它涉及Minifilter、Windows緩存管理器和Windows內存管理器之間的直接和密切的交互。事實上,一些有經驗的開發者認為Isolationminfilter甚至比文件系統開發更困難,因為當你在編寫Isolationminfilter時,你必須有效地將Windows文件系統的實現“適配”到FilterManager提供的API中。因此,除了標準迷你過濾器的開發人員面臨的挑戰之外,隔離迷你過濾器的開發人員還要處理許多明顯更復雜的問題。
為了實現文件數據與實際底層數據的分離視圖,我們需要兩種類型的文件對象,第一個文件對象是上層文件對象,它是與應用程序相關聯的開放實例,它代表應用程序的文件視圖,它包含解密數據,數據被隔離過濾器放入緩存,與緩存管理器協同工作。我們稱為的另一個文件對象是影子文件對象,它由隔離迷你過濾器創建,并表示迷你過濾器(以及底層文件系統)對文件的視圖。此文件對象的緩存部分中的數據是加密的,隔離迷你過濾器使用影子文件對象與底層文件系統進行交互。影子文件對象是在IRP_MJ_CREATE調度處理程序期間由隔離過濾器驅動程序創建的,并將該影子文件對象發送到底層FSD。為了控制上層文件對象,隔離過濾器將填充文件對象結構的FsContext/FsContext2字段,現在上層文件對象屬于隔離過濾器,為了控制緩存,隔離過濾器還將設置SOP結構來指向由過濾器創建的控制數據部分。
隔離過濾器驅動程序的最大挑戰是處理由用戶發送的上層文件對象的所有IOs,如果上層文件對象被發送到NTFS,NTFS將在一個名為NtfsDecodeFileObject的函數中爆炸。開發隔離迷你過濾器更像是開發完整的Windows文件系統,而不是開發標準迷你過濾器,因為它需要與Windows緩存管理器和內存管理器密切交互。因此,對于大多數不尋求成為Windows文件系統專家的開發人員來說,開發隔離迷你過濾器不太可能是一項能夠成功完成的任務。
用于虛擬云存儲的隔離迷你過濾器:隔離迷你過濾器模型不僅用于透明數據加密和解密系統。IsolationMinifilter模型也可用于虛擬云存儲,它可以向用戶呈現虛擬文件結構視圖,該視圖的數據與遠程云存儲相關聯,當用戶讀取虛擬文件的數據時,過濾器可以逐塊拉回數據。
編輯:黃飛
-
WINDOWS
+關注
關注
3文章
3541瀏覽量
88622 -
文件系統
+關注
關注
0文章
284瀏覽量
19904 -
過濾器
+關注
關注
1文章
428瀏覽量
19593 -
SDK
+關注
關注
3文章
1035瀏覽量
45899 -
解釋器
+關注
關注
0文章
103瀏覽量
6509
原文標題:Easefilter--Windows文件系統隔離過濾器驅動SDK
文章出處:【微信號:哲想軟件,微信公眾號:哲想軟件】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論