Minifilter文件及文件夹重定向

Minifilter文件及文件夹重定向

minifilter是windows驱动开发中针对文件的一个过滤驱动,上可以实现文件透明加密、应用沙盒、自动备份等功能。本文主要介绍通过PreCreate函数来实现文件及夹重定向操作。本文需要 Windows驱动开发的基本知识和Minifilter开发的基本知识。

前人已有经验

https://github.com/conand/Joker 这个项目的主要功能是把所有的.mp3格式的音频都重定向到某一个文件上,也就是说,你不管听啥歌,都是同一首。
关键代码如下,原理是:在打开文件之前,偷偷替换文件的路径,比如我打开C:\1.mp3。这时,FileObject->FileName的值应该是C:\1.mp3(举个例子,实际有点不一样),如果,我把FileObject->FileName修改成C:\2.mp3。那么,文件系统就会重新打开C:\2.mp3,那么后续的读取和写入都是针对2.mp3了。

FileObject = Data->Iopb->TargetFileObject;
FileObject->FileName = targetFile;
Data->IoStatus.Information = IO_REPARSE;
Data->IoStatus.Status = STATUS_REPARSE;
Data->Iopb->TargetFileObject->RelatedFileObject = NULL;
FltSetCallbackDataDirty(Data);//亲测这一句可以不要
return FLT_PREOP_COMPLETE;

(这个项目中有不少不需要的代码,可以精简很多)

文件夹重定向

由“前人已有经验”可知,我只需要把文件名称替换了,就可以重定向到另外一个文件,那么,我只需要在文件打开的时候,替换掉目标路径也就可以实现文件夹的重定向了,例如:C:\a文件夹需要重定向到D:\b文件夹,那么只需要minifilter检测到打开的是包含路径C:\a的文件,就直接把C:\a替换成D:\b即可。

PWCHAR source_path = L"C:\a";
PWCHAR redirect_path = L"C:\b";
PWCHAR current_path = (PWCHAR)ExAllocPool(PagedPool,BUFFER_SIZE);
UNICODE_STRING uni_current_path = {0};
RtlZeroMemory(current_path,BUFFER_SIZE);
RtlCopyMemory(current_path,nameInfo->Name.Buffer,nameInfo->name.length);
if(wcsstr(current_path,source_path )!=NULL){
	wcstrp(current_path,source_path,redirect_path );
	RtlInitUnicodeString(&uni_current_path,current_path);
	FileObject->FileName = uni_current_path;
	Data->IoStatus.Information = IO_REPARSE;
	Data->IoStatus.Status = STATUS_REPARSE;
	return FLT_PREOP_COMPLETE;
}

后续

需要重定向的文件或者文件夹写死在代码中,是没有意义的,需要在加上与应用程序的通讯,根据《寒江独钓-Windows内核安全编程》上minifilter那一章可以轻松完成。
本项目的编译环境为Windows7旗舰版+visual studio 2013+wdk8.1。
调试环境:windbg+com口+VirtualBox+Windows Xp sp1。
运行环境,Windows XP 32位、Windows 7 旗舰版(关闭强制签名)

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Minifilter是Windows操作系统中的一个内核模块,它可以对文件系统I/O操作进行监控和过滤,提供一定程度的文件系统访问控制和文件操作的修改能力。minifilter可以在文件系统级别实现对文件的读写访问控制、文件内容加密、文件过滤等功能。 minifilter的下载通常分为两个步骤:首先需要下载Windows Driver Kit(WDK)或Windows SDK,以获取minifilter开发所需的工具和库文件;其次,可以根据自己的具体需求编写或下载现有的minifilter源代码。 WDK或Windows SDK是微软提供的一套开发工具,它包含了开发Windows驱动程序所需的一系列工具、示例代码、库文件和文档等,可以用于minifilter开发及其他相关驱动程序的开发。 一般来说,在微软官网上可以找到WDK或Windows SDK的下载链接,用户可以根据自己的操作系统版本和开发环境选择合适的版本进行下载安装。安装完成后,用户可以在Windows开发环境中配置相应的环境变量,然后就可以使用WDK或Windows SDK提供的工具和库文件进行minifilter开发。 另外,也可以通过搜索引擎或开源社区等途径,找到已经编写好的minifilter源代码,并根据需要进行下载和修改。这种方式适用于一些常见的minifilter功能,如文件加密、病毒扫描等,可以节省开发时间和工作量。 总之,minifilter的下载需要获取Windows Driver Kit或Windows SDK,然后可以通过官方渠道或开源社区获取minifilter的源代码,以进行开发和定制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值