⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wdf_filter_fsctl.h

📁 国内文件驱动编程知名人物蔡大侠的教程源代码
💻 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 + -