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

SwapBuffer驱动进阶(一)[通俗易懂]之前通过阅读swapbuffer的read的部分代码,基本上弄明白了缓存交换的原理。    那么我们怎么做到文件的透明加解密,直接使用其缓存交换的方式来实现呢,目前参考了Antinvader,有一个步骤是肯定要做的,那就是在Create的Post中,添加文件流的上下文,这样才能知道你打开的文件,是不是在read中确认是你需要处理的问题,因为在Read中的FileName是不准确的,例

大家好,又见面了,我是你们的朋友全栈君。之前通过阅读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的时候是不是有我们操作的真正的文件路径,经过测试发现,是有的!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • centos7 防火墙开放svn通过

    centos7 防火墙开放svn通过

  • PhpStorm中terminal窗口字体修改

    PhpStorm中terminal窗口字体修改

    2021年10月30日
  • java swing计算器_用winform编写计算器

    java swing计算器_用winform编写计算器实现要求1、使用Java图形界面组件设计软件,界面如图所示。2、软件能够满足基本的“加、减、乘、除”等运算要求。3、程序代码清晰,语法规范,结构合理,逻辑正确。4、编辑菜单中包括“复制和粘贴”两个菜单项,为菜单项编写事件代码。实现代码:importjava.awt.BorderLayout;importjava.awt.GridLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;

  • Ubuntu 18.04上安装cuda「建议收藏」

    Ubuntu 18.04上安装cuda「建议收藏」一、准备工作参照官网上资料,进行准备工作1.验证自己的电脑是否有一个可以支持CUDA的GPU$lspci|grep-invidia我的显示为TeslaP800ifitislistedinhttp://developer.nvidia.com/cuda-gpus,yourGPUisCUDA-capable2.验证自己的Linux版本是否支持…

  • 中缀表达式转后缀表达式方法_后缀表达式怎么求值

    中缀表达式转后缀表达式方法_后缀表达式怎么求值前言数据结构与算法中经常遇到中缀表达式转前缀表达式的题目,网上的教程大都很不直观,自己学的时候,也走了很多弯路,现在把一个简单易懂的算法教程分享出来。中缀转后缀举个例子,一个式子:(5+20+1∗3)/14(5+20+1*3)/14(5+20+1∗3)/14如何把该式子转换成后缀表达式呢?其实就是分三步:1、按运算符优先级对所有运算符和它的运算数加括号,(原本的括号不用加)2、把运算…

    2022年10月26日
  • outputstreamwriter和filewriter_类文件解析

    outputstreamwriter和filewriter_类文件解析|–字符流(字符流=字节流+编码表。)|–字符输入流Reader——抽象类intread():一次读取一个字符intread(char[]chs):一次读取一…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号