SwapBuffer驱动进阶(一)
来源:互联网 发布:最好玩的网络手机游戏 编辑:程序博客网 时间:2024/05/19 05:04
之前通过阅读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;
}
returnFLT_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的时候是不是有我们操作的真正的文件路径,经过测试发现,是有的! 阅读全文
0 0
- SwapBuffer驱动进阶(一)
- SwapBuffer驱动进阶(二)
- swapbuffer
- 块设备驱动实战进阶篇一 (调试基础一:串口,kdump,panic分析)
- SwapBuffer分析
- 深度学习进阶(一.1)--结合GPU搭建theano失败(驱动不匹配,哎)
- javascript进阶(一)
- javascript进阶(一)
- Python进阶(一)
- python--进阶(一)
- requirejs进阶(一)
- 指针进阶(一)
- RequireJS进阶(一)
- Python进阶(一)
- RequireJS进阶(一)
- web进阶(一)
- MySQL进阶(一)
- UICollectionView进阶(一)
- JS的tostring()和toLocaleString()的区别
- 自定义标题栏
- 类和对象2-默认成员函数(构造析构)
- jxl读写excel文件(util)
- [BIT0429]-Java-接口之間的多繼承關係
- SwapBuffer驱动进阶(一)
- android studio 引入glide4.2报错
- zheng项目-从rpc-service开始!
- java常用类库---Math与Random类
- JAVA学习笔记13——Structs2框架第三章
- 每个程序员应该知道的最基本的东西是什么?
- 链队列的出队入队
- javaScript异步错误处理
- 使用springMVC创建REST风格的服务器