什么是 MiniFilter
minifilter 是 sfilter 后微软推出的过滤驱动框架。相比于sfilter,更容易使用,需要程序员做的编码更简洁。系统为minifilter专门制作了一个过滤管理器,这个管理器本身其实是一个传统过滤驱动,它向minifilter的使用者提供许多接口,让原本复杂的文件过滤驱动变得方便简单。之所以简单是因为传统的过滤驱动把大量的工作放在绑定设备上,而现在这些工作都交给minifilter中的过滤管理器来完成。
MiniFilter 和其他驱动的区别
普通驱动:
也叫文件系统驱动。
过滤驱动:
基于文件驱动中的操作进行手动过滤,可以理解成你 hook 了系统的 create 函数,然后如果你要拦截这个操作你就按要求返回不允许,否则就传给系统下一层去继续。
微过滤器:
首先,微过滤器不是驱动(可以理解为一个在 Filter Manager 的一个组件)。它通过向过滤管理器(Filter Manager)驱动进行注册自己需要过滤的一些操作,提供指定格式的回调函数让过滤管理器来进行调用,对于每一种操作,minifilter 都可以注册一个 “过滤前(pre)” 和 “过滤后(post)” 被调用的回调函数。
MiniFilter 的优点和缺点
优点:
(1)兼容性好
(2)简单易上手
缺点:
(1)编程自由度不大
加载顺序
minifilter的加载顺序是根据一个Altitude来决定的,可以理解成驱动所处的维度:
当FilterManager检测到要执行create的时候,就去调用注册了对该操作进行过滤的minifilter的回调函数,根据Altitude的值从大到小的顺序先调用preCreate函数。而FilterManager检测到create执行完成后,便按照Altitude的值从小到大的顺序去调用postCreate函数。