В чем разница между значениями реестра ShowSuperHidden и SuperHidden?

В чем разница между значениями реестра ShowSuperHidden и SuperHidden?

В разделе реестра:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced

...существуют два хорошо документированных значения, которые относятся к отображению скрытых файлов и папок в проводнике Windows.

При значении true ключ Hiddenпоказывает скрытые файлы, при значении false — скрывает.

Этот ShowSuperHiddenключ обычно считается эквивалентом «суперскрытых» (т. е. защищенных/системных) файлов; при значении true он показывает суперскрытые файлы, а при значении false — скрывает их.

Но откуда берется значение SuperHidden? Его название предполагает, что это естественный аналог ключа Hidden, но, насколько я могу судить, документации по нему и его функциям не существует.

Каково назначение значения SuperHiddenи чем оно отличается от ShowSuperHidden?

решение1

ShowSuperHidden,как мы обнаружили, управляет отображением суперскрытых (Скрытых + Системных) файлов. Насколько я могу судить, SuperHiddenничем не управляет, и его существование, вероятно, является ошибкой программирования.

С использованиемМонитор процесса, я наблюдал чтение и запись в эти значения реестра. Единственным взаимодействием с SuperHiddenбыла запись, когда пользователь открывал вкладку Вид диалогового окна Параметры папки. Он получал 1, если отображаются сверхскрытые файлы, 0 в противном случае. Он никогда не считывался, даже когда я завершал и перезапускал Проводник.

Procmon предоставляет стек, который привел к отслеживаемой операции (дважды щелкните событие и просмотрите вкладку «Стек»), поэтому я проверил задействованные файлы DLL с помощьюИДА v5.0. Единственным соответствующим упоминанием SuperHiddenбыл shell32.dll. CachedShellState::SaveAdvancedSettingsФункция выполняет запись в реестр для этого значения и других значений в этом ключе, фиксируя текущие настройки представления.

запись SuperHidden в SaveAdvancedSettings

Explorer, по-видимому, вызывает эту функцию перед отображением вкладки View. Вероятно, это делается для того, чтобы убедиться, что реестр соответствует текущим настройкам в памяти, прежде чем загружать текущее состояние параметров View, хотя я признаю, что не уверен на 100% в обосновании. В любом случае, соответствующая shell32.dllфункция CachedShellState::_GetAdvancedSettingsвыдает чтение из правильного значения, ShowSuperHidden.

чтение ShowSuperHidden в _GetAdvancedSettings

Эти листинги дизассемблирования взяты из версии этой DLL для Windows 7. В Windows 10 SuperHiddenне существует в реестре и CachedShellState::SaveAdvancedSettingsпишет в ShowSuperHidden.

Windows 10 записывает ShowSuperHidden в SaveAdvancedSettings

Поэтому я прихожу к выводу, что при программировании версии этой функции, поставляемой с Windows 7, разработчик по ошибке пропустил in Show, ShowSuperHiddenно ошибка была исправлена ​​в Windows 10.

Для любопытных: диалоговое окно «Параметры папки» не нарушается этой ошибкой, поскольку оно проверяет ValueNameзапись под каждым ключом настройки здесь:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder

Выяснение значимости других частей этой ветви оставляем в качестве (забавного!) упражнения для читателя.

Связанный контент