1. 程式人生 > >檔案系統Minifilter驅動(一)

檔案系統Minifilter驅動(一)

檔案系統Minifilter驅動

宣告

本系列文章源於WDK,所有權利歸原作者所有,翻譯的目的只為交流和學習。

說明

所有preoperation及postoperation均簡寫為pre-oper和post-oper

所有檔案系統過濾驅動均簡寫為FSFD

所有基於IRP的I/O即IRP-based I/O均簡寫為IRP-I/O

版本

20090220

Filter管理器和Minifilter驅動架構

Filter管理器是一個核心模式驅動,它遵照legacy檔案系統filter模型並暴露了FSFD中必需的一般功能。利用這些功能,第三方開發者可以寫minifilter驅動,這樣的驅動比legacy FSFD更易於開發,因此縮短了開發過程同時製造出更高質量、更靈活的驅動。

本章包括: 

一、Filter管理器概念

Filter管理器隨Windows一起被安裝,但它只在一個minifilter驅動被載入時才會起作用。Filter管理器繫結到目標卷的檔案系統棧上。Minifilter驅動為它要過濾的I/O操作而通過向filter管理器註冊來間接繫結到檔案系統棧上。

Legacy過濾驅動在檔案系統I/O棧中的位置,相對於其他過濾驅動來說是在系統啟動時由它的載入順序組決定的。例如,一個antivirus過濾驅動在棧中的位置應該高於一個replication過濾驅動,因而它能在檔案被複制到遠端伺服器之前探測病毒並消除檔案中的病毒。因此,FSFilter Anti-Virus載入順序組中的過濾驅動的載入要先於FSFilter Replication組中的過濾驅動。每一個載入順序組都有一個相應的系統定義的類和INF檔案中要使用的類GUID。

像legacy過濾驅動一樣,minifilter驅動的繫結也按照一個特定的順序。不過,繫結體的順序是由一個叫altitude的唯一識別符號決定的。Minifilter驅動在特定捲上的一個特定altitude的繫結體被稱為這個minifilter驅動的一個instance。

Minifilter驅動的altitude確保它的例項總是在相應的位置被載入,它決定filter管理器以什麼順序來呼叫minifilter驅動來處理I/O。Altitudes由微軟分配和管理。

下圖展示了一個用filter管理器簡化後的I/O棧和三個minifilter驅動。

用Filter管理器簡化後的I/O棧和Minifilter驅動

Minifilter驅動能過濾IRP-I/O操作、fast I/O和FSFilter callback操作。對每一個它要過濾的I/O操作它都可以註冊一個pre-oper callback例程,一個post-oper callback 例程或二者都註冊。當處理一個I/O操作時,filter管理器呼叫每個minifilter為此操作註冊的callback例程。當該callback例程返回時,filter管理器呼叫下一minifilter驅動為此操作註冊的callback例程。

舉個例子,假設上圖中的三個minifilter驅動都為同一I/O操作註冊了callback例程,則filter管理器會以altitude由高到低的順序(A,B,C)呼叫它們的pre-oper callback例程,然後把此I/O操作轉寄給下一較低階的驅動進一步處理。當filter管理器接收到此I/O請求的完成時,它以相反的順序即由低到高(C,B,A)呼叫每一個minifilter驅動的post-oper callback例程。

為了同legacy過濾驅動協同工作,filter管理器可以繫結filter裝置物件到同一個檔案系統I/O棧的多個位置。每一個filter管理器的filter裝置物件都叫做一個frame。從legacy過濾驅動的角度來說,每一個filter管理器frame僅僅是另外的一個legacy過濾驅動。

每一個filter管理器frame都表示一個altitude區間。如果某個legacy過濾驅動被繫結到檔案系統棧上,系統就為在該legacy過濾驅動之上或之下的altitude範圍繫結一個filter管理器frame,來確保minifilter驅動繫結到正確的位置上。

如果某個minifilter驅動被解除安裝並重載入,則它會被重載入到同一frame(它從其中被解除安裝)中的同一altitude上。

用兩個Filter管理器Frame和一個legacy過濾驅動簡化後的I/O棧

相關推薦

檔案系統Minifilter驅動()

檔案系統Minifilter驅動 宣告: 本系列文章源於WDK,所有權利歸原作者所有,翻譯的目的只為交流和學習。 說明: 所有preoperation及postoperation均簡寫為pre-oper和post-oper 所有檔案系統過濾驅動均簡寫為FS

檔案系統Minifilter驅動(十)

在Minifilter驅動中管理上下文 上下文是minifilter驅動定義的一個結構,可以與一個filter管理器物件關聯起來. Minifilter驅動可以為以下型別的物件建立和設定上下文:  · 檔案(僅Vista及以後版本.)  · 例項 · 卷 · 流

檔案系統Minifilter驅動(七)

寫Minifilter驅動的DriverEntry例程 每一個檔案系統minifilter驅動都必須有一個DriverEntry 例程.當minifilter驅動被載入時該例程會被呼叫.  DriverEntry例程執行全域性初始化,註冊minifilter驅動並初始

檔案系統Minifilter驅動(四)

四、控制Filter管理器操作 在早於Vista的Windows中,filter管理器的操作由登錄檔中下列REG_DWORD AttachWhenLoaded值控制: HKLM/System/CurrentControlSet/Services/FltMgr 當At

檔案系統Minifilter驅動(八)

寫Callback例程的Pre-oper和Post-oper 一個minifilter驅動可以在它的DriverEntry例程中為它需要過濾的任何型別的I/O操作註冊至多一個pre-oper callback例程和至多一個post-oper callback例程.  Mini

檔案系統過濾驅動開發()—Win32底層開發小組

    宣告:本文無太多新意,只是介紹下學習經驗,大神級人物(如總監大人)請略過,謝謝合作>_<     吐槽一下:學驅動算起來也是從上學期9月份開始吧,之前在家買了<Windows驅動開發技術詳解>這本書,搭了個環境之後,其實也沒碰很多,編了個經典的Hello,World!之後就無

整理份我對Windows檔案系統過濾驅動的sFilter工程程式碼的詳細說明(精華僑)

標 題: 【分享】整理一份我對Windows檔案系統過濾驅動的sFilter工程程式碼的詳細說明 作 者: tianhz 時 間: 2012-06-19,18:32:07 鏈 接: http://bbs.pediy.com/showthread.php?t=1523

大資料筆記之分散式檔案系統HDFS筆記

分散式檔案系統就是把檔案分佈儲存到多個計算機節點上,成千上萬的計算機節點構成計算機叢集。這些節點分為兩類。 一類叫做“主節點”(Master Node),也叫做“名稱節點”(Name Node) 另一

NTFS檔案系統詳解()之硬碟基本資訊

本文參考自部落格 一般硬碟正面貼有產品標籤,主要包括廠家資訊和產品資訊,如商標、型號、序列號、生產日期、容量、引數和主從設定方法等。這些資訊是正確使用硬碟的基本依據,下面將逐步介紹它們的含義。 硬碟主要由盤體、控制電路板和介面部件等組成,如圖1-1所示。

tmpfs臨時檔案系統,是種基於記憶體的檔案系統

在Linux系統記憶體中的虛擬磁碟對映,可以理解為使用實體記憶體當做磁碟,利用這種檔案系統,可以有效提高在高併發場景下的磁碟讀寫,但是重啟後資料會丟失。 1、檢視tmpfs路徑 (系統預設開啟,大小約為實體記憶體一半) 2、檢視實體記憶體利用情況  (-m  代表按照M統計) 3、調

[hadoop]HDFS(Hadoop分散式檔案系統)(

Hadoop的起源: Hadoop是Google的集群系統的開源實現 Google集群系統:GFS(Google File System)、 MapReduce、BigTableHadoop主要由HDFS(Hadoop Distributed File System Ha

一個簡單的檔案系統過濾驅動框架

 很多人認為檔案系統過濾驅動很複雜,其實也有一定道理,因為需要有很多細節需要考慮到,這是一個簡單的檔案系統過濾驅動,拋去了大部分細節,留下了一個簡單的框架,其實這樣檔案系統過濾驅動就變得蠻簡單的,很多介面可以不用實現,只要知道大致流程,其它都將會很清晰。#define DBG

LINUX移植——根檔案系統製作(

上一篇文章當中,說了說怎樣搭建nfs伺服器的過程,這也是製作根檔案系統前必須的準備工作,當然也可以用其他方法,但從除錯的角度來說,還是nfs最適合了。這篇文章咱們正式開始製作根檔案系統,主要內容如下:

Windows檔案系統過濾驅動中開啟檔案時如何避免重入

呼叫下面的函式可以避免在打開回調中開啟新的檔案的時候引起重入 NTSTATUS IoCreateFileSpecifyDeviceObjectHint( __out PHANDLE FileHandle, __in ACCESS_MASK Desir

【windows核心驅動開發】檔案系統微過濾驅動Minifilter——繫結指定的卷(磁碟分割槽)

【我的】檔案系統微過濾驅動Minifilter——繫結指定的卷(磁碟分割槽) 作者:zcr214 時間:2016/4/21 在編寫檔案系統微過濾驅動minifilter的時候,很有可能我們只對某一個特定的磁碟分割槽感興趣,而其他的如系統盤的很多IRP對於我們要編寫的驅動可

【windows核心驅動開發】檔案系統微過濾驅動Minifilter——獲取程序資訊

【我的】檔案系統微過濾驅動Minifilter——獲取程序資訊 作者:zcr214 時間:2016/4/22 在編寫檔案系統微過濾驅動minifilter的時候,除了繫結指定的磁碟分卷,對於指定的檔案很可能還會有指定的應用程式,例如txt檔案可以有很多編輯器可以使用,如w

[Linux驅動煉成記] 07-檔案系統分割槽

檢視分割槽格式 # df -hT // ext4 檔案格式 Filesystem Type Size Used Available Use% Mounted on /dev/system ext4

Ext4檔案系統架構分析(

本文描述Ext4 檔案系統磁碟佈局和元資料的一些分析,同樣適用於ext2,ext3檔案系統,除了它們不支援的ext4的特性。整個分析分兩篇博文,分別概述佈局和詳細介紹各個佈局的資料結構及組織定址方式等。 1.Ext4 檔案系統佈局綜述 一個Ext4 檔案系統被分成一系列

)CentOS7搭建FastDFS V5.11分散式檔案系統

宣告:本文章參考 https://blog.csdn.net/m0_37797991/article/details/73381648,此博文連線為我老師的博文連結,在搭建FastDFS V5.11分散式檔案系統環境中為記錄適合自己的環境搭建過程,特重寫此博文! 1、緒論 因學習以

第七章 檔案管理()——檔案檔案系統

**資料項:**描述物件某種屬性的字符集;是資料組織中可以命名的最小邏輯資料單位。 **記錄:**一組相關資料項集合,描述物件某方面的屬性; **關鍵字:**一個記錄中的一個或幾個資料項的集合,用於唯一的標識一個記錄。 檔案:由建立者定義的、具有檔名的一組相關元素的集合。 有結構:由相關記錄