Filesystems 迷你过滤器防止使用警告对话框创建新文件

Filesystems 迷你过滤器防止使用警告对话框创建新文件,filesystems,driver,pass-through,minifilter,Filesystems,Driver,Pass Through,Minifilter,我已经在内核模式下编写了一个迷你过滤器。 我想阻止在USB上创建新文件。但当我使用: [CODE] FltCancelFileOpen( FltObjects->Instance, FltObjects->FileObject ); Data->IoStatus.Status = STATUS_ACCESS_DENIED; Data->IoStatus.Information = 0; return FLT_PREOP_COMPLETE;

我已经在内核模式下编写了一个迷你过滤器。 我想阻止在USB上创建新文件。但当我使用:

[CODE]
    FltCancelFileOpen( FltObjects->Instance, FltObjects->FileObject );
    Data->IoStatus.Status = STATUS_ACCESS_DENIED; 
    Data->IoStatus.Information = 0;
    return FLT_PREOP_COMPLETE;
[CODE]
=>我可以阻止创建新文件。但它总是显示警告对话框。 我应该怎么做才能不显示此对话框

更新日期:2014/12/22
我正在为一个情景编写fs微过滤器驱动程序。当用户将文件或文件夹拖放到USB时(例如H:)

  • 驱动程序将获取文件的信息
    ==>完成
  • 驱动程序将删除此文件或文件夹(USB上不会创建任何文件/文件夹)
    -我只想捕捉事件以启动应用程序(3)
    在USB上创建文件之前,将删除这些文件。
    **=>完成

  • 做点什么


  • =>对于这种情况,请给我一个建议?非常感谢

    不,您不能——请求的发起人决定如何对被拒绝的访问作出反应。您可能会允许打开但阻止任何写入,但这会混淆应用程序和用户。

    现在,我可以通过重定向打开另一个文件来解决我的问题

  • 首先,定义新的unicode字符串newfile=“abcdef.txt”

  • 使用FltGetFileNameInformation获取文件名信息

  • 使用FLTParseFileName信息对其进行排序

  • 获取文件名,其格式为:\Device\HarddiskVolume1[路径到文件]文件名[.ext]

  • 然后,将其拆分为以下部分:\Device\HarddiskVolume1[路径到文件]和文件名[.ext]

  • 将新文件附加到第一部分:\Device\HarddiskVolume1[路径\u到\u文件]abcdef.txt

  • 现在我将打开新文件而不是旧文件,如下所示:

    //获取旧文件名

    PUNICODE_字符串pFileName=&Data->Iopb->TargetFileObject->FileName

    //自由释放缓冲区

    ExFreePool(pFileName->Buffer)

    //重新分配缓冲区 pFileName->Length=0; pFileName->MaximumLength=redirectTargetFile.MaximumLength; pFileName->Buffer=(PWSTR)ExAllocatePool(非页面池,pFileName->MaximumLength)

    //为它指定新的文件名 rtlcopyUnicode解压(pFileName和unicode\u字符串\u新文件\u名称); //告诉内核重新分析此文件以使其打开,从而使用新的文件路径

    数据->IoStatus.Information=IO_重分析; 数据->IoStatus.Status=状态\重新分析; Data->Iopb->TargetFileObject->RelatedFileObject=NULL

    FltSetCallbackDataDirty(数据); 返回FLT_PREOP_SUCCESS_和_CALLBACK



  • 参考

    尤金·梅耶夫斯基·埃尔多斯!谢谢你的回答。你知道这种情况的其他方法吗?@GSP对不起,我现在想不出任何方法。您要么返回错误(然后报告给用户),要么报告成功,在这种情况下,应用程序将尝试继续操作。Mayevski'EldoS!非常感谢你。