【问题标题】:How to delete a file from kernel-mode?如何从内核模式中删除文件?
【发布时间】:2015-01-29 10:58:50
【问题描述】:

我有一个微过滤器(内核模式)。我想从内核模式中删除具有特定路径(\Device\HarddiskVolume1\file.txt 或 C:\file.txt)的文件

有什么办法吗?

更新:20150130

我尝试像Harry Johnston 所说的那样使用ZwDeleteFile routine。这些是我的代码:

RtlInitUnicodeString(&gRedirectFullFilePath, "\\Device\\HarddiskVolume1\\test.txt"); // This file existed
InitializeObjectAttributes(&ObjectAttribute, &gRedirectFullFilePath, OBJ_CASE_INSENSITIVE, NULL, NULL); 
status = ZwDeleteFile(&ObjectAttribute);

但它使我的系统崩溃。我的代码有什么问题吗? => 已修复(这是答案)

谢谢!

【问题讨论】:

  • 字符串缺少反斜杠,但我不认为这会导致崩溃。为什么pObjectAttribute 是指针?通常它是一个局部变量。这是文件系统微过滤驱动程序吗?我不确定在这种情况下调用 ZwDeleteFile() 是否合法。还要检查有关 IRQL 和特殊内核 APC 的文档化要求。
  • 没关系。谢谢你的帮助! @HarryJohnston

标签: c windows driver minifilter kernel-mode


【解决方案1】:

ZwDeleteFile routine

ZwDeleteFile 例程删除指定的文件。

【讨论】:

    【解决方案2】:

    通过常规方法无法从内核模式(即设备驱动程序)中删除文件。

    强烈反对这种做法或想法。

    【讨论】:

      【解决方案3】:

      FltSetInformationFile() 函数与FileDispositionInformation 类一起使用。

      【讨论】:

      • 我从不在文件对象中的特定字符串中删除文件。
      【解决方案4】:

      如 Microsoft 的微过滤器 DeleteSample 中所示,您可以通过多种方式做到这一点。

      1. FILE_DELETE_ON_CLOSE 标志,您可以在选择的 CreateFile 例程中使用它。
      2. 通过设置FileDispositionInformation
      3. 还要注意新引入的FILE_DISPOSITION_INFORMATION_EX

      研究完样本后,一切都应该更清楚了。 另请注意,您可以执行事务删除,也可以通过文件 ID 删除文件。

      祝你好运。

      【讨论】:

        猜你喜欢
        • 2016-05-30
        • 2014-01-06
        • 1970-01-01
        • 1970-01-01
        • 2018-01-30
        • 2014-12-25
        • 1970-01-01
        • 2015-09-05
        • 1970-01-01
        相关资源
        最近更新 更多