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

📄 wdf_filter.h

📁 国内文件驱动编程知名人物蔡大侠的教程源代码
💻 H
字号:
// 头文件:		wdf_filter.h 
//
// 说明:		这个头文件中含有所有wdf_filter相关的代码文件所需要的公共的
//				数据结构和宏,以及他们需要的头文件。因此,其他的代码文件只
//				需要包含这一个头文件就可以了
//
// 依赖:		这个头文件依赖于wdf.h

#ifndef _WDF_FILTER_H_sdlfe_je8_jj934_98fd93_jkdjkfd_djk3_

#define _WDF_FILTER_H_sdlfe_je8_jj934_98fd93_jkdjkfd_djk3_

#include "wdf/wdf.h"
#include "wdf/wd_dev.h"
#include "wdf/wd_irp.h"
#include "wdf/wd_mem.h"
#include "wdf/wd_syn.h"

// 两个全局变量,定义在wdf_filter.c中
extern wd_drv *g_drv;
extern wd_dev *g_cdo;
extern wd_mutex g_attach_lock;
extern wd_ustr	g_reg_path;
extern wd_wchar	g_reg_path_buf[512];

#define wdff_is_my_cdo(dev) \
		(((dev) == g_cdo) ? wd_true : wd_false)
#define wdff_is_my_dev(dev) \
    (((dev) != NULL) && \
     ((dev)->DriverObject == g_drv) && \
      ((dev)->DeviceExtension != NULL))

typedef struct _wdff_dev_ext 
{
    wd_dev * attached_to;	
	wd_dev * storage_dev;
	wd_ustr dev_name;
    wd_wchar name_buf[wd_dev_name_max_len];
	// for a device attached to a volume, i will
	// create a shadow device. when i open a file,
	// i will open a file above shadow device to 
	// avoid rentries.
	wd_dev * shadow_dev;
	wd_dev * orgin_dev;
} wdff_dev_ext, *wdff_pdev_ext;

enum {
	WDFF_CB_GO_ON = 0,
	WDFF_CB_COMPLED = 1,
	WDFF_CB_SYN_COMP = 2,
	WDFF_CB_ASYN_COMP = 3,
};

typedef wd_int 
(*wdff_callback_pre_func)(
					in_ wd_dev *cur,
					in_ wd_dev *next,
					in_ wd_irp *irp,
					out_ wd_stat *status,
					out_ wd_void **context);

typedef wd_stat 
(*wdff_callback_post_func)(
					in_ wd_dev *cur,
					in_ wd_dev *dev,
					in_ wd_irp *irp,
					in_ wd_void *context);

typedef wdff_callback_post_func WdffCallbackPostFunc;
typedef wdff_callback_pre_func WdffCallbackPreFunc;


// Callback function pointers.
typedef struct _wdff_callback
{
	wdff_callback_pre_func read_write;
	wdff_callback_post_func read_write_comp;
	wdff_callback_pre_func create;
	wdff_callback_post_func create_comp;
	wdff_callback_pre_func close_clean_up;
	wdff_callback_post_func close_clean_up_comp;
	wdff_callback_pre_func device_io_ctrl;
	wdff_callback_post_func device_io_ctrl_comp;
	wdff_callback_pre_func other;
	wdff_callback_post_func other_comp;
} wdff_callback;

extern wdff_callback g_callback;

_inline wd_stat wd_fscdo_create(in wd_drv *driver,
								 in	wd_size exten_len,
								 in wd_ustr *name,
								 in wd_ustr *link,
								 out wd_dev **device)
{
    wd_stat status =  wd_dev_create(
                driver,exten_len,
                name,FILE_DEVICE_DISK_FILE_SYSTEM,
                FILE_DEVICE_SECURE_OPEN,
                wd_false,device);
	if(!wd_suc(status))
		return status;
	
	IoCreateSymbolicLink(link,name);
	return status;
}

// If any  file system is being activated or
// disactivated, this function will be called.
wd_void wdff_notify(
			in wd_dev *dev,
			in wd_bool active);

#endif // _WDF_FILTER_H_sdlfe_je8_jj934_98fd93_jkdjkfd_djk3_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -