Ключ реестра PendingFileRenameOperations

PendingFileRenameOperations может удалить неудаляемые файлы




Ключ реестра PendingFileRenameOperations предназначен для операций отложенного переноса файлов. Файлы, записанные в этом ключе переносятся при старте системы. Делается это в том случае, если файлы заблокированы от изменений во время работы системы и не могут быть перенесены из-за этого.

Ключ реестра PendingFileRenameOperations также можно использовать для удаления неудаляемых файлов. Сделать это вручную можно следующим образом:

Удаление неудаляемого файла

  1. Запустить с помощью Пуск, Выполнить команду regedit и перейти в ней в ветку реестра HKLM\System\CurrentControlSet\Control\Session Manager
  2. Правка, Создать, Мультистроковый параметр, в качестве имени параметра ввести PendingFileRenameOperations.
  3. Открыть ключ реестра для редактирования, в поле "Значение" ввести префикс \??\ и после него полный путь к файлу, который требуется удалить. Длинные имена с пробелами не нужно заключать в кавычки. Например, чтобы удалить файл C:\Long Directory Name\Long File Name.exe нужно будет ввести такую строку:
    
    \??\C:\Long Directory Name\Long File Name.exe
    
    После этого нужно нажать OK.
  4. Формат этого ключа реестра предполагает также ввод второй строки, где должно содержаться имя файла, которое будет у файла после перемещения. Но в случае удаления файла, вместо имени должна быть пустая строка (нулевая). Ввести её можно следующим образом: Нажмите правой кнопкой мыши по ключу, и выберите "Изменить двоичные данные". Перейдите в конец шестнадцатиричной строки и введите 0000 (четыре нуля), нажмите ОК.
  5. Закройте редактор реестра regedit и перезагрузите компьютер, чтобы произшло удаление файла.

Перенос неудаляемого файла

Последовательность действий точно такая же, только в пункте 3 следует ввести два пути через пробел. Например, чтобы перенести C:\tmp\file1.txt в file2.txt нужно ввести такую строку:

\??\C:\tmp\file1.txt \??\C:\tmp\file2.txt

Дальше следует открыть двоичные данные, найти в конце первой строки последовательность 0020, стереть эти два байта клавишей Delete и ввести 0000 (четыре нуля). Это заменит пробел, разделяющий строки на нулевой символ, как того требует формат ключа PendingFileRenameOperations. После перезагрузки файл будет переименован.

Позже на сайте будет размещён материал о программной реализации данного способа переноса и удаления файлов при загрузке Windows.

О префиксе

А что же означает префикс \??\, добавляемый перед путём файла? Это префикс пути в формате NT. Именно такой формат указания пути к файлам часто используется в приложениях, написанных с использованием Native API и библиотеки ntdll.dll. Такой формат пути файла используется в ключе PendingFileRenameOperations потому, что файловыми операциями, описанными в этом ключе занимается менеджер сессий Windows (smss.exe), программа, являющаяся native-приложением.



Автор: амдф
Дата: 04.02.2011


При копировании материалов хорошим тоном будет указание авторства и ссылка на сайт.