6

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

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

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

Hidden ключ показывает скрытые файлы, когда истина, и скрывает их, когда ложь.

Ключ ShowSuperHidden как правило, считается его эквивалентом для "супер скрытых" (то есть защищенных / системных) файлов; он показывает супер-скрытые файлы, когда истина, и скрывает их, когда ложь.

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

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

1 ответ1

10

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

Используя Process Monitor, я наблюдал чтение и запись в эти значения реестра. Единственным взаимодействием с SuperHidden была запись, когда пользователь открыл вкладку «Вид» в диалоговом окне «Свойства папки». Он получил 1, если отображаются супер-скрытые файлы, 0 в противном случае. Он никогда не читался, даже когда я заканчивал и перезапускал Проводник.

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

написание SuperHidden в SaveAdvancedSettings

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

чтение ShowSuperHidden в _GetAdvancedSettings

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

Windows 10 пишет в ShowSuperHidden в SaveAdvancedSettings

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .