Как удалить файл из режима ядра?

У меня есть минифильтр (режим ядра). Я хочу удалить файл с определенным путем (\Device\HarddiskVolume1\file.txt или C:\file.txt) из режима ядра

Есть ли способ сделать это?

ОБНОВЛЕНИЕ: 20150130

Я пытаюсь использовать рутину ZwDeleteFile, как сказал Гарри Джонстон. Вот мои коды:

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

Но это сломало мою систему. Что-то не так с моими кодами? => исправлено (это ответ)

Спасибо!

4 ответа

Решение

Подпрограмма ZwDeleteFile:

Подпрограмма ZwDeleteFile удаляет указанный файл.

Использование FltSetInformationFile() функция с FileDispositionInformation учебный класс.

Обычными способами невозможно удалить файл из режима ядра, то есть из драйвера устройства.

Такая практика или идея крайне не рекомендуется.

Есть много способов сделать это, как показано в минифильтре DeleteSample от Microsoft.

  1. Флаг FILE_DELETE_ON_CLOSE, который вы можете использовать в выбранной вами подпрограмме CreateFile.
  2. Устанавливая FileDispositionInformation
  3. Также обратите внимание на недавно введенный FILE_DISPOSITION_INFORMATION_EX

Все должно быть более понятно после изучения образца. Также обратите внимание, что вы можете выполнять транзакции, а также удалять файл по его идентификатору.

Удачи.

Другие вопросы по тегам