📄 wdf_filter_fsctl.h
字号:
// 头文件: wdf_filter_disp.h
//
// 代码文件: wdf_filter_disp.c
//
// 说明: 这两个文件中含有所有wdf_filter所用到几个filesys control
// 函数的声明和实现。这几个函数可以捕获卷的加载、卸载等操作
//
// 用途: 这几个函数在分发例程filesys control中被调用
//
// 依赖: 这个头文件依赖于wdf_filter.h
#ifndef _WDF_FILTER_FSCTL_dkfjke_jkfdji9823_j93992_3989348_
#define _WDF_FILTER_FSCTL_dkfjke_jkfdji9823_j93992_3989348_
#include "wdf_filter.h"
#include "wdf/wd_dev.h"
#include "wdf/wd_irp.h"
#include "wdf/wd_mem.h"
#include "wdf/wd_syn.h"
// 卷的加载
wd_stat wdff_fsctl_mount(wd_dev *dev,wd_irp *irp);
// 文件系统的加载
wd_stat wdff_fsctl_load_fs(wd_dev *dev,wd_irp *irp);
// 卷的卸载
wd_stat wdff_fsctl_dismount(wd_dev *,wd_irp *irp);
wd_dev *wdff_dev_attached(wd_dev *dev);
// 查看一个设备是否一个我已经绑定了的设备
wd_bool wdff_is_attached(wd_dev *dev);
wd_void wdff_fsctl_mount_comp_work(wd_void *context);
// 完成例程上下文。好几个fsctl需要注册完成例程。而例程中的工作可能
// 只能在passive level中运行,因此不得不加入一个work_item,把任务塞
// 入工作线程等待完成
typedef struct _wdff_fsctl_comp_con
{
wd_work_item work;
wd_dev *dev;
wd_irp *irp;
wd_dev *new_dev; // 这个元素仅仅用于mount的时候。因为我
// 们要生成一个新设备来绑定vdo.
} wdff_fsctl_comp_con;
// 下边这个函数对一个fsctl设置完成例程。注意为什么有两个complete?
// complete是IoCallDriver发出的irp完成之后立刻调用的例程。如果在2000
// 下,不在passive level.这时我们把工作任务放在work_complete中,然后
// 放到工作进程里。work_complete被调用的时候,就是passive level了。
// 这时候可以放心的做我们的工作。
// xp和以上的操作系统都不用这样做。直接在complete中做就可以了。这时
// 可以设置work_complete为空。则这个函数会按xp的方法处理。
wd_bool wdff_fsctl_set_comp(wd_dev *dev,
wd_irp *irp,
wd_dev *new_dev,
wd_irp_comp_func complete,
wd_work_func work_complete);
_inline wd_dev *wdff_dev_storage(wd_io_stack *irpsp)
{
return irpsp->Parameters.MountVolume.Vpb->RealDevice;
};
wd_void wdff_fsctl_load_fs_comp_work(wd_void *context);
wd_stat wdff_attach_mounted_volume(wd_dev *read_dev,wd_dev *my_dev);
#endif // _WDF_FILTER_FSCTL_dkfjke_jkfdji9823_j93992_3989348_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -