📄 wd_shadow_io.h
字号:
///
/// @file wd_shadow_io.h
/// @brief 通过 shadow device 来进行文件io.
///
/// 在文件过滤驱动中做文件io是非常困难的事情.因为你始终要
/// 考虑ZwCreateFile,ZwReadFile等函数的重入.否则你要自己发Irp
/// ,会更加痛苦. 使用wdff_shadow_open打开文件后得到文件句
/// 柄,用ZwXxx系列读写内容和设置属性都会直接发到下层设备.
/// 而且open本身也会直接发到下层设备(通过shadow device.).这
/// 就解决了在文件过滤驱动中做文件io操作的困难.
///
/// @author tan wen 谭文
/// @date 2005-12-23
///
// 以下的代码仅仅做示范用。你可以修改和使用,但仅仅限于非商业
// 的应用。本代码不做任何质量和安全上的保证。任何商业使用必须
// 得到作者的许可。可以以以下方式与作者联系:
// MSN: walled_river@hotmail.com
// EMail: mfc_tan_wen@163.com
// QQ: 16191935
#ifndef _WD_SHADOW_IO_HEADER_
#define _WD_SHADOW_IO_HEADER_
#include "wdf.h"
/// 在DriverEntry中调用这个函数.
wd_bool wd_sdio_driver_entry();
/// 在Unload中,所有设备生成完毕后,调用这个函数清理所有的
/// 影设备.但是这里有两种情况.有些驱动会在Unload的时候自己
/// 删除所有生成的设备,有些不会.所以当你自己已经删除了那些
/// 设备的时候,传入参数del_devs应该为false,也就是没有必要由
/// 本函数删除所有影设备.反过来则表示由本函数删除.
wd_void wd_sdio_driver_unload(wd_bool del_devs);
/// 在Dispatch函数中,最先调用这个函数来处理irp.如果返回true,则
/// 立刻返回*status结束处理.如果为false,继续按原路径处理.
wd_bool wd_sdio_irp_disp(wd_dev *dev, wd_irp *irp, wd_stat *status);
/// 生成影设备.调用这个函数可以给任何有名设备生成影设备.在过
/// 滤系统中,如果有设备需要影设备,则在生成改设备后调用它.
wd_dev *wd_sdio_shadow_create(
wd_drv *drv,
wd_ustr *dev_name,
wd_dev *dev,
const wd_wchar *postfix);
/// 删除某个设备的影设备.如果该设备本身并没有影设备,那么不删除
/// 它.在过滤系统中,任何需要影子设备的设备删除之前调用这个函数.
wd_bool wd_sdio_shadow_delete(
wd_dev *dev);
/// 得到一个影设备的本设备.如果该设备本身不是一个影设备,那
/// 么返回NULL.如果是,那么返回该设备的本设备.
wd_dev *wd_sdio_get_real_dev(
wd_dev *shadow_dev);
#endif //_WD_SHADOW_IO_HEADER_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -