首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Minifilter防止使用警告对话框创建新文件

Minifilter防止使用警告对话框创建新文件
EN

Stack Overflow用户
提问于 2014-12-10 10:23:17
回答 2查看 996关注 0票数 0

我在内核模式下编写了一个小型机。我想防止在USB上创建一个新文件。但当我用:

代码语言:javascript
复制
[CODE]
    FltCancelFileOpen( FltObjects->Instance, FltObjects->FileObject );
    Data->IoStatus.Status = STATUS_ACCESS_DENIED; 
    Data->IoStatus.Information = 0;
    return FLT_PREOP_COMPLETE;
[CODE]

=> I可以防止创建新文件。但它总是显示警告对话框。我该怎么做才能不显示这个对话框呢?

更新: 2014/12/22

我正在写一个fs微型驱动程序以供静坐。当用户将文件或文件夹拖放到USB中时(例如H:)

  1. 司机将获得文件的信息; ==>完成
  2. 驱动程序将删除此文件或文件夹(在USB上不会创建任何文件/文件夹)

  • 我只想捕捉事件启动应用程序(3)
  • 在USB上创建文件之前,文件将被删除。 **==>完成

  1. 想点儿办法吧。

=>,请给我一个关于这个静坐的建议?非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-26 03:42:06

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

  1. 首先,定义新的unicode字符串newfile = "abcdef.txt";
  2. 使用FltGetFileNameInformation获取文件名信息
  3. 使用FltParseFileNameInformation对其进行修改。
  4. 获取文件名(格式:\Device\HarddiskVolume1path_to_filefilename.ext )
  5. 然后,将其分成两部分:\Device\HarddiskVolume1path_to_file和filename.ext
  6. 将新文件追加到第一部分:\Device\HarddiskVolume1path_to_fileabcdef.txt
  7. 现在,我将按以下方式打开新文件,而不是旧文件: //获取旧文件名 PUNICODE_STRING pFileName =&>Iopb->TargetFileObject->文件名; //自由释放缓冲器 ExFreePool(pFileName->Buffer); //重新分配缓冲区pFileName->Length = 0;pFileName->MaximumLength = redirectTargetFile.MaximumLength;pFileName->Buffer = (PWSTR) ExAllocatePool(NonPagedPool,pFileName->MaximumLength); //为它分配新的文件名RtlCopyUnicodeString(pFileName,&unicode_string_new_file_name);//告诉内核重新解析打开的文件,以便它使用新的文件路径 Data->IoStatus.Information = IO_REPARSE;Data->IoStatus.Status = STATUS_REPARSE; FltSetCallbackDataDirty(数据);返回FLT_PREOP_SUCCESS_WITH_CALLBACK;

参考http://www.codingnotebook.com/2013/05/redirect-file-open-using-windows.html

票数 0
EN

Stack Overflow用户

发布于 2014-12-19 08:20:51

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27398552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档