Я выполнил небольшую работу над LegacyDisable, которую подробно описал ниже.
Этот метод описан Microsoft в статье Глаголы и ассоциации файлов - Регистрация глаголов для обратной совместимости:
Некоторые приложения могут искать в реестре ключи глаголов , которые больше не используются. Для этого эти ключи можно оставить в реестре с добавлением значения LegacyDisable к ключу глагола, который сообщает системе, что глагол не является действительным глаголом, но существует исключительно для обратной совместимости.
Использование значения LegacyDisable показано здесь. Значение только должно присутствовать; он может иметь любой тип значения (хотя REG_NONE является наиболее подходящим) и не требует каких-либо данных, связанных с ним.
Если данные присутствуют, они игнорируются.
* KEY_CLASSES_ROOT
* Application
* shell
* open
(Default) = &Open
LegacyDisable
* command
(Default) = command line
Использование LegacyDisable, по-видимому, ограничено для отключения глаголов контекста оболочки, поскольку это всегда описано только в этом контексте.
Этот метод используется утилитой ShellMenuView, в которой говорится, что "этот ключ реестра не поддерживается Windows 98", поэтому кажется, что он возник в Windows NT.
Я нашел этот метод упоминается в двух книгах:
- Windows 7 раздражает (2010), стр. 179:
Видите пункт контекстного меню, от которого хотите избавиться? Просто удалите соответствующий ключ действия (например, New, Open, Print), и он сразу исчезнет. Еще лучше, добавьте строковое значение с именем LegacyDisable к ключу, чтобы скрыть его в проводнике Windows без необходимости что-либо удалять.
- Устранение неполадок реестра Windows, стр. 100
В этих местах вы увидите подразделы для стороннего программного обеспечения, которое подключилось к вашим контекстным меню. Есть несколько способов справиться с ними. Вы можете удалить ключи, чтобы удалить их полностью. Чтобы заставить их отображаться только по нажатию Shift+ правой кнопкой мыши, добавьте строковое значение к каждому из них с именем "Extended" или оставьте их в реестре, но отключите их, добавьте строковое значение с именем "LegacyDisable".
Я думаю, что это обо всей полезной информации, которую можно найти для LegacyDisable.
Что касается того, почему CCleaner использует этот метод вместе с другим методом уничтожения ключа, я могу сделать только две гипотезы:
- Код был написан двумя разными программистами, один из которых не знал о LegacyDisable
- Метод уничтожения ключа используется в тех случаях, когда LegacyDisable не работает (не глаголы контекста оболочки).