如何从内核模式删除文件?
How to delete a file from kernel-mode?
我有一个微过滤器(内核模式)。我想从内核模式
中删除具有特定路径(\Device\HarddiskVolume1\file.txt 或 C:\file.txt)的文件
有什么办法吗?
更新:20150130
我试着用ZwDeleteFile routine as 表示。这些是我的代码:
RtlInitUnicodeString(&gRedirectFullFilePath, "\Device\HarddiskVolume1\test.txt"); // This file existed
InitializeObjectAttributes(&ObjectAttribute, &gRedirectFullFilePath, OBJ_CASE_INSENSITIVE, NULL, NULL);
status = ZwDeleteFile(&ObjectAttribute);
但它使我的系统崩溃。我的代码有什么问题吗? => 已修复(这是答案)
谢谢!
通过通常的方法无法从内核模式(即从设备驱动程序)删除文件。
极力劝阻这种做法或想法。
将 FltSetInformationFile()
函数与 FileDispositionInformation
class 一起使用。
The ZwDeleteFile routine deletes the specified file.
如 Microsoft 的微过滤器 DeleteSample 所示,您可以通过多种方式实现这一点。
- FILE_DELETE_ON_CLOSE 可以在您选择的 CreateFile 例程中使用的标志。
- 通过设置FileDispositionInformation
- 还要注意新引入的FILE_DISPOSITION_INFORMATION_EX
研究示例后,一切都应该更加清楚。
另请注意,您可以进行事务性删除,也可以通过文件 ID 删除文件。
祝你好运。
我有一个微过滤器(内核模式)。我想从内核模式
中删除具有特定路径(\Device\HarddiskVolume1\file.txt 或 C:\file.txt)的文件有什么办法吗?
更新:20150130
我试着用ZwDeleteFile routine as
RtlInitUnicodeString(&gRedirectFullFilePath, "\Device\HarddiskVolume1\test.txt"); // This file existed
InitializeObjectAttributes(&ObjectAttribute, &gRedirectFullFilePath, OBJ_CASE_INSENSITIVE, NULL, NULL);
status = ZwDeleteFile(&ObjectAttribute);
但它使我的系统崩溃。我的代码有什么问题吗? => 已修复(这是答案)
谢谢!
通过通常的方法无法从内核模式(即从设备驱动程序)删除文件。
极力劝阻这种做法或想法。
将 FltSetInformationFile()
函数与 FileDispositionInformation
class 一起使用。
The ZwDeleteFile routine deletes the specified file.
如 Microsoft 的微过滤器 DeleteSample 所示,您可以通过多种方式实现这一点。
- FILE_DELETE_ON_CLOSE 可以在您选择的 CreateFile 例程中使用的标志。
- 通过设置FileDispositionInformation
- 还要注意新引入的FILE_DISPOSITION_INFORMATION_EX
研究示例后,一切都应该更加清楚。 另请注意,您可以进行事务性删除,也可以通过文件 ID 删除文件。
祝你好运。