Filter Manager and Minifilter Driver Architecture
2016-12-17 15:36
639 查看
The filter manager is a kernel-mode driver that conforms to the legacy file system filter model and exposes functionality commonly required in file system filter drivers. By taking advantage of this functionality, third-party developers can write minifilter
drivers, which are simpler to develop than legacy file system filter drivers, thus shortening the development process while producing higher-quality, more robust drivers.
驱动管理器是一个内核驱动,它遵循老的文件系统过滤驱动模型,并暴露出文件系统过滤驱动通常需要的功能,利用这些功能,第三方开发人员可以书写minifilter驱动,它比传统的文件过滤驱动简单,但是质量高,更健壮。
传统文件系统过滤驱动在文件系统栈中相对其他传统文件系统过滤驱动的位置是有启动加载组决定的。
minifilter驱动在过滤管理器中的顺序位置是由一个唯一的标识符altitude决定的。为一个具体的卷在某个特定高度(altitude)加载的minifilter驱动称为minifilter驱动的一个实例。
一个minifilter驱动可以过滤IRP-based I/O操作和Fast I/O操作,还有文件系统过滤回调操作(应该指的是FsRtlRegisterFileSystemFilterCallbacks注册的回调函数)。
minifilter驱动处理pre操作安装altitude从高到底的顺序处理,而post操作则从低到高处理。
系统运行时可以卸载。传统的过滤驱动在系统运行时是不可以卸载的,而minifilter驱动可以在任何时间卸载,并且如果有需要的话,阻止自己被卸载。
可以只处理自己感兴趣的操作。
更高效的利用内核栈。过滤管理器优化的自己使用的内核栈,并且通过支持过滤器发起IO(这些IO只会被下层的驱动看到)来减少递归IO。
过滤管理器在很多地方减少了minifilter驱动的代码。例如提供名字生成、缓存文件名供多于一个的minifilter驱动使用。过滤管理器设备附加到卷设备并通知minifilter驱动,并支持多核心系统。
减少复杂性。
更容易添加新的操作。如果过滤管理器支持了新的操作,对已存在的minifilter驱动没有影响。
更好的支持多个平台。
更好的支持用户模式程序。过滤管理器用户模式库FilterLib.dll支持minifilter驱动和程序通信,还提供了管理工具接口
minifilter驱动实例定义在INF文件中,INF文件必须包含一个默认的实例,也可以定义其它的实例。这些定义应用在所有的卷上。每一个实例定义包含名称、高度以及表明实例是自动附加还是手工附加还是两种方式均可的标志。默认实例用来排序minifilter驱动,使驱动管理器在正确的位置调用minifilter驱动的挂载及实例安装回调函数。另外显式的附加时,如果没有指定实例名称,使用默认实例。
当minifilter驱动卸载、实例附加的卷被卸载、或者显式的分离请求(fltmc detach、FltDetachVolume、FilterDetach),如果一个过滤驱动注册了InstanceQueryTeardownCallback回调函数,它可以使显式的分离请求失败。
实例卸载过程如下:
如果minifilter驱动注册了 InstanceTeardownStartCallback 回调函数,则过滤管理器调用它作为卸载的开始。minifilter驱动在这个函数中应该完成所有挂起的操作、取消或完成由其发起的IO请求、停止排队新的工作项。
在实例卸载期间,任何正在执行的preoperation or postoperation继续其正常处理。任何等待postoperation的IO请求可以被抽干或者取消。
如果minifilter驱动注册了 InstanceTeardownCompleteCallback 例程,当所有未决的IO操作完成后,过滤管理器调用这个函数,minifilter驱动应该关闭那些打开的文件。
当实例的所有引用被释放,过滤管理器删除剩余的上下文,实例完全被卸载。
minifilter过滤驱动可以通过以下方式卸载(sc stop、net stop、Apis、fltmc unload、FltUnloadFilter、FilterUnload)。
minifilter驱动被卸载时,FilterUnloadCallback 函数被调用。啊还是你好应该关闭通信端口、调用FltUnregisterFilter反注册驱动。注册FilterUnloadCallback 不是必须的,但是如果不注册的话,minifilter驱动无法卸载。
内核通过以下函数函数minifilter驱动的加载、卸载。
FilterLoad
FilterUnload
FltLoadFilter
FltUnloadFilter
以下的函数提供注册、启动、反注册minifilter驱动:
FltRegisterFilter
FltStartFiltering
FltUnregisterFilter
以下函数相关实例安装、卸载、及驱动卸载:
drivers, which are simpler to develop than legacy file system filter drivers, thus shortening the development process while producing higher-quality, more robust drivers.
驱动管理器是一个内核驱动,它遵循老的文件系统过滤驱动模型,并暴露出文件系统过滤驱动通常需要的功能,利用这些功能,第三方开发人员可以书写minifilter驱动,它比传统的文件过滤驱动简单,但是质量高,更健壮。
Filter Manager Concepts
过滤管理器安装在window中,但是只有当minifilter过滤驱动被加载,过滤管理器才变成活动的。过滤管理器为了一个目标卷而附加载文件系统栈上。而minifilter驱动通过在驱动管理器注册间接的附加载文件系统栈上。传统文件系统过滤驱动在文件系统栈中相对其他传统文件系统过滤驱动的位置是有启动加载组决定的。
minifilter驱动在过滤管理器中的顺序位置是由一个唯一的标识符altitude决定的。为一个具体的卷在某个特定高度(altitude)加载的minifilter驱动称为minifilter驱动的一个实例。
一个minifilter驱动可以过滤IRP-based I/O操作和Fast I/O操作,还有文件系统过滤回调操作(应该指的是FsRtlRegisterFileSystemFilterCallbacks注册的回调函数)。
minifilter驱动处理pre操作安装altitude从高到底的顺序处理,而post操作则从低到高处理。
Advantages of the Filter Manager Model
更好的控制过滤驱动的加载顺序系统运行时可以卸载。传统的过滤驱动在系统运行时是不可以卸载的,而minifilter驱动可以在任何时间卸载,并且如果有需要的话,阻止自己被卸载。
可以只处理自己感兴趣的操作。
更高效的利用内核栈。过滤管理器优化的自己使用的内核栈,并且通过支持过滤器发起IO(这些IO只会被下层的驱动看到)来减少递归IO。
过滤管理器在很多地方减少了minifilter驱动的代码。例如提供名字生成、缓存文件名供多于一个的minifilter驱动使用。过滤管理器设备附加到卷设备并通知minifilter驱动,并支持多核心系统。
减少复杂性。
更容易添加新的操作。如果过滤管理器支持了新的操作,对已存在的minifilter驱动没有影响。
更好的支持多个平台。
更好的支持用户模式程序。过滤管理器用户模式库FilterLib.dll支持minifilter驱动和程序通信,还提供了管理工具接口
Filter Manager Support for Minifilter Drivers
Loading and Unloading
minifilter驱动可以在系统运行的任何时刻加载。如果minifilter驱动INF文件指定了启动类型为SERVICE_BOOT_START, SERVICE_SYSTEM_START, or SERVICE_AUTO_START,系统会依照已存在的加载顺序组加载minifilter驱动。系统运行时,也可以通过sc start、net start、Api或者显式的请求驱动加载(fltmc load、FltLoadFilter、FilterLoad)。minifilter驱动实例定义在INF文件中,INF文件必须包含一个默认的实例,也可以定义其它的实例。这些定义应用在所有的卷上。每一个实例定义包含名称、高度以及表明实例是自动附加还是手工附加还是两种方式均可的标志。默认实例用来排序minifilter驱动,使驱动管理器在正确的位置调用minifilter驱动的挂载及实例安装回调函数。另外显式的附加时,如果没有指定实例名称,使用默认实例。
当minifilter驱动卸载、实例附加的卷被卸载、或者显式的分离请求(fltmc detach、FltDetachVolume、FilterDetach),如果一个过滤驱动注册了InstanceQueryTeardownCallback回调函数,它可以使显式的分离请求失败。
实例卸载过程如下:
如果minifilter驱动注册了 InstanceTeardownStartCallback 回调函数,则过滤管理器调用它作为卸载的开始。minifilter驱动在这个函数中应该完成所有挂起的操作、取消或完成由其发起的IO请求、停止排队新的工作项。
在实例卸载期间,任何正在执行的preoperation or postoperation继续其正常处理。任何等待postoperation的IO请求可以被抽干或者取消。
如果minifilter驱动注册了 InstanceTeardownCompleteCallback 例程,当所有未决的IO操作完成后,过滤管理器调用这个函数,minifilter驱动应该关闭那些打开的文件。
当实例的所有引用被释放,过滤管理器删除剩余的上下文,实例完全被卸载。
minifilter过滤驱动可以通过以下方式卸载(sc stop、net stop、Apis、fltmc unload、FltUnloadFilter、FilterUnload)。
minifilter驱动被卸载时,FilterUnloadCallback 函数被调用。啊还是你好应该关闭通信端口、调用FltUnregisterFilter反注册驱动。注册FilterUnloadCallback 不是必须的,但是如果不注册的话,minifilter驱动无法卸载。
内核通过以下函数函数minifilter驱动的加载、卸载。
FilterLoad
FilterUnload
FltLoadFilter
FltUnloadFilter
以下的函数提供注册、启动、反注册minifilter驱动:
FltRegisterFilter
FltStartFiltering
FltUnregisterFilter
以下函数相关实例安装、卸载、及驱动卸载:
Callback Routine Name | Callback Routine Type |
---|---|
InstanceSetupCallback | PFLT_INSTANCE_SETUP_CALLBACK |
InstanceQueryTeardownCallback | PFLT_INSTANCE_QUERY_TEARDOWN_CALLBACK |
InstanceTeardownStartCallback | PFLT_INSTANCE_TEARDOWN_CALLBACK |
InstanceTeardownCompleteCallback | PFLT_INSTANCE_TEARDOWN_CALLBACK |
FilterUnloadCallback | PFLT_FILTER_UNLOAD_CALLBACK |
相关文章推荐
- Filter Manager and Minifilter Driver Architecture 过滤管理器和微过滤驱动架构
- Filter Manager and Minifilter Driver 架构
- Visual Studio 2013开发 mini-filter driver step by step (1) - 创建 mini filter driver 工程
- MSDN Kernel-Mode Driver Architecture学习笔记(3)——Device Objects and Device Stacks (4)
- (转载)File System Minifilter Allocated Altitudes & Load Order Groups and Altitude Ranges
- Writing a FilterUnloadCallback Routine for a Minifilter Driver 为一个微过滤驱动写一个过滤器卸载回调例程
- Filter Manager Support for Minifilter Drivers 过滤管理器对微过滤驱动的支持
- The specifiedDSN contains an architecture mismatch between the Driver and Application
- Visual Studio 2013开发 mini-filter driver step by step 获取可执行文件名称 - 实现process monitor的一个功能 (10)
- MSDN Kernel-Mode Driver Architecture学习笔记(3)——Device Objects and Device Stacks (1)
- mini filter driver sql server
- 3DSP Bluew-2310u WLAN and Bluetooth Mini-PCIe Card Windows Driver, Sofware
- Visual Studio 2013开发 mini-filter driver step by step (5) - 读写文件
- MSDN Kernel-Mode Driver Architecture学习笔记(3)——Device Objects and Device Stacks (3)
- Visual Studio 2013开发 mini-filter driver step by step 获取文件读写内容(6)
- File System Mini Filter Driver Step by Step
- Managing Contexts in a Minifilter Driver
- JDBC : Java获取数据库连接(Driver And DriverManager)
- Visual Studio 2013开发 mini-filter driver step by step (4) - 获取文件名
- MSDN Kernel-Mode Driver Architecture学习笔记(3)——Device Objects and Device Stacks (2)