文件过滤驱动-FSFilter.ppt

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
文件过滤驱动-FSFilter要点

引言 文件系统程序是操作系统核心的部分,对于Windows操作系统来讲,文件系统和网络部分并列为驱动程序中最难的部分,难度大大超过声卡、显卡之类的硬件驱动程序。 深入学习和调试文件驱动程序,文件过滤驱动程序,更有助于学习Windows系统底层核心技术。 本胶片主要介绍文件过滤驱动开发和其应用:透明加解密,胶片内容比较广泛,希望能够普及这方面的知识,希望更多有兴趣的人一起研究,一起进步。 驱动开发 字符串操作 进程空间、线程上下文 内存分配 线程互斥访问 数据结构(双链表) 中断优先级 DeviceObject、DriverObject Irp理解 基本概念 卷,有卷管理器生成,一个卷一般对应一个逻辑盘 文件系统 NTFS:ntfs.sys FAT32:fastfat.sys CDFS:cdfs.sys 文件系统拥有两类设备:控制设备,卷设备。 如C:、D:为ntfs,E:F:为FAT32,那么E:、F:为FAT32文件系统的两个卷设备,而C:、D:为NTFS文件系统的两个卷设备 文件操作针的irp都是发到卷设备上,发给控制设备的irp主功能号为IRP_MJ_FILE_SYSTEM_CONTROL,发给卷设备的irp一般都是文件操作irp 分发函数 主功能IRP DriverObject-MajorFunction[IRP_MJ_FILE_SYSTEM_CONTROL] = FsControl; DriverObject-MajorFunction[IRP_MJ_DIRECTORY_CONTROL]= DispatchDirectoryControl; DriverObject-MajorFunction[IRP_MJ_CREATE] = DispatchCreate; DriverObject-MajorFunction[IRP_MJ_READ] = DispatchRead; DriverObject-MajorFunction[IRP_MJ_WRITE] = DispatchWrite; DriverObject-MajorFunction[IRP_MJ_SET_INFORMATION] = DispatchSetInfo; DriverObject-MajorFunction[IRP_MJ_CLOSE] = DispatchClose; DriverObject-MajorFunction[IRP_MJ_CLEANUP] = DispatchClean; DriverObject-MajorFunction[IRP_MJ_DEVICE_CONTROL] = DispatchDeviceIoControl; FAstIO 注册这些函数后,一般不做任何处理直接返回 快速IO主要是当文件数据存在缓存里面时,windows为了提高性能,直接向缓存管理器放送快速io去缓存获取数据 设备绑定 创建控制设备对象,对象类型必须FILE_DEVICE_DISK_FILE_SYSTEM 调用IoRegisterFsRegistrationChange,注册文件系统激活或者卸载的回 调函数,文件系统常用的为ntfs、fat32、cdfs,默认情况下,文件系统是存在 的,没有触发激活机制,这时候在xp和windows 2000 sp4以上,仍然会触发 调用注册的回调函 生成设备附加到文件系统上,这样能监控到文件系统的irp,主要是监控 此irp IRP_MJ_FILE_SYSTEM_CONTROL,在此irp中监控卷的挂载和卸载 在卷的挂载过程中,生成设备附加到卷上,这样才完成设备的附加,做 完此操作后,就能监控到所有卷上的文件操作irp 读写过滤 读写过滤 读操作 文件的长度: Length = IrpSp-Parameters.Read.Length; 文件的偏移量: Offser.QuadPart = IrpSp-Parameters.Read.ByteOffset.QuadPart 文件内容: Irp- MdlAddress不为空,则使用Irp- MdlAddress,缓冲区位置为MmGetSystemAddressForMdlSafe(Irp- MdlAddres),否则直接使用Irp- UserBuffer #define CdMapUserBuffer(IC, UB) { \ *(UB) = (PVOID) ( ((IC)-MdlAddress == NULL) ? \ (

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档