SwapBuffer驱动进阶(一)[通俗易懂]
大家好,又见面了,我是你们的朋友全栈君。之前通过阅读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
相关文章
- eclipse Java项目 动态Java项目 导入MySQL驱动jar包[通俗易懂]
- Stm32的GPIO驱动继电器[通俗易懂]
- 计算机管理照相机感叹号,电脑设备管理器摄像头驱动出现黄色感叹号是怎么回事儿 – 驱动管家…[通俗易懂]
- 首发一款有线性调光功能的LED驱动电源
- 完美安装Linux网卡驱动:操作步骤指南(装linux网卡驱动)
- 虚拟机Linux安装驱动技术指南(虚拟机linux驱动)
- Linux PCIE驱动:开启新一代计算机技术之门(pcielinux驱动)
- MySQL驱动包:找到正确的下载位置(mysql驱动包在哪里)
- Linux内核驱动:架构与实现(linux驱动层)
- MySQL驱动带来的Idea开发体验(ideamysql驱动)
- 使用Oracle11驱动轻松连接数据库(oracle11驱动)
- 如何在Linux系统中快速安装显卡驱动(linux装显卡驱动)
- 走上4G时代:Linux驱动即刻启动(4g linux 驱动)
- Linux下I2C驱动程序的制作与部署(i2clinux驱动)
- 探究Ajax的MySQL驱动原理(ajax原理 mysql)
- Oracle 驱动表又是什么(oracle什么叫驱动表)