我想在关闭文件时更改文件,并在打开文件时撤消更改。它有点像加密驱动程序,只是我不想加密文件。
我在 Visual Studio 2012 中使用 WDK8 创建了一个新的“过滤器驱动程序:文件系统微型过滤器”项目,并将 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;
}
我想要一些关于这个主题的指导。
还有什么是调试这个的最佳方法?我还没有找到打印到 Windows 7 调试的方法。
谢谢!gfgqtmakia。
编辑:我已经阅读了http://code.msdn.microsoft.com/windowshardware/swapBuffer-File-System-6b7e6e2d但我认为它对我没有帮助,因为它是用于读/写的,我没有不想处理。
EDIT2:或者我应该在 PreCreate 和 PostClose 中进行更改,当文件在硬盘驱动器上而不是在 IRP 中间时,然后我不需要“即时”处理缓冲区,而是在磁盘?