文件系统Minifilter驱动(五)

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

安装Minifilter驱动

XP及更新的Windows OS中,你应该用INF文件和一个安装应用程序来安装你的minifilter驱动. (2K及更早的OS中,minifilter 驱动一般是借助Service Control Manager安装的.)

注意"基于INF的安装"仅仅意味着你需要使用一个INF文件来复制文件并存储信息到注册表中.你没有被要求用仅仅一个INF文件来安装你的整个产品,且你没有被要求为你的驱动提供一个"右键点击安装"的选项. 

本节包括: 

一、为minifilter驱动创建一个INF文件

[这是初稿且有可能改变.]

一个文件系统minifilter驱动的INF文件一般包含以下部分: 

1.Version (必需的)

版本部分指定由minifilter驱动的类型决定的一个类和GUID,如下例.

[Version]
Signature   = "$WINDOWS NT$"
Class       = "ActivityMonitor"
ClassGuid   = {b86dff51-a31e-4bac-b3cf-e8cfe75c9fc2}
Provider    = %Msft%
DriverVer   = 10/09/2001,1.0.0.0
CatalogFile = 

下表是文件系统minifilter驱动应该在版本中指定的值.

Entry

Value

Signature 

"$WINDOWS NT$"

Class 

参考 File System Filter Driver Classes and Class GUIDs. 

ClassGuid 

参考 File System Filter Driver Classes and Class GUIDs. 

Provider 

在你自己的INF文件中,你应该指定一个provider 而非Microsoft. 

DriverVer 

参考 INF DriverVer directive. 

CatalogFile

对反病毒minifilter驱动来说这是有符号的值,此入口包含一个WHQL提供的catalog文件的名.所有其他minifilter驱动应令此处为空白.详细信息,参考INF Version Section一文中对CatalogFile入口的描述. 

 

2.DestinationDirs (可选但推荐)

DestinationDirs 指定minifilter驱动和应用程序文件将会被复制到哪个目录下. 

在这个地方和ServiceInstall 中,你可以指定一个由系统定义的已知系统目录的数字值. 有关这些值的详情,参考 INF DestinationDirs Section.下例中,值12代表驱动目录(在基于NT的平台上是%windir%/system32/drivers),值10代表Windows目录(%windir%). 

[DestinationDirs]
DefaultDestDir = 12
Minispy.DriverFiles = 12
Minispy.UserFiles   = 10,FltMgr

3.DefaultInstall (必需的)

在DefaultInstall 中,一个CopyFiles directive 会复制minifilter驱动的驱动文件和用户应用程序文件到DestinationDirs指定的目标中. 

注意  CopyFiles directive不应涉及catalog文件或INF文件自身. SetupAPI会自动复制这些文件. 

你可以创建一个单一的INF文件来在多版本的Windows OS上安装你的驱动.你可以通过为每个版本的OS创建额外的DefaultInstall、DefaultInstall.Services、DefaultUninstall和DefaultUninstall.Services来创建这种INF文件. 每一个都以decoration (例如.ntx86, .ntia64或.nt)修饰来指定它要应用的是哪个OS版本.更多关于创建此类INF文件的信息,参考 Creating INF Files for Multiple Platforms and Operating Systems. 

下例是一个典型的DefaultInstall项. 

[DefaultInstall]
OptionDesc = %MinispyServiceDesc%
CopyFiles = Minispy.DriverFiles, Minispy.UserFiles

4.DefaultInstall.Services (必需的)

DefaultInstall.Services包含一个AddService directive ,它控制驱动的服务如何以及什么时候被加载,如下例: 

[DefaultInstall.Services]
AddService = %MinispyServiceName%,,Minispy.Service

5.ServiceInstall (必需的)

ServiceInstall 包含用于加载驱动服务的信息.在例子MiniSpy驱动中,此项的被命名为"Minispy.Service", 如下例所示.ServiceInstall 的名必须出现在DefaultInstall.Services 项的AddService directive 中.

[Minispy.Service]
DisplayName    = %MinispyServiceName%
Description    = %MinispyServiceDesc%
ServiceBinary  = %12%/minispy.sys
ServiceType    = 2 ;    SERVICE_FILE_SYSTEM_DRIVER
StartType      = 3 ;    SERVICE_DEMAND_START
ErrorControl   = 1 ;    SERVICE_ERROR_NORMAL%
LoadOrderGroup = "FSFilter Activity Monitor"
AddReg         = Minispy.AddRegistry
Dependencies   = FltMgr

ServiceType入口指定了服务的类型.Minifilter驱动应指定一个为2的值(SERVICE_FILE_SYSTEM_DRIVER).更多关于ServiceType 入口的信息,参考 INF AddService Directive. 

StartType 指定了什么时候启动服务.下表列出了它的取值范围及这些值的启动类型. 

值

描述

0x00000000

SERVICE_BOOT_START

0x00000001

SERVICE_SYSTEM_START

0x00000002

SERVICE_AUTO_START

0x00000003

SERVICE_DEMAND_START

0x00000004

SERVICE_DISABLED

更多有关这些启动类型的信息,参考What Determines When a Driver Is Loaded一文中的"Driver Start Types". 

LoadOrderGroup 提供filter管理器需要用来确保minifilter驱动和legacy FSFD之间的互用性的信息.你应该为你正在开发的minifilter驱动类型指定一个合适的LoadOrderGroup 值.详情参考 Load Order Groups and Altitudes for Minifilter Drivers. 

注意你必须指定一个LoadOrderGroup 值,即使你的minifilter驱动的启动类型不是SERVICE_BOOT_START.在这里,minifilter驱动和legacy FSFD有些不同. 

注意  filter管理器的StartType值为SERVICE_BOOT_START,它的LoadOrderGroup值为FSFilter Infrastructure. 这些值确保filter管理器总在一切minifilter驱动之前被加载. 

更多关于驱动被加载时StartType和LoadOrderGroup入口如何决定,参考 What Determines When a Driver Is Loaded. 

注意  对minifilter驱动来说,StartType和LoadOrderGroup值不决定minifilter驱动在minifilter实例栈中绑定到哪.这个位置是由minifilter实例的altitude决定的. 

ErrorControl指定如果在系统启动期间服务失败了要进行的行为. Minifilter 驱动应指定它为1 (SERVICE_ERROR_NORMAL). 更多关于ErrorControl 的信息参考 INF AddService Directive. 

AddReg directive 涉及一个或多个INF作者定义的AddRegistry 项,这个项包含要被存储到最新安装的服务的注册值中的信息.Minifilter驱动用AddRegistry 来定义minifilter驱动实例并指定一个默认的实例. 

Dependencies 指定了驱动依靠的一切服务或加载顺序组的名字.一切minifilter驱动都必须指定FltMgr,它是filter管理器的服务名. 

6.AddRegistry (必需的)

AddRegistry 添加key和值到注册表中. Minifilter驱动用AddRegistry 项来定义minifilter实例并指定一个默认实例.只要filter管理器为该minifilter驱动创建一个新的实例这个信息就会被用到. 

在例子MiniSpy 驱动中,以下AddRegistry 和Strings 中的%strkey% 记号定义三个实例,每一个都命名为MiniSpy驱动的默认实例. 

[Minispy.AddRegistry]
HKR,%RegInstancesSubkeyName%,%RegDefaultInstanceValueName%,0x00000000,%DefaultInstance%
HKR,%RegInstancesSubkeyName%"/"%Instance1.Name%,%RegAltitudeValueName%,0x00000000,%Instance1.Altitude%
HKR,%RegInstancesSubkeyName%"/"%Instance1.Name%,%RegFlagsValueName%,0x00010001,%Instance1.Flags%
HKR,%RegInstancesSubkeyName%"/"%Instance2.Name%,%RegAltitudeValueName%,0x00000000,%Instance2.Altitude%
HKR,%RegInstancesSubkeyName%"/"%Instance2.Name%,%RegFlagsValueName%,0x00010001,%Instance2.Flags%
HKR,%RegInstancesSubkeyName%"/"%Instance3.Name%,%RegAltitudeValueName%,0x00000000,%Instance3.Altitude%
HKR,%RegInstancesSubkeyName%"/"%Instance3.Name%,%RegFlagsValueName%,0x00010001,%Instance3.Flags%

7.DefaultUninstall (可选)

DefaultUninstall 可选但如果你的驱动可以被卸载的话则推荐你使用它.它包含 DelFiles和DelReg directive来移除文件和注册值入口,如下列所示. 

[DefaultUninstall]
DelFiles   = Minispy.DriverFiles, Minispy.UserFiles
DelReg     = Minispy.DelRegistry

8.DefaultUninstall.Services (可选)

DefaultUninstall.Services 可选但如果你的驱动可以被卸载的话则推荐你使用它.它包含DelService directive来移除minifilter驱动的服务,如下来自MiniSpy驱动的例子所示. 

注意  DelService directive应总是指定SPSVCINST_STOPSERVICE标记(0x00000200)来在服务被删除之前停止它.

[DefaultUninstall.Services]
DelService = Minispy,0x200

9.Strings (必需的)

Strings 定义INF文件中使用的每一个%strkey%记号. 

你可以通过在INF文件中创建额外的现场指定的Strings.LanguageID 项来创建一个单一的国际化INF文件. 

下例是一个典型的Strings项. 

[Strings]
Msft               = "Microsoft Corporation"
MinispyServiceDesc = "Minispy mini-filter driver"
MinispyServiceName = "Minispy"
RegInstancesSubkeyName = "Instances"
RegDefaultInstanceValueName  = "DefaultInstance"
RegAltitudeValueName    = "Altitude"
RegFlagsValueName  = "Flags"

DefaultInstance    = "Minispy - Top Instance"
Instance1.Name     = "Minispy - Middle Instance"
Instance1.Altitude = "370000"
Instance1.Flags    = 0x1 ; Suppress automatic attachments
Instance2.Name     = "Minispy - Bottom Instance"
Instance2.Altitude = "365000"
Instance2.Flags    = 0x1 ; Suppress automatic attachments
Instance3.Name     = "Minispy - Top Instance"
Instance3.Altitude = "385000"
Instance3.Flags    = 0x1 ; Suppress automatic attachments

注意  从x64-based Windows Vista systems开始,所有的内核模式组件,包括非PnP(即插即用)驱动,比如FSD(文件系统, legacy filter和minifilter驱动), 都必须被签名以便加载和执行. 因为这个情况,以下是FSD相关的信息: 

o 非PnP驱动的INF文件,包括FSD,不要求包含[Manufacturer] 或[Models]项. 

o SignTool 命令行工具, 位于WDK安装目录的/bin/SelfSign 目录中,可以直接用于"嵌入式的签名"一个驱动SYS 执行文件.由于性能原因,引导启动的驱动必须包含一个内含的签名. 

o 给定一个INF文件, Inf2cat 命令行工具可用于创建一个驱动包的catalog (.cat)文件.仅catalog文件可以接收WHQL 标识签名. 

o 在管理员特权下,一个未签名的驱动也可以在以Vista开始的x64-based系统上安装.不过,这个驱动的加载会失败因为它是未签名的. 

o 关于驱动签名的详细信息,参考Driver Signing. 

o 掌握签名处理的详细信息, 参考Kernel-Mode Code Signing Walkthrough. 

o 所有的内核模式组件,包括自定义的内核模式开发工具,必须被签名.更多信息参考Signing Software for Use in a Driver Development Environment (Windows Vista). 

【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

代码实现利用inf文件安装硬件驱动

代码参考了网上资料并进行了整理: #include "stdafx.h" #include // Make all functions UNICODE safe. #include // for the API UpdateDriverForPlugAndPlayDevices(). #include // for SetupDiXxx functions. #include "Dir

错位竞争,单点突破。 5536

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

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

天使也掉毛 5142

Visual Studio 2013开发 mini-filter driver step by step (2) - 编译,部署,运行

一个基本的mini filter项目创建好了以后,就可以编译,部署和

zhanghaiyang9999的专栏 2129

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

基于Minifilter的小小拓展

C0ldstudy的博客 5440

Minifilter文件系统过滤框架

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

zyorz的博客 2217

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

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

Z18_28_19的专栏 7355

基于微过滤器Minifilter的MiniSpy源码文件过滤驱动

基于文件过滤驱动中minifilter过滤驱动框架开发,可以记录文件所有的操作,保存创建、重命名等,监控所有的I/O操作,包括驱动程序和用户端应用程序源码,对文件系统过滤有很大参考价值。

文件系统Minifilter驱动

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

pyq881120的专栏 1万+

minispy 软件

复制限制网页,可以提取表单页面数据的小软件 对限制复制的网页可获得网页源代码

微软微过滤器MiniFilter的源码

微软微过滤器MiniFilter的源码 Windows Server 2008 IFSDDK里面的东东 有兴趣的研究下

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

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

Z18_28_19的专栏 7292

基于文件过滤驱动的文件创建监控程序 - MzfFileMonitor

最近几天看了楚狂人的文件过滤驱动的相关教程, 学习了下文件过滤驱动的编写, 不禁感叹楚狂人在文件过滤驱动方面的造诣. 学习之余写了这个小工具MzfFileMonitor. 代码是由sfilter扩展而来. 包括 R3 和 R0 代码. Ps:1. 此工具只记录创建成功的文件(不记录文件夹). 2. 驱动理论上支持XP - WIN7的系统.

MiniFilter文件系统学习

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

zhuhuibeishadiao 1万+

从零到一:桌面宠物的硬件架构设计与工程实践

本文详细介绍了基于STM32F103C8T6主控平台的桌面宠物机器人硬件架构设计与工程实践。内容涵盖电源管理、舵机控制、PCB布局及系统调试等核心环节,为硬件爱好者提供从零到一的完整开发指南,助力打造稳定可靠的智能桌面伴侣。

alice7model的博客 1112

论文必备 - YOLOv12热力图可视化,支持指定模型,指定显示层,设置置信度,以及10种可视化实现方式

本文带来的是YOLOv12热力图可视化功能,支持,以及。我们经常看到一些论文里绘制了不同的热力图,一方面能够直观的感受其模型的有效性,另一方面也丰富了论文内容。特别是在使用了注意力模块的网络中,热力图就可以验证注意力机制是否真正聚焦到了预期的重要特征上,以便对模型的有效性和合理性进行评估。例如这篇文章中展示的,就很能够表达作者改进后的模型相比之前模型的优越性。

Limiiiing的博客 1706

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

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

gitblog_00701的博客 1077

桌面运维工程师面试题汇总(高频完整版)

岗位,覆盖:电脑硬件、系统安装与故障、网络、办公软件、安全、AD域、打印机、日常排错、服务意识。

老韩的Linux云计算架构师进阶之路 921

inf文件安装Minifilter驱动

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

天道酬勤! 4654

整理 钢琴 约翰·汤普森现代钢琴(大汤)

大汤

TS的博客 4000

MATLAB基础应用精讲-【强化学习】Actor - Critic 算法(附python代码实现)

这种架构结合了策略梯度方法(Policy - Gradient Methods)和价值函数估计方法(Value Function Estimation Methods)的优点。在强化学习中,智能体(Agent)需要通过与环境(Environment)的交互来学习最优的行为策略,以获得最大的累积奖励(Cumulative Reward)。

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值