首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MiniFilter驱动程序-修改IRP_MJ_CLOSE和IRP_MJ_CREATE上的文件字节

MiniFilter驱动程序-修改IRP_MJ_CLOSE和IRP_MJ_CREATE上的文件字节
EN

Stack Overflow用户
提问于 2012-08-23 20:56:33
回答 1查看 2K关注 0票数 0

我想要在文件关闭时更改文件,并在打开文件时撤消更改。它有点像加密驱动程序,除了我不想加密文件。

我在Visual Studio2012中用WDK8创建了一个新的"Filter Driver: Filesystem Mini-Filter“项目,并注册了PreCreate、PostCreate、PreClose和PostClose作为回调函数。

例如,在字节为{72,101,108,108,111} ("Hello")的文件的IRP_MJ_CLOSE上,我希望在PostClose函数之后,文件在硬盘上将如下所示:{10,11,12,72,101,108,108,111}。

我怀疑这并不是简单的:

代码语言:javascript
复制
    FLT_PREOP_CALLBACK_STATUS
    PreClose (
    _Inout_ PFLT_CALLBACK_DATA Data,
    _In_ PCFLT_RELATED_OBJECTS FltObjects,
    _Flt_CompletionContext_Outptr_ PVOID *CompletionContext
    )
{
    //...

    //some if statment...
    {
        Data->Iopb->Parameters.Write.WriteBuffer = newBfr;
        Data->Iopb->Parameters.Write.Length = newLen;
    }
    //...

    return FLT_PREOP_SUCCESS_WITH_CALLBACK;
}

我想要一些关于这个主题的指导。

还有,调试这个的最好方法是什么?我还没找到打印到Windows7调试程序的方法。

谢谢!gfgqtmakia。

编辑:我读过http://code.msdn.microsoft.com/windowshardware/swapBuffer-File-System-6b7e6e2d,但我不认为它会对我有帮助,因为它是读/写的,我不想处理它。

EDIT2:或者我应该在PreCreate和PostClose中做我的更改,当文件在硬盘上而不是在IRP中间的时候,然后我就不需要在磁盘上而是“动态”地处理缓冲区了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-24 02:08:32

你将不得不写一些类似交换缓冲区的东西。在PostCreate/PreClose中修改文件数据不是一个好主意。

几个原因:

  • 首先,在PostCreate/PreClose中,你不应该访问Data->Iopb->Parameters.Write.WriteBuffer。这只在IRP_MJ_WRITE中有效。您可以执行FltWriteFile将数据写入文件。
  • Windows内核可能不会在IRP_MJ_CLOSE中/之后立即将文件数据写入磁盘。想一想页面缓存,
  • 可能有一些复杂的东西需要注意,比如分页i/o,直接i/o等等,主要的事情我注意到你也会改变文件的大小(如你的问题中所说的,实际数据长度是5字节,而你将数据更新到8字节)。现在这是非常难以管理的。永远不建议更改微筛选器/文件系统驱动程序中的文件大小。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12092098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档