摘要: 我想做一个unlocker一样的程序,不管这个文件有没有被使用,先实现删除它。在查资料过程中,就知道了如果不访问磁盘扇区的话,除非写驱动才能做到。奈何时间有限,工作匆忙,一直没有完成。而且忽视了更简便的方法——在别的路径下把修改后的OCX控件重新注册一下就可以了。
这些都不要说了,这段闲暇时间,我写了一个过滤加密,就这么简单。在DDK的示例Sfilter基础上改的。
文件过滤加密的源代码
//过滤读
NTSTATUS SfRead(__in PDEVICE_OBJECT DeviceObject, __in PIRP Irp)
{
PIO_STACK_LOCATION irp_stack;
BOOLEAN is_crypt;
NTSTATUS status;
PSFILTER_DEVICE_EXTENSION devExt;
PAGED_CODE();
ASSERT(!IS_MY_CONTROL_DEVICE_OBJECT( DeviceObject ));
ASSERT(IS_MY_DEVICE_OBJECT( DeviceObject ));
devExt = (PSFILTER_DEVICE_EXTENSION)(DeviceObject->DeviceExtension);
if(Irp->Flags & (IRP_NOCACHE | IRP_PAGING_IO | IRP_SYNCHRONOUS_PAGING_IO))
{
irp_stack = IoGetCurrentIrpStackLocation( Irp );
is_crypt = IsMyCryptFile(irp_stack->FileObject);
if(is_crypt) //是我的加密文件
{
//设置完成例程
IoCopyCurrentIrpStackLocationToNext( Irp );
IoSetCompletionRoutine(Irp, SfReadCompletion, 0, TRUE, FALSE, FALSE);
//调用原来的驱动
return IoCallDriver(devExt->AttachedToDeviceObject, Irp);
}
}
//非加密文件
IoSkipCurrentIrpStackLocation(Irp);
return IoCallDriver(devExt->AttachedToDeviceObject, Irp);
}
//读操作的完成例程
NTSTATUS SfReadCompletion(__in PDEVICE_OBJECT DeviceObject, __in PIRP Irp, __in PVOID Context)
{
ULONG length; //长度
PUCHAR buffer; //缓冲区
ULONG i;
PIO_STACK_LOCATION irp_stack;
irp_stack = IoGetCurrentIrpStackLocation( Irp );
ShowUnicodeString(&(irp_stack->FileObject->FileName));
DbgPrint(“SfReadCompletion 读文件解密”);
length = Irp->IoStatus.Information;
buffer = MmGetSystemAddressForMdlSafe(Irp->MdlAddress, NormalPagePriority);
for(i = 0; i < length; i++)
{
buffer[i] = buffer[i] – 17; //解密
}
return STATUS_SUCCESS;
}
//过滤写
NTSTATUS SfWrite(__in PDEVICE_OBJECT DeviceObject, __in PIRP Irp)
{
PIO_STACK_LOCATION irp_stack;
BOOLEAN is_crypt;
NTSTATUS status;
PSFILTER_DEVICE_EXTENSION devExt;
PAGED_CODE();
ASSERT(!IS_MY_CONTROL_DEVICE_OBJECT( DeviceObject ));
ASSERT(IS_MY_DEVICE_OBJECT( DeviceObject ));
devExt = (PSFILTER_DEVICE_EXTENSION)(DeviceObject->DeviceExtension);
if(Irp->Flags & (IRP_NOCACHE | IRP_PAGING_IO | IRP_SYNCHRONOUS_PAGING_IO))
{
irp_stack = IoGetCurrentIrpStackLocation( Irp );
is_crypt = IsMyCryptFile(irp_stack->FileObject);
if(is_crypt)
{
ULONG length; //长度
PUCHAR buffer, buffer2; //原来缓冲区和加密后缓冲区
ULONG i;
PMDL new_mdl;
length = irp_stack->Parameters.Write.Length;
buffer = MmGetSystemAddressForMdlSafe(Irp->MdlAddress, NormalPagePriority);
//分配同样大小的空间
来自:码农源库,http://www.vcclass.net/wordpress/?p=248
http://www.vcclass.net/wordpress/sitemap.html
分享到:
相关推荐
根据sfilter修改的,驱动层,C语言 经本人测试
过滤层文件系统驱动的完整代码,实现了文件的加密,操作截获
使用文件过滤驱动程序实现对文件的加密
楚狂人的Windows文件系统过滤驱动开发教程(第二版) 我经常在碰到同行需要开发文件系统驱动。windows的pc机上以过滤驱动居多。其目的不外乎有以下几种: 一是用于防病毒引擎。希望在系统读写文件的时候,捕获读写的...
FsDriver(一个过滤层文件系统驱动的完整代码,实现了文件的加密,操作截获等)
易控王文档加密软件是一款功能强大、安全稳定的企业文件加密系统,加密办公文档、设计图纸、研发代码等,业内领先的双缓冲Windows底层文件驱动过滤技术,对企业中涉密的重要的图纸、财务数据、文档数据进行强制性...
开发篇介绍了在实际工作中可能遇到的各种开发需求的技术实现,包括:串口的过滤、键盘的过滤、磁盘的虚拟、磁盘的过滤、文件系统的过滤与监控、文件系统透明加密、文件系统微过滤驱动、网络传输层过滤、Windows过滤...
主要知识重点包括:Windows串口与键盘过滤驱动、Windows虚拟存储设备与存储设备过滤驱动、Windows文件系统过滤驱动、文件系统透明加密/解密驱动、Windows各类网络驱动(包括TDI过滤驱动及3类NDIS驱动),以及最新的...
主要知识重点包括:Windows串口与键盘过滤驱动、 Windows虚拟存储设备与存储设备过滤驱动、Windows文件系统过滤驱动、文件系统透明加密/解密驱动、Windows各类网络驱动(包括TDI 过滤驱动及3类NDIS驱动),以及最新...
主要知识重点包括:windows串口与键盘过滤驱动、windows虚拟存储设备与存储设备过滤驱动、windows文件系统过滤驱动、文件系统透明加密/解密驱动、windows各类网络驱动(包括tdi过滤驱动及3类ndis驱动),以及最新的...
主要知识重点包括:windows串口与键盘过滤驱动、windows虚拟存储设备与存储设备过滤驱动、windows文件系统过滤驱动、文件系统透明加密/解密驱动、windows各类网络驱动(包括tdi过滤驱动及3类ndis驱动),以及最新的...
主要知识重点包括:windows串口与键盘过滤驱动、windows虚拟存储设备与存储设备过滤驱动、windows文件系统过滤驱动、文件系统透明加密/解密驱动、windows各类网络驱动(包括tdi过滤驱动及3类ndis驱动),以及最新的...
windows文件系统过滤驱动、文件系统透明加密/解密驱动、windows各类网络驱动(包括tdi过滤驱动及3类ndis驱动) ,以及最新的wdf驱动开发模型。有助于读者熟悉windows内核驱动的体系结构,并精通信息安全类的内核...
1.2 第一个驱动程序HelloDDK的代码分析 1.2.1 HelloDDK的头文件 1.2.2 HelloDDK的入口函数 1.2.3 创建设备例程 1.2.4 卸载驱动例程 1.2.5 默认派遣例程 1.3 HelloDDK的编译和安装 1.3.1 用...
1.2 第一个驱动程序HelloDDK的代码分析 1.2.1 HelloDDK的头文件 1.2.2 HelloDDK的入口函数 1.2.3 创建设备例程 1.2.4 卸载驱动例程 1.2.5 默认派遣例程 1.3 HelloDDK的编译和安装 1.3.1 用...
主要知识重点包括:windows串口与键盘过滤驱动、windows虚拟存储设备与存储设备过滤驱动、windows文件系统过滤驱动、文件系统透明加密/解密驱动、windows各类网络驱动(包括tdi过滤驱动及3类ndis驱动),以及最新的...
主要知识重点包括:windows串口与键盘过滤驱动、windows虚拟存储设备与存储设备过滤驱动、windows文件系统过滤驱动、文件系统透明加密/解密驱动、windows各类网络驱动(包括tdi过滤驱动及3类ndis驱动),以及最新的...
主要知识重点包括:windows串口与键盘过滤驱动、windows虚拟存储设备与存储设备过滤驱动、windows文件系统过滤驱动、文件系统透明加密/解密驱动、windows各类网络驱动(包括tdi过滤驱动及3类ndis驱动),以及最新的...
13.1.1 文件系统微过滤驱动的由来 297 13.1.2 Minifilter的优点与不足 298 13.2 Minifilter的编程框架 298 13.2.1 微文件系统过滤的注册 299 13.2.2 微过滤器的数据结构 300 13.2.3 卸载回调函数 303 13.2.4 ...
主要知识重点包括:Windows串口与键盘过滤驱动、Windows虚拟存储设备与存储设备过滤驱动、Windows文件系统过滤驱动、文件系统透明加密/解密驱动、Windows各类网络驱动(包括TDI过滤驱动及3类NDIS驱动),以及最新的...