【编程技术- MiniFilter架构及其文件过滤原理分析 (待完善)】此文章归类为:编程技术。
Callback
FltpCreate 函数中 ,通过 _DEVICE_OBJECT::_DRIVER_EXTENSION::_FLT_VOLUME 解析设备对象所属的卷,完成 _IRP_CALL_CTRL 结构体的初始化(将作为函数 FltpPassThroughInternal 的参数)。此处的 _DRIVER_EXTENSION 实际上是 FLTMGR!_VOLUME_DEVICE_EXTENSION,由驱动程序自行定义,用于存储驱动的私有数据。

结构体 _VOLUME_DEVICE_EXTENSION 的定义如下:
1 2 3 4 5 6 | FLTMGR!_VOLUME_DEVICE_EXTENSION
+0x000 Type : _FLT_TYPE
+0x008 AttachedToDeviceObject : Ptr64 _DEVICE_OBJECT
+0x010 Frame : Ptr64 _FLTP_FRAME
+0x018 VolumeAccessLock : _FAST_MUTEX
+0x050 Volume : Ptr64 _FLT_VOLUME
|
<br/>
结构体 _IRP_CALL_CTRL 用于管理单个 IRP 在 MiniFilter 中的处理过程,包含当前 I/O 请求的上下文,其定义如下:
1 2 3 4 5 6 7 | FLTMGR!_IRP_CALL_CTRL
+0x000 Volume : Ptr64 _FLT_VOLUME
+0x008 Irp : Ptr64 _IRP
+0x010 IrpCtrl : Ptr64 _IRP_CTRL
+0x018 StartingCallbackNode : Ptr64 _CALLBACK_NODE
+0x020 OperationStatusCallbackListHead : _SINGLE_LIST_ENTRY
+0x028 Flags : ICC_FLAGS
|
<br/>
函数 FltpPassThroughInternal 和 FltpLegacyProcessingAfterPreCallbacksCompleted 内部调用 Pre/Post 回调函数。

回调函数被触发时的调用路径:
- Pre:IofCallDriver -> FLTMGR!FltpCreate -> FLTMGR!FltpPassThroughInternal -> FLTMGR!FltpPerformPreCallbacks -> PreFunc
- Post:IofCallDriver -> FLTMGR!FltpCreate -> FltpLegacyProcessingAfterPreCallbacksCompleted -> FltpPassThroughCompletionWorker -> FltpPerformPostCallbacks -> PostFunc
FltpPerformPreCallbacks 是 fltmgr.sys 内部用于按 Altitude 从高到低依次调用 Minifilter Pre-operation 回调的核心函数,是 Minifilter 实现“有序过滤”的执行中枢。它本身不派发 IRP 到文件系统,但决定了哪些过滤器有机会拦截或修改 I/O 请求。
更多【编程技术- MiniFilter架构及其文件过滤原理分析 (待完善)】相关视频教程:www.yxfzedu.com