📄 wdf_filter.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 + -