《Windows内核安全与驱动编程》-第十一章文件系统的过滤与监控-day4

文件系统的过滤

11.4 文件系统控制设备的绑定

11.4.1 生成文件系统控制设备的过滤设备
接下来要生成过滤设备,这里再次用到设备拓展。下面给出过本过滤设备设备拓展的数据结构。
typedef struct _SFILTER_DEVICE_EXTENSION{
    //绑定的文件系统设备(真实设备)
    PDEVICE_OBJECT AttachedToDeviceObject;
    //与文件系统设备相关的真实设备,这个在绑定时使用
    PDEVICE_OBJECT StorageStackDeviceObject;
    //如果绑定了一个卷,那么这是物理磁盘卷名;否则这是绑定的控制设备名
    UNICODE_STRING DeviceName;
    //用来保存名字字符串的缓冲区
    WCHAR DeviceNameBuffer[MAX_DEVNAME_LENGTH];
}SFILTER_DEVICE_EXTENSION,*PSFILTER_DEVICE_EXTENSION;

​ 这个数据结构完全是自定义的,这里我们只想记得自己绑定在那个设备上,如果想记录更多信息完全可以自定义再添加。这里我们在得到设备对象指针后,只需要使用下面代码就可以知道这个设备绑定的原始设备。

nextDeviceObject = ((PSFILTER_DEVICE_EXTENSION)DeviceObject->DeviceExtension->AttachedToDeviceObject);

​ 回顾以前的内容,为了让系统看起来过滤设备和原来的设备没什么区别,必须设置该设备的一些标志位与所绑定的设备相同。

if ( FlagOn( DeviceObject->Flags, DO_BUFFERED_IO )) {

        SetFlag( newDeviceObject->Flags, DO_BUFFERED_IO );
    }

    if ( FlagOn( DeviceObject->Flags, DO_DIRECT_IO )) {

        SetFlag( newDeviceObject->Flags, DO_DIRECT_IO );
    }

    if ( FlagOn( DeviceObject->Characteristics, FILE_DEVICE_SECURE_OPEN ) ) {

        SetFlag( newDeviceObject->Characteristics, FILE_DEVICE_SECURE_OPEN );
    }

​ 这里标志 DO_BUFFER_IODO_DIRECT_IO 对应着前面介绍过的缓冲IO和直接IO,两种方式的不同之处在于,外部向这些设备发送读写请求时,所用的缓冲地址将有所不同。

11.4.2 绑定文件系统控制设备

​ 下面直接给出完整函数并注释解读。只需要在文件系统变动回调函数中调用这个函数,就可以完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值