【我的】文件系统微过滤驱动Minifilter——绑定指定的卷(磁盘分区)
作者:zcr214 时间:2016/4/21
在编写文件系统微过滤驱动minifilter的时候,很有可能我们只对某一个特定的磁盘分区感兴趣,而其他的如系统盘的很多IRP对于我们要编写的驱动可能是不关注的,所以有必要使得我们的驱动只绑定指定的这个卷,从而减少其他的IRP带来的干扰,节省很多处理流程,比如系统盘的很多I/O请求。
1. InstanceSetup回调函数
InstanceSetup回调函数的作用就是来决定是否绑定卷的。它在以下情况被调用:
(1) 当minifilter初次加载时,每个已存在的卷都会导致这个调用。
(2) 当一个新的卷被挂载时。
(3) 当FltAttachVolume被调用(内核模式)时。
(4) 当FltAttachVolumeAtAltitude被调用(内核模式)时。
(5) 当FilterAttach被调用(用户模式)时。
(6) 当FilterAttach被调用(用户模式)时。
在这个过程中,minifilter决定是否在这个卷上生成实例。函数原型为:
NTSTATUS
InstanceSetup(
_In_PCFLT_RELATED_OBJECTS FltObjects,
_In_FLT_INSTANCE_SETUP_FLAGS Flags,
_In_DEVICE_TYPE VolumeDeviceType,
_In_FLT_FILESYSTEM_TYPE VolumeFilesystemType
);
这个回调函数的返回值为一个NTSTATUS状态值,表示绑定或者不绑定。
如果确认绑定,则返回STATUS_SUCCESS。