我想在文件关闭时更改文件,并在文件打开时撤消更改。 它有点像加密驱动程序,除了我不想加密文件。
我在Visual Studio 2012中使用WDK8创建了一个新的“Filter Driver:Filesystem Mini-Filter”项目,并注册了PreCreate,PostCreate,PreClose和PostClose作为回调函数。
例如,在文件的IRP_MJ_CLOSE上,它的字节是{72,101,108,108,111}(“Hello”),我希望在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;
}
我想就这个问题提供一些指导。
另外,调试此方法的最佳方法是什么?我还没有找到一种方法来打印到Windows 7调试。
谢谢! gfgqtmakia。
编辑:我读过http://code.msdn.microsoft.com/windowshardware/swapBuffer-File-System-6b7e6e2d,但我认为它不会对我有所帮助,因为它是用于读/写,我不想处理。EDIT2:或者我应该在PreCreate和PostClose中进行更改,当文件在硬盘驱动器上而不在IRP中间时,然后我就不需要“动态”处理缓冲区了“但是在磁盘上?
答案 0 :(得分:1)
您必须编写类似交换缓冲区的内容。在PostCreate / PreClose中修改文件数据不是一个好主意。
几个原因:
Data->Iopb->Parameters.Write.WriteBuffer
。这仅在IRP_MJ_WRITE中有效。您可以FltWriteFile
将数据写入文件。