我想要在文件关闭时更改文件,并在打开文件时撤消更改。它有点像加密驱动程序,除了我不想加密文件。
我在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}。
我怀疑这并不是简单的:
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中间的时候,然后我就不需要在磁盘上而是“动态”地处理缓冲区了?
发布于 2012-08-24 02:08:32
你将不得不写一些类似交换缓冲区的东西。在PostCreate/PreClose中修改文件数据不是一个好主意。
几个原因:
Data->Iopb->Parameters.Write.WriteBuffer。这只在IRP_MJ_WRITE中有效。您可以执行FltWriteFile将数据写入文件。https://stackoverflow.com/questions/12092098
复制相似问题