使用Minifilter过滤驱动保护文件

代码如下:
可以保护拓展名.com文件不被删除、重命名、读写、可执行。
#include <ntifs.h>
#include <ntstrsafe.h>
#include <fltKernel.h>
static UNICODE_STRING ProtectedExtention = RTL_CONSTANT_STRING(L"com");
//卸载回调
PFLT_FILTER gFileterHandle;
NTSTATUS PtUnload(__in FLT_FILTER_UNLOAD_FLAGS Flags) {
	UNREFERENCED_PARAMETER(Flags);
	FltUnregisterFilter(gFileterHandle);
	return STATUS_SUCCESS;
}
//预回调函数用于绑定IRP_MJ_CREATE的IRP
FLT_PREOP_CALLBACK_STATUS NPPreCreate(__inout PFLT_CALLBACK_DATA Data,__in PCFLT_RELATED_OBJECTS FltObjects,__deref_out_opt PVOID *CompletionContext) {
	UNREFERENCED_PARAMETER(CompletionContext);
	PAGED_CODE();
	FLT_PREOP_CALLBACK_STATUS ret = FLT_PREOP_SUCCESS_NO_CALLBACK;
	NTSTATUS status;
	PFLT_FILE_NAME_INFORMATION FileNameInfo = NULL;
	//可以执行
	if (Data->Iopb->MajorFunction == IRP_MJ_CREATE) {
		if (!FlagOn(Data->Iopb->Parameters.Create.Options, FILE_DISALLOW_EXCLUSIVE)) {
			return ret;
		}
	}
	
	if (FltObjects->FileObject != NULL) {
		status = FltGetFileNameInformation(Data, FLT_FILE_NAME_NORMALIZED | FLT_FILE_NAME_QUERY_DEFAULT, &FileNameInfo);
		if (NT_SUCCESS(status)) {
			FltParseFileNameInformation(FileNameInfo);
			if (RtlCompareUnicodeString(&FileNameInfo->Extension, &ProtectedExtention, TRUE) == 0) {
				Data->IoStatus.Status = STATUS_ACCESS_DENIED;
				Data->IoStatus.Information = 0;
				ret = FLT_PREOP_COMPLETE;
			}
			FltReleaseFileNameInformation(FileNameInfo);
		}
	}
	return ret;
}


CONST FLT_OPERATION_REGISTRATION Callbacks[] = {
	{ IRP_MJ_CREATE, 0, NPPreCreate, NULL },				
	{ IRP_MJ_SET_INFORMATION, 0, NPPreCreate, NULL },		
	{ IRP_MJ_OPERATION_END }
};


CONST FLT_REGISTRATION FilterRegistration = {
	sizeof(FLT_REGISTRATION),
	FLT_REGISTRATION_VERSION,
	0,
	NULL,
	Callbacks,//回调函数
	PtUnload,//卸载回调
	NULL,
	NULL,
	NULL,
	NULL,
	NULL,
	NULL,
	NULL

};

NTSTATUS DriverEntry(_In_ PDRIVER_OBJECT DriverObject, _In_ PUNICODE_STRING RegistryPath) {
	NTSTATUS status;
	UNREFERENCED_PARAMETER(RegistryPath);
	status = FltRegisterFilter(DriverObject,&FilterRegistration,&gFileterHandle);//注册Minifilter
	//ASSERT(NT_SUCCESS(status));
	//开启过滤
	if (NT_SUCCESS(status)) {
		status = FltStartFiltering(gFileterHandle);
		if (!NT_SUCCESS(status)) {
			//注册失败则退出
			FltUnregisterFilter(gFileterHandle);
		}
	}
	return status;
}
环境说明:
需要在链接器->输入->附加项->添加(fltMgr.lib)

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
软件名称:SEFS透明加密内核 V 2.0.0.1软件版本:2.0.0.1建议分类:系统安全文件加密软件大小:371K安装平台:Win2000 sp4+urp / xp sp2 / 2003 sp1 / vista软件语言:简体中文/繁体中文/英文软件授权:共享软件软件主页:http://www.sefs.net支持邮箱:admin@sefs.net软件下载:http://www.sefs.net/setup.rar国内首家采用MS全新 MiniFilter架构的SEFS透明加密内核 V 2.0.0.1发布1、简述 SEFS透明加密开发内核是基于MS最新的IFS文件过滤驱动MiniFilter开发的透明加密平台。加密标识内置于文件本身、可支持PKCS7电子 信封、加密算法可在内核态。也可在应用层,支持MS CSP 标准,可实现对加密硬件如USBKEY的支持。加、解密操作均受保护 的内存区域完成,高效安全。不会产生临时文件,同时配套保护驱动可防止进程注入、内存Dump、和截屏操作,全程保护您的 机密资料。2、特点   1、强制加密:客户端指定规则或匹配规则产生的任意文件均强制加密。所有的“文件另存”均为加密。不管是 怎么样的文件名称。SEFS是智能识别应用程序的行为.  2、文件加密标记识别采用指纹智能识别技术,加密标记植于文件本身,支持电子信封模式(PKCS7)和支持   身份/身份组机制.方便交流和传输。  3、SEFS平台工作于文件系统驱动层面,可以支持内存映射文件的方式.而非一些基于API Hook方式的加密系   统绝对无法支持内存映射文件。例如最常见的notepad(记事本)/另外可执行文件的加载执行均是通过内存   映射文件的方式.  4、进程识别基于特征值,而非简单的基于进程名称判断。可防止进程改名、加壳等形式的攻击。  5、非授权进程无法读取密文。网络间受控文件的传输为密文。FoxMail、OutLook或Ftp客户端等网络软件无法发送 明文。(假设其为非授权进程的话) 6、完美解决明文缓存问题,即便是密文正在被打开,也不能非法夺取明文 7、使用全新的MiniFilter架构,同杀毒软件有较好的兼容性,同时在性能和稳定性方面,较老的IFS过滤驱动 有着明显的提升。 8、支持应用层的加、解密算法和引擎。可兼容MS CSP 、PKCS11 等标准,从而实现硬件的加解密。满足不同的安全级别的要求。3、安装环境 客户端:Win2000 sp4 + URP /XP sp2/2003 sp1 / Vista Win2000需要Update Rollup Pack (URP) 下载:http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=B54730CF-8850-4531-B52B-BF28B324C6624、支持的软件: 1. 办公类: Microsoft Office 2000/XP/2003 、 Adobe acrobat7 、NotePad、 WordPad。 2. 图像类: Photoshop 、 CorelDraw12 、 Mspaint画图等 3. 设计类: AutoCAD 2004 、圆方BtoCAD、等 4. ...................SEFS--透明加密内核=============================================商业授权:sales@sefs.netBug 报告:bug@sefs.net
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虚构之人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值