Visual Studio 2013开发 mini-filter driver step by step 获取文件读写内容(6)
2014-09-07 16:38
513 查看
由于后面的内容跟Visual Studio已经没有太大关系,故文章标题去掉Visual Studio前缀。
今天刚好在CSDN上读到一篇文章《程序员都要有八块腹肌》,所以要练好身体啊!其实我也想说,现代程序员要练好太极,才能以柔克刚,以一当十。
本文以获取文件写的内容为例,来探讨怎样获取写入的数据。
请先参考这个关于如何获取数据buffer的文章
http://msdn.microsoft.com/en-us/library/windows/hardware/ff554436(v=vs.85).aspx
请看下面的源代码获取数据的两种方式。
PFLT_FILE_NAME_INFORMATION file_name_info = NULL;
status = FltGetFileNameInformation(Data, FLT_FILE_NAME_NORMALIZED | FLT_FILE_NAME_QUERY_DEFAULT, &file_name_info);
if (NT_SUCCESS(status))
{
WCHAR *ssmfflag = L".ssmffile";
SIZE_T len = sizeof(WCHAR) * wcslen(ssmfflag);
if (file_name_info->Name.Length > wcslen(ssmfflag) &&
RtlCompareMemory((char*)ssmfflag, (char *)((char *)file_name_info->Name.Buffer + file_name_info->Name.Length - len), len) == len)
{
PT_DBG_PRINT(PTDBG_TRACE_ROUTINES, ("The file name is %wZ,the offset is %u,len is %u", file_name_info->Name, iopb->Parameters.Write.ByteOffset, writeLen));
if (iopb->Parameters.Write.MdlAddress == NULL)
{
try
{
RtlCopyMemory(buffer,
iopb->Parameters.Write.WriteBuffer,
min(writeLen, 90));
}
except(EXCEPTION_EXECUTE_HANDLER)
{
PT_DBG_PRINT(PTDBG_TRACE_ROUTINES, (""Exception occurred.\n"));
}
}
else
{//这个是针对direct io的。
PUCHAR buff = MmGetSystemAddressForMdlSafe(iopb->Parameters.Write.MdlAddress,
NormalPagePriority);
PT_DBG_PRINT(PTDBG_TRACE_ROUTINES, ("MDL"));
if (buff)
{
RtlCopyMemory(buffer,
buff,
min(writeLen, 90));
}
}
PT_DBG_PRINT(PTDBG_TRACE_ROUTINES, ("The data is %s", buffer));
}
FltReleaseFileNameInformation(file_name_info);
}
return FLT_PREOP_SUCCESS_WITH_CALLBACK;
上面的这段代码就是获取写入的数据并把前100个数据内容打印出来。
今天刚好在CSDN上读到一篇文章《程序员都要有八块腹肌》,所以要练好身体啊!其实我也想说,现代程序员要练好太极,才能以柔克刚,以一当十。
本文以获取文件写的内容为例,来探讨怎样获取写入的数据。
请先参考这个关于如何获取数据buffer的文章
http://msdn.microsoft.com/en-us/library/windows/hardware/ff554436(v=vs.85).aspx
请看下面的源代码获取数据的两种方式。
PFLT_FILE_NAME_INFORMATION file_name_info = NULL;
status = FltGetFileNameInformation(Data, FLT_FILE_NAME_NORMALIZED | FLT_FILE_NAME_QUERY_DEFAULT, &file_name_info);
if (NT_SUCCESS(status))
{
WCHAR *ssmfflag = L".ssmffile";
SIZE_T len = sizeof(WCHAR) * wcslen(ssmfflag);
if (file_name_info->Name.Length > wcslen(ssmfflag) &&
RtlCompareMemory((char*)ssmfflag, (char *)((char *)file_name_info->Name.Buffer + file_name_info->Name.Length - len), len) == len)
{
PT_DBG_PRINT(PTDBG_TRACE_ROUTINES, ("The file name is %wZ,the offset is %u,len is %u", file_name_info->Name, iopb->Parameters.Write.ByteOffset, writeLen));
if (iopb->Parameters.Write.MdlAddress == NULL)
{
try
{
RtlCopyMemory(buffer,
iopb->Parameters.Write.WriteBuffer,
min(writeLen, 90));
}
except(EXCEPTION_EXECUTE_HANDLER)
{
PT_DBG_PRINT(PTDBG_TRACE_ROUTINES, (""Exception occurred.\n"));
}
}
else
{//这个是针对direct io的。
PUCHAR buff = MmGetSystemAddressForMdlSafe(iopb->Parameters.Write.MdlAddress,
NormalPagePriority);
PT_DBG_PRINT(PTDBG_TRACE_ROUTINES, ("MDL"));
if (buff)
{
RtlCopyMemory(buffer,
buff,
min(writeLen, 90));
}
}
PT_DBG_PRINT(PTDBG_TRACE_ROUTINES, ("The data is %s", buffer));
}
FltReleaseFileNameInformation(file_name_info);
}
return FLT_PREOP_SUCCESS_WITH_CALLBACK;
上面的这段代码就是获取写入的数据并把前100个数据内容打印出来。
相关文章推荐
- Visual Studio 2013开发 mini-filter driver step by step 获取可执行文件名称 - 实现process monitor的一个功能 (10)
- Visual Studio 2013开发 mini-filter driver step by step (5) - 读写文件
- Visual Studio 2013开发 mini-filter driver step by step (4) - 获取文件名
- Visual Studio 2013开发 mini-filter driver step by step 内核中使用线程(7)
- Visual Studio 2013开发 mini-filter driver step by step (11) driver 签名
- Visual Studio 2013开发 mini-filter driver step by step (2) - 编译,部署,运行
- Visual Studio 2013开发 mini-filter driver step by step (3) - 查看运行结果
- Visual Studio 2013开发 mini-filter driver step by step 内核代码段分页alloc_text的使用(9)
- Visual Studio 2013开发 mini-filter driver step by step 应用层与内核通讯(8)
- Visual Studio 2013开发 mini-filter driver step by step (1) - 创建 mini filter driver 工程
- File System Mini Filter Driver Step by Step
- SharePoint 2013 开发——获取用户配置文件属性内容(User Profile)
- 【windows内核驱动开发】文件系统微过滤驱动Minifilter——获取进程信息
- 文件系统minifilter新架构开发指南
- Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作
- grep 在文件中查找指定的内容,并输出行号 及 获取指定行号的内容 分类: open()文件读写 ubuntu 2014-02-26 16:37 2156人阅读 评论(0) 收藏
- 【windows内核驱动开发】文件系统微过滤驱动Minifilter——绑定指定的卷(磁盘分区)
- java web开发中获取tomcat上properties文件内容的方法
- Atitit 遍历文件夹目录解决方案与规范 attilax总结 1. 规范 2 1.1. 注意的不要同时改变文件夹内容,增删文件。这样获取到的目录list不会变化 2 1.2. 主义中文名称文件读写
- iphone开发--获取系统配置文件内容