首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >SwapBuffer驱动进阶(一)[通俗易懂]

SwapBuffer驱动进阶(一)[通俗易懂]

作者头像
全栈程序员站长
发布2022-08-27 10:49:39
发布2022-08-27 10:49:39
7230
举报

大家好,又见面了,我是你们的朋友全栈君。之前通过阅读swapbuffer的read的部分代码,基本上弄明白了缓存交换的原理。

那么我们怎么做到文件的透明加解密,直接使用其缓存交换的方式来实现呢,目前参考了Antinvader, 有一个步骤是肯定要做的,那就是在Create的Post中,添加文件流的上下文,这样才能知道你打开的文件,是不是在read中确认是你需要处理的问题,因为在Read中的FileName是不准确的,例如:打开的”\111.txt”, 在Create中路径是正确的,但是在Read回调函数中,可能就是系统的缓存的文件了,根本找不到“\111.txt”这个路径。

我们开始改造SwapBuffer代码,在其回调中添加如下代码:

FLT_PREOP_CALLBACK_STATUS

SwapPreCreate(

__inout PFLT_CALLBACK_DATA Data,

__in PCFLT_RELATED_OBJECTS FltObjects,

__deref_out_opt PVOID *CompletionContext

)

{

//NTSTATUS status;

UNREFERENCED_PARAMETER(FltObjects);

UNREFERENCED_PARAMETER(Data);

UNREFERENCED_PARAMETER(CompletionContext);

UNICODE_STRING MyVolumeName;

RtlInitUnicodeString(&MyVolumeName, L”\\1111\\1111.txt”);

if (0 != RtlCompareUnicodeString(&FltObjects->FileObject->FileName, &MyVolumeName, TRUE))

{

return FLT_PREOP_SUCCESS_WITH_CALLBACK;

}

return FLT_PREOP_SUCCESS_WITH_CALLBACK; —–可以在这里添加断点,这样每次对这个文件的操作,都会断住

}

下面这个就是WITH_CALLBACK的话,才会调用。

FLT_POSTOP_CALLBACK_STATUS

SwapPostCreate(

__inout PFLT_CALLBACK_DATA Data,

__in PCFLT_RELATED_OBJECTS FltObjects,

__in_opt PVOID CompletionContext,

__in FLT_POST_OPERATION_FLAGS Flags

)

{

UNREFERENCED_PARAMETER(Data);

UNREFERENCED_PARAMETER(FltObjects);

UNREFERENCED_PARAMETER(CompletionContext);

UNREFERENCED_PARAMETER(Flags);

UNICODE_STRING MyVolumeName;

RtlInitUnicodeString(&MyVolumeName, L”\\1111\\1111.txt”);

if (0 != RtlCompareUnicodeString(&FltObjects->FileObject->FileName, &MyVolumeName, TRUE))

{

return FLT_POSTOP_FINISHED_PROCESSING;

}

return FLT_POSTOP_FINISHED_PROCESSING;

}

上面的代码,就是两个回调的最简单的实现。

这个主要是为了分析在Create的时候是不是有我们操作的真正的文件路径,经过测试发现,是有的!

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/145115.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档