文件系统Minifilter驱动(三)

Win64 驱动内核编程-17. MINIFILTER(文件保护) MINIFILTER(文件保护)     使用 HOOK 来监控文件操作的方法有很多,可以在 SSDT 上 HOOK 一堆和 FILE 有关的函数,也可以对 FSD 进行 IRP HOOK,不过这些方法既不方便,也不安全。微软推荐的文件操作过滤方法是使用过滤驱动,在 VISTA 之后,推荐使用 MINIFILTER (字面翻译是迷你过滤器)。MINIFILTER 基于标准的文件过滤驱动,但是微软 阅读详情

5).管理文件名

filter管理器消除了legacy过滤驱动重获和管理文件名所必需的许多工作。当一个名被请求时,filter管理器在引用计数结构中以适当的格式为当前操作提供名: 规范名, opened名或短名. 

 

minifilter驱动可以调用FltGetDestinationFileNameInformation 来为正被rename或其NTFS hard link正被创建的文件或目录构造一个全路径名。这个名可以以规范的或打开的文件的格式返回。 

 

filter管理器也为重获规范文件名信息(由于文件名tunneling,该信息无效)提供FltGetTunneledName 例程。

 

为提高性能,filter管理器把名放到一个cache中,该cache在系统中的所有minifilter驱动之间可能是共享的。

 

修改名字空间的Minifilter驱动可以通过注册callback例程来截取名字查询操作从而利用filter管理器对名提供者的支持,比如upper minifilter驱动产生或规范化一个名的请求. 

 

用于名管理的Filter管理器例程

 

filter管理器为名字管理提供以下支持例程: 

 

FltGetDestinationFileNameInformation 

FltGetFileNameInformation 

FltGetFileNameInformationUnsafe 

FltGetTunneledName 

FltParseFileNameInformation 

FltReleaseFileNameInformation 

 

用于名管理的Minifilter驱动Callback例程

以下callback例程存储于FLT_REGISTRATION结构中,此结构作为一个参数被传给FltRegisterFilter, 用于minifilter驱动修改名字空间: 

Callback例程名

Callback例程类型

GenerateFileNameCallback 

PFLT_GENERATE_FILE_NAME 

NormalizeContextCleanupCallback 

PFLT_NORMALIZE_CONTEXT_CLEANUP 

NormalizeNameComponentCallback 

PFLT_NORMALIZE_NAME_COMPONENT 

 

6).管理Contexts 

filter管理器使minifilter驱动能把上下文与object关联起来,来跨I/O操作保持状态。有上下文的Object包括卷,实例,流和流句柄. 

 

第三方文件系统必须使用FSRTL_ADVANCED_FCB_HEADER 结构(取代 FSRTL_COMMON_FCB_HEADER结构)来适应流和流句柄context. 

 

上下文(除了卷上下文,它必须从非分页池中分配)可以从分页或非分页池中分配。

 

当所有未决引用已经被释放时,上下文被自动释放。如果minifilter驱动定义了一个上下文cleanup callback例程,filter管理器就会在上下文被释放之前调用该例程。上下文以此顺序cleanup: 流句柄,流,实例和卷。

 

当关联的Object被删除,当实例被断开或当minifilter驱动被卸载时,filter管理器负责删除上下文。

 

如果某个minifilter驱动对每个卷仅支持一个实例,那它应该使用实例上下文而非卷上下文来获得更佳性能。minifilter驱动也可以通过在流或流句柄上下文中存储指向minifilter驱动实例上下文的指针来提高性能。

 

分页文件的上下文不被支持,以下操作期间也不支持上下文: 

Create请求的pre-oper处理

close请求的Post-oper处理

 

IRP_MJ_NETWORK_QUERY_OPEN请求的处理

 

看CTX例子,它是一个使用上下文的minifilter驱动. 

 

用于上下文管理的Filter管理器例程

 

filter管理器为创建、注册和设置上下文提供以下支持例程: 

 

FltAllocateContext 

FltRegisterFilter 

FltSetInstanceContext 

FltSetStreamContext 

FltSetStreamHandleContext 

FltSetVolumeContext 

 

以下例程用于查询上下文支持: 

 

FltSupportsStreamContexts 

FltSupportsStreamHandleContexts 

 

以下例程用于获得和引用上下文: 

 

FltGetContexts 

FltGetInstanceContext 

FltGetStreamContext 

FltGetStreamHandleContext 

FltGetVolumeContext 

FltReferenceContext 

 

以下例程用于释放和删除上下文: 

 

FltDeleteContext 

FltDeleteInstanceContext 

FltDeleteStreamContext 

FltDeleteStreamHandleContext 

FltDeleteVolumeContext 

FltReleaseContext 

FltReleaseContexts 

 

用于context管理的Minifilter驱动Callback例程

 

以下callback例程存储于FLT_REGISTRATION 结构中,此结构作为一个参数被传给FltRegisterFilter, 用于minifilter驱动管理上下文: 

 

Callback例程名

Callback例程类型

ContextAllocateCallback 

PFLT_CONTEXT_ALLOCATE_CALLBACK 

ContextCleanupCallback 

PFLT_CONTEXT_CLEANUP_CALLBACK 

ContextFreeCallback 

PFLT_CONTEXT_FREE_CALLBACK 

 

7). Minifilter驱动产生的I/O请求

minifilter驱动可以从它自己在当前卷或另一个卷上的实例中产生并发送基于IRP的I/O操作。 此I/O操作仅minifilter驱动实例,绑定位置在此实例之下的legacy过滤驱动和文件系统可见。这解决了许多在legacy过滤驱动模型中递归I/O相关的问题,在该模型中,被legacy过滤驱动产生的I/O请求必须从顶部驱动开始遍历整个文件系统栈。

在某个minifilter驱动的所有未决I/O操作被完成之前,filter管理器不能卸载它。

用于由Minifilter驱动产生的I/O请求的Filter管理器例程 

filter管理器为创建、打开、读写文件提供了以下支持例程: 

FltClose 

FltCreateFile 

FltCreateFileEx 

FltReadFile 

FltWriteFile 

以下例程用于设置和移除重解析点: 

FltTagFile 

FltUntagFile 

以下例程用于产生I/O请求: 

FltAllocateCallbackData 

FltFreeCallbackData 

FltPerformAsynchronousIo 

FltPerformSynchronousIo 

FltReuseCallbackData 

以下例程用于取消文件open请求并重发一个I/O请求: 

FltCancelFileOpen 

FltReissueSynchronousIo 

filter管理器也提供下列多种用途的例程: 

FltDeviceIoControlFile 

FltFlushBuffers 

FltFsControlFile 

FltQueryInformationFile 

FltQuerySecurityObject 

FltQueryVolumeInformationFile 

FltSetInformationFile 

FltSetSecurityObject 

8).用户模式和内核模式间的通信 

filter管理器通过通信端口支持用户模式和内核模式之间的通信。minifilter驱动通过指定要被应用于通信端口object的一个安全描述符来控制端口上的安全。端口通信不是buffered,因此它更快更高效。用户模式应用程序或服务可以回答来自minifilter驱动的消息从而双向通信. 

当minifilter驱动创建了一个通信服务器端口时,它暗中开始收听端口上引入的连接。当某个用户模式调用者试图连接到该端口时,filter管理器用新创连接的一个句柄调用minifilter驱动的 ConnectNotifyCallback 例程。当filter管理器恢复控制时,它传给用户模式调用者一个表示用户模式调用者对这个连接的endpoint的一个单独的文件句柄。该句柄可用于把I/O完成端口和收听者端口关联起来。 

仅当用户模式调用者在端口上已拥有了安全描述符指定的权限时,一个连接才会被同意。对端口的每一个连接都有它自己的消息队列和私有endpoint。

任何一个(内核或用户的)endpoint的关闭都会结束相应的连接。当某个用户模式调用者关闭endpoint句柄时,filter管理器调用minifilter驱动的DisconnectNotifyCallback 例程以便minifilter驱动可以关闭连接句柄。

通信服务器端口的关闭会阻止新连接但不会结束现有的连接。当minifilter驱动卸载时filter管理器就会结束现有的连接。

用于在用户模式和内核模式间通信的Filter管理器例程

filter管理器为内核模式minifilter驱动与用户模式应用程序的通信提供了以下支持例程: 

FltCloseClientPort 

FltCloseCommunicationPort 

FltCreateCommunicationPort 

FltSendMessage 

以下例程用于用户模式应用程序与minifilter驱动通信: 

FilterConnectCommunicationPort 

FilterGetMessage 

FilterReplyMessage 

FilterSendMessage 

用于在用户模式和内核模式间通信的Minifilter驱动Callback例程

以下minifilter驱动的callback例程作为参数被传给FltCreateCommunicationPort: 

Callback例程名

Callback例程类型

ConnectNotifyCallback 

PFLT_CONNECT_NOTIFY 

DisconnectNotifyCallback 

PFLT_DISCONNECT_NOTIFY 

MessageNotifyCallback 

PFLT_MESSAGE_NOTIFY 

 

9). User-Mode Library 

filter管理器用户模式接口为包括过滤驱动在内的产品提供了一般功能。用户模式library是Fltlib.dll. 应用程序包括头文件FltUser.h和FltUserStructures.h, 和对FltLib.lib的链接. 

这些用户模式接口激活了对minifilter驱动的全面控制和用户模式服务或控制程序与过滤驱动间的通信。用户模式接口也为管理工具提供了接口来允许对filters,卷和实例的枚举。

Filter管理器用户模式Library例程

filter管理器为加载和卸载minifilter驱动提供了以下支持例程: 

FilterLoad 

FilterUnload 

以下例程用于创建和关闭minifilter驱动及实例句柄: 

FilterClose 

FilterCreate 

FilterInstanceClose 

FilterInstanceCreate 

以下例程用于绑定和断开minifilter驱动实例: 

FilterAttach 

FilterAttachAtAltitude 

FilterDetach 

以下例程用于枚举filters,卷和实例: 

FilterFindFirst 

FilterFindNext 

FilterInstanceFindFirst 

FilterInstanceFindNext 

FilterVolumeFindFirst 

FilterVolumeFindNext 

FilterVolumeInstanceFindFirst 

FilterVolumeInstanceFindNext 

以下例程用于查询信息: 

FilterGetDosName 

FilterGetInformation 

FilterInstanceGetInformation 

以下例程用于用户操作发起通信: 

FilterConnectCommunicationPort 

FilterSendMessage 

以下例程用于minifilter驱动响应通信: 

FilterGetMessage 

FilterReplyMessage 

【windows内核驱动开发】文件系统微过滤驱动Minifilter——获取进程信息 【我的】文件系统微过滤驱动Minifilter——获取进程信息 作者:zcr214 时间:2016/4/22   在编写文件系统微过滤驱动minifilter的时候,除了绑定指定的磁盘分卷,对于指定的文件很可能还会有指定的应用程序,例如txt文件可以有很多编辑器可以使用,如wordpad,notepad,sublime,vim,notepad+等,doc文档可以使用office word或W 阅读详情

相关推荐

【windows内核驱动开发】文件系统微过滤驱动Minifilter——绑定指定的卷(磁盘分区)

【我的】文件系统微过滤驱动Minifilter——绑定指定的卷(磁盘分区) 作者:zcr214 时间:2016/4/21   在编写文件系统微过滤驱动minifilter的时候,很有可能我们只对某一个特定的磁盘分区感兴趣,而其他的如系统盘的很多IRP对于我们要编写的驱动可能是不关注的,所以有必要使得我们的驱动只绑定指定的这个卷,从而减少其他的IRP带来的干扰,节省很多处理流程,比如系统盘的很

zcr214的博客 4425

Mini-filter driver 读写文件

在kernel中读写文件要比在应用层麻烦一些,但是基本思路大体上还是一致的。 在内核中,也有很多相关的读写文件的API,本文只对 FltCreateFileEx FltReadFile FltWriteFile 进行简单说明。 这三个API和应用层的API CreateFileEx,ReadFile和WriteFile相对应。其作用分别是打开文件,从文件中读取数据和将数据写入文件。下面这个函数实现了文件拷贝操作,即将FullFileName的文件内容拷贝到FullFileName2中。 NTS

VHeroin的博客 1365

Win64 驱动内核编程-34.对抗与枚举MiniFilter

对抗与枚举MiniFilter MiniFilter是目前杀毒软件用来实现“文件系统自我保护”和“文件实时监控”的方法。 由于MiniFilter模型简单,开发快捷,通用性好,以前用FSDHOOK或者标准过滤驱动来实现相关功能的杀软纷纷改用MiniFilter,比如卡巴斯基。不过,枚举MiniFilter就跟之前枚举回调的方法不太相同了,因为MiniFilter的...

天使也掉毛 5142

驱动中对文件进行二进制流读取

驱动中一般用zwcreatefile函数做文件处理、读取,但是需要对文件进行二进制流读取时,这个函数就不够用了,而在fltKernel.h头文件中,可以使用fltcreatefile函数进行句柄创建,后续再使用zwreadfile即可进行二进制流读取,部分代码: NTSTATUS status = STATUS_SUCCESS; FILE_STANDARD_INFORMATION fsi =...

qq_35889047的博客 616

[内核驱动]Minifilter实现文件拒绝访问

基于Minifilter的小小拓展

C0ldstudy的博客 5440

Minifilter文件系统过滤框架

原理正常的IRP流程是R3 API调用时,会将请求封装成一个IRP经过IO管理器到达文件系统,然后在发往磁盘存储系统,最后到达硬件。使用MiniFilter后会在IO栈中添加MiniFilter管理器。当IRP到达文件系统之前时,首先会被该管理器拦截。管理器会将IRP封装成CALLBACK_DATA,由管理器中存在的多个minifilter驱动依次处理。这些驱动位置是固定的,位置由altitude属

zyorz的博客 2217

文件系统minifilter新架构开发指南

微过滤器驱动开发指南   0.译者序 对我来说,中文永远是最美,最简洁,最精确和最高雅的文字。 本 文翻译仅仅用做交流学习。我不打算保留任何版权或者承担任何责任。不要引用到赢利出版物中给您带来版权官司。本文的翻译者是楚狂人,如果有任何问题,你可 以通过邮箱MFC_Tan_Wen@163.com,或者是QQ16191935,或者是MSN walled_river@ho

look01的专栏 7952

【Python机器学习实战】 | 基于PCA主成分分析技术读入空气质量监测数据进行数据预处理并计算空气质量综合评测结果

主成分分析(Principal Component Analysis, PCA)是一种常用的机器学习和数据分析技术,用于降低数据维度、识别数据中的模式、发现变量之间的关系等。

一伦明悦的博客 1263

面向Windows的文件透明加解密解决方案(3)——透明加解密驱动程序二

3.3关键技术详解 对于用户的文件操作请求,Windows 用户层中对文件的各种操作映射到微过滤驱动中就转化为类型为Create,Read,Write 和Close 等的I/O 操作,因此只要对这些操作的内容进行过滤处理,即可达到透明加解密的目的。首先在IRP_MJ_CREATE 中查询目标文件是否是监控文件类型,创建一个StreamContext 并附着在文件对象上,并在StreamConte

某熊的技术之路 1万+

MTK Sensor驱动调试实战:从AP到SCP的完整流程解析

本文详细解析了MTK平台Sensor驱动从AP侧到SCP侧的完整调试流程。内容涵盖AP侧驱动集成、DTS配置、内核编译与验证,以及SCP侧Tinysys框架下的代码集成、Overlay配置与I2C设置等核心步骤,并分享了中断唤醒、功耗优化及传感器数据校准等实战经验与常见问题排查方法,为硬件驱动工程师提供了一份全面的实战指南。

weixin_29175469的博客 353

Flutter 完整学习文档 - 从入门到精通

Widget 就像乐高积木,Flutter 中所有的东西都是 Widget。一个按钮是 Widget,一段文字是 Widget,甚至布局、边距、对齐方式也是 Widget!"万物皆 Widget"

zwjapple的专栏 2317

文件系统Minifilter驱动

1.Filter管理器和Minifilter驱动架构   Filter管理器是一个内核模式驱动,它遵照legacy文件系统filter模型并暴露了FSFD中必需的一般功能。利用这些功能,第三方开发者可以写minifilter驱动,这样的驱动比legacyFSFD更易于开发,因

pyq881120的专栏 1万+

VSCode+PlatformIO新建工程卡成狗?3步提速大法实测有效(附镜像源配置)

针对VSCode+PlatformIO新建工程时因依赖下载缓慢导致的加载慢问题,本文提供了三步核心提速方案。通过配置Python环境变量、修改PlatformIO插件设置以使用国内镜像源,并优化pip配置文件,实测可大幅缩短工程创建时间,有效解决创建工程卡顿的痛点。

delta的博客 712

Windows驱动_文件系统微小过滤驱动之一初识MiniFilter

人的一生,就那么几十年,所有的人都无法知道下一刻会发生什么,我们活在当下,只能努力将自己目前的工作或生活过好。船到桥头自然直,况且,自己这么多年,经历了多多少少的风浪太多了,说到底还是不够自信,我应该慢慢改正这个缺点。不要事事都杞人忧天,一定的危机感是需要的,但是千万不要过了。           由于原始的文件系统过滤驱动有一些缺陷,它使用了一些非常规的方法,有些驱动微软都无法做到全部的控

Z18_28_19的专栏 7292

计算图像哈希SHA-512

上述需要将lena.jpg放在当前目录下。

计算机视觉之光 961

全新RT-DETR 有效涨点改进目录 | 包含各种卷积、主干改进、各种注意力机制、Neck特征融合改进、损失函数、AIFI创新改进、独家创新、小目标检测、特殊场景检测等最全大论文及小论文必备创新改进点

《全新最全RT-DETR涨点改进专栏》提供500+种创新改进方案,涵盖卷积、注意力机制、主干网络等模块优化,适用于PCB检测、工业缺陷检测等场景。专栏包含顶会论文改进点、数据集增强方法、热力图可视化等实用功能,帮助科研人员快速提升模型性能。提供完整环境配置指南(Python3.10+Pytorch2.5.1)和训练教程,支持不同版本RT-DETR模型。定期更新涨点策略,配套QQ答疑群免费指导,适合从入门到发论文全流程需求,特别推荐给目标检测领域的研究生和工程师。

Ai缝合怪、助力小伙伴高效发论文 3419

Windows驱动_文件系统微小过滤驱动之五MiniFilter例程解析

今天,上了下看雪,好久没上去了,现在的看雪,跟之前不一样了,刚毕业的那个时候,上面的大牛真是多,现在屈指可数了,可能这些大牛们,因为年纪的增长,已经不在一线了,或许因为家庭,每时间在论坛上逛了,也许都已经在创业了,现在这个APP泛滥的年代,意念和想法,已经不靠技术了,也没有多少人在研究着技术,目前的中国还是有些浮躁,其实好好想想,现在所有的系统,芯片还是掌握在别人手上,不要谈Android,Win

Z18_28_19的专栏 7355

学Simulink——基于风力发电系统的建模与仿真场景:基于自适应控制的风力发电系统输出功率调节

本文详细介绍了使用Simulink搭建风力发电系统自适应控制模型的完整流程。首先阐述了风速波动对电网的影响及自适应控制的优势,然后逐步指导创建Simulink项目、搭建系统结构(包括风速源、风轮机、发电机等模块),重点讲解了模型参考自适应控制器(MRAC)的设计步骤和参数设置方法。通过仿真分析验证了系统在风速变化时仍能保持输出功率稳定,展示了自适应控制的响应速度和鲁棒性。最后提出了引入深度学习预测、多变量控制等优化方向,为新能源领域工程师提供了实用的建模与仿真指导。

amy_mhd的博客 220

Windows文件系统过滤驱动终极指南:MiniFilter文件监控实战解析

Windows文件系统过滤驱动是操作系统内核的关键组件,而MiniFilter驱动作为现代Windows驱动开发的首选框架,为开发者提供了高效、灵活的文件系统监控与过滤能力。本文将带你从零开始掌握MiniFilter技术,通过实战案例理解其核心原理与应用场景,让你快速上手开发自己的文件监控解决方案。 ## 为什么选择MiniFilter驱动? 传统文件系统过滤驱动开发复杂且兼容性差,而微软推出

gitblog_00701的博客 1077

无线充电Qi协议正向通信FSK的解调设计

常见的FSK解调方法是使用频率锁相环(PLL)来跟踪输入信号中的频率变化。PLL根据输入信号的频率变化来生成数字信号,从而实现FSK信号的解调。本文将详细介绍无线充电Qi协议正向通信FSK的解调设计,并提供相应的源代码。在上述示例代码中,我们首先定义了FSK解调的参数,包括采样率、载波频率、每个比特的持续时间和比特判定阈值。最后,通过比较滤波后的信号与比特判定阈值,我们将解调后的数字数据转换为0和1的序列。请注意,上述代码仅为示例,实际的解调设计可能需要根据具体的应用场景和系统要求进行调整和优化。

IunScala的博客 2444

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

MiniFilter文件系统学习

Minfilter与legacy filter区别 比sfilter加载顺序更易控制. altitude被绑定到合适的位置。  Minfilter在注册表服务项中有一项Altitude值 此值越高位置越靠前 (待考证 每一个minifilter驱动必须有一个叫做altitude的唯一标识符.一个minifilter驱动的altitude定义了它加载时在I/O栈中相对其他minifi

zhuhuibeishadiao 1万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

inf文件安装Minifilter驱动

本系列文章源于WDK,所有权利归原作者所有,翻译的目的只为交流和学习。除了商用你可以随意地使用这篇译文。但请不要删除声明。    ——by jununfly 一个文件系统minifilter驱动的INF文件一般包含以下部分: 1.Version (必需的) 版本部分指定由minifilter驱动的类型决定的一个类和GUID,如下例. [Version] Signature   =

天道酬勤! 4654

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

文件系统Minifilter驱动(一)

文件系统Minifilter驱动  声明:本系列文章源于WDK,所有权利归原作者所有,翻译的目的只为交流和学习。除了商用你可以随意地使用这篇译文。但请不要删除声明。                                                     ——by jununfly  说明: 所有preoperation及postoperation

听风 1万+
上一篇: 文件系统Minifilter驱动(二)
下一篇: 文件系统Minifilter驱动(四)
jununfly
博客等级 码龄19年 41粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值