检查读取操作是否适用于过滤器驱动程序中的特定文件

时间:2017-07-21 12:32:17

标签: windows driver minifilter

你好我是新的过滤器驱动程序编程,我拿了windows swapBuffer示例,我尝试修改它以便为每个读/写操作打开文件名 并打印试图读/写的数据。

我尝试这样做:

FLT_PREOP_CALLBACK_STATUS SwapPreWriteBuffers(
_Inout_ PFLT_CALLBACK_DATA Data,
_In_ PCFLT_RELATED_OBJECTS FltObjects,
_Flt_CompletionContext_Outptr_ PVOID *CompletionContext)
{
 /* here we do some logic that check that we want to write more the 
    0 bytes and  get volume context and allocate aligned nonPaged  memory 
    for the "swapping memory" ,  build a MDL and then if all succeed i try this: 
 */
    WCHAR filename[300] = {0};
    wfprintf(filename, "%wZ\0", Data->Iopb->TargetFileObject->FileName);
    if (NULL != wcstr(filename, L"try_me.txt"))
    {
         DbgPrint("Fname %S try to write %S\n", filename, Data->Iopb->Parameters.Write.WriteBuffe);
    }
}

我的主要问题(我认为)数据 - > Iopb-> TargetFileObject-> FileName是unicode,我不知道如何让这个和这个文件名字符串的比较

我的外部问题是如何将缓冲区当前打印到dbg字符串而不会冒蓝屏的风险? (我从他们那里得到了很多......)有时候我会在没有写字符串的情况下使用这个功能,我如何识别不同并安全地打印它?

最后一个问题,有没有办法尝试nake尝试除了驱动程序或所有故障都直接继续蓝屏?

谢谢

P.S。 这里是整个代码的链接(没有我写的添加内容(我在上面的帖子中列出)) https://github.com/Microsoft/Windows-driver-samples/blob/master/filesys/miniFilter/swapBuffers/swapBuffers.c

1 个答案:

答案 0 :(得分:1)

文件名是IRP_MJ_CREATE的概念。你不能依赖irp_mj_write的名字或阅读。所以最好在创造中做到这一点。还尝试从FltObject获取名称 - > FileObject-> FileName它也可以为您提供所需的文件名,也可以使用其他名称。

要打印书面数据,您需要在minifilter中检查Irp标志,它来自Data-> Iopb-> IrpFlags,IRP_PAGING_IO如果是真的那么打印缓冲区使用 KdPrint((“....”));

是的,您可以使用try,驱动程序除外。

希望这可能会有所帮助。

:)

相关问题