[转载]文件过滤驱动 文件系统激活通知 IoRegisterFsRegistrationChange函数实现
IoRegisterFsRegistrationChange 注册一个文件系统变动回调函数,用来被通知文件系统的激活和注销,激活是指第一次加载文件系统,当一个文件系统已经加载后,当加载一个同种文件系统的卷时,该文件系统就和激活没关系。话说该函数调用后,激活的文件系统会重新激活一遍,在2k SP4之后的系统都会这样做。
现在考虑下,这种机制是怎么实现的,猜测是在注册的时候,注册完成后,系统将各种类型的文件系统,都调用该回调函数一遍,来一次所有文件系统激活的通知。而事实上,也应该如此,reactOs的实现机制显示是这样的,奉上源码:
首先,先解释一些事情,目前系统会将各种类型的文件系统放到各自的链表队列中,如本地磁盘文件系统,ntfs和fat32文件系统,就在IopDiskFileSystemQueueHead队列中,其他类型的文件系统,如网络文件系统,是在IopNetworkFileSystemQueueHead中,cdrom文件系统,是在IopCdRomFileSystemQueueHead中,磁带文件系统,是在IopTapeFileSystemQueueHead队列中。
先看IoRegisterFsRegistrationChange的实现
下面是用的一些结构和数据

该函数的实现还是比较简单的,先查询保存FS_CHANGE_NOTIFY_ENTRY结构的这张链表IopFsNotifyChangeQueueHead,如果要注册的driveobject和回调函数地址都一样,就不再重复注册,如果未注册,分配内存,将该结构填充后插到链表尾部,然后,也就是我们猜想的部分的实现,确实是各种类型的文件系统队列,依次调用该回调函数就行文件系统激活的通知。
看下IopNotifyAlreadyRegisteredFileSystems函数的实现:
依次遍历各种类型的文件系统队列,然后依次调用该回调函数进行通知,在判断的时候,对最后一个节点,和rawfs结合起来判断了,关于rawfs的东西,目前还不是很清楚,这里不做解释。
现在,就明白这个问题了,当文件系统已经加载了,注册文件激活通知,是如何得到通知的。
在文件过滤驱动中,该函数主要应用场景是,当一个新增的卷要挂载时,我们如何实时地挂载到这个卷上,就可以调用该函数,得到各个文件系统的控制设备,然后attach上去,那么块设备在挂载卷设备时,会向文件系统控制设备发送irp_mj_file_system_control的irp,我们挂载文件系统控制设备后,就会先得到通知,然后取出里面的vpb对应的realdeivce对象保存起来,当该irp在真正的文件系统控制设备完成后,我们根据保存的vpb获取对应的deviceobject,即新挂载的卷设备,这样就可以实时attach到这个新增的卷设备上了,从而能对新增的卷设备进行及时的管控或设计。
[转载]文件过滤驱动 文件系统激活通知 IoRegisterFsRegistrationChange函数实现的更多相关文章
- 基于Minifilter框架的文件过滤驱动理解
概述 Minifilter即File System Minifilter Drivers,是Windows为了简化第三方开发人员开发文件过滤驱动而提供的一套框架,这个框架依赖于一个称之为Filter ...
- Windows 文件过滤驱动经验总结
Windows 文件过滤驱动经验总结作者:sinister 本文转载自驱动开发网 看了 ChuKuangRen 的第二版<文件过滤驱动开发教程>后,颇有感触.我想,交流都是建立在平等的基础 ...
- 文件过滤驱动实现目录重定向(一)good
文件过滤驱动拦截的IRP主要包括以下几个:IRP_MJ_CREATE,文件创建操作,文件的任何操作,都是从这里开始的.IRP_MJ_CLEANUP,文件的HANDLE句柄全部关闭会触发这个消息IRP_ ...
- 文件过滤驱动框架Minispy解析一
因工作需要,研究minispy文件过滤框架,上图为我整理出的其内核部分代码的逻辑.
- File System Minifilter Drivers(文件系统微型过滤驱动)入门
问题: 公司之前有一套文件过滤驱动,但是在实施过程中经常出现问题,现在交由我维护.于是在边看代码的过程中,一边查看官方资料,进行整理. 这套文件过滤驱动的目的只要是根据应用层下发的策略来控制对某些特定 ...
- 驱动开发:内核枚举Minifilter微过滤驱动
Minifilter 是一种文件过滤驱动,该驱动简称为微过滤驱动,相对于传统的sfilter文件过滤驱动来说,微过滤驱动编写时更简单,其不需要考虑底层RIP如何派发且无需要考虑兼容性问题,微过滤驱动使 ...
- 一个文件系统过滤驱动的demo
因为没写过FSD过滤驱动,所以拿来练练手,没有什么技术含量.参考自Win内核安全与驱动开发. 先梳理一下大概的流程,就是怎么去绑定设备栈.怎么去过滤各种请求的. 首先肯定是要绑定设备栈的,来看下怎么绑 ...
- ------- 软件调试——注销 QQ 过滤驱动设置的事件通知 CallBack (完)-------
---------------------------------------------------------------------------------- 本系列的最后一篇演示如何通过调试手 ...
- inotify--内核中文件系统的通知机制
转载:http://www.ibm.com/developerworks/cn/linux/l-inotifynew/index.html 一. 引言 众所周知,Linux 桌面系统与 MAC 或 W ...
随机推荐
- Hadoop 学习 HDFS
1.HDFS的设计 HDFS是什么:HDFS即Hadoop分布式文件系统(Hadoop Distributed Filesystem),以流式数据访问模式来存储超大文件,运行于商用硬件集群上,是管理网 ...
- ExtNet配置webconfig
<?xml version="1.0" encoding="utf-8"?> <!-- 有关如何配置 ASP.NET 应用程序的详细信息,请访 ...
- iOS--基于键值的观察者模式(KVO)
VO简而言之就是:基于键值的观察者,实际上就是观察者模式. Cocoa Framework已经为我们提供了这一模式,不需要我们自己来实现了.我们只需要按照约定的方式去做就可以了.KVO主要用于用户界面 ...
- JVM 调优 —— 新生代 Survivor 空间不足
零. 新生代调优规律 增大新生代空间. Minor GC 频率降低, Minor GC 时间上升. 降低新生代空间, Minor GC 频率上升, Minor GC 时间下降 一. 新生代典型问题 先 ...
- 生活娱乐 WIFI机器人(某机器发烧友自己动手做一台)
某机器发烧友自己动手做一台WIFI机器人,以下是这位发烧友的自述!让我们一起来分享他的劳动成果-- 在经历了十多天的疯狂淘宝.组装.调试.拆卸.再组装.再调试的过程后,俺的Wifi Robot终于于2 ...
- 使用网络监视器(IRSI)捕捉和分析协议数据包
转载请注明原地址. 实验名称: 理解子网掩码.网关和ARP协议的作用 一.实验目的和要求 (1) 熟悉IRIS的使用 (2) 验证各种协议数据包格式 (3) 学会捕捉并分析各 ...
- Sublime Text使用
安装Sublime Text Sublime 的安装比較简单,我们能够直接去官网http://www.sublimetext.com/,点击Download菜单.进入之后选择自己操作系统的进行下载安装 ...
- ZOJ 3230 Solving the Problems(数学 优先队列啊)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3230 Programming is fun, Aaron is ...
- router的安装和基本配置
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Hibernate_14_数据连接池的使用
在主配置文件Hibernate.cfg.xml中设置: <!-- 设置默认的事务隔离级别: 隔离级别 相应的整数表示 READ UNCOMMITED 1 READ COMMITED 2 REPE ...