В разделе реестра:
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
Функция выполняет запись в реестр для этого значения и других значений в этом ключе, фиксируя текущие настройки представления.
Explorer, по-видимому, вызывает эту функцию перед отображением вкладки View. Вероятно, это делается для того, чтобы убедиться, что реестр соответствует текущим настройкам в памяти, прежде чем загружать текущее состояние параметров View, хотя я признаю, что не уверен на 100% в обосновании. В любом случае, соответствующая shell32.dll
функция CachedShellState::_GetAdvancedSettings
выдает чтение из правильного значения, ShowSuperHidden
.
Эти листинги дизассемблирования взяты из версии этой DLL для Windows 7. В Windows 10 SuperHidden
не существует в реестре и CachedShellState::SaveAdvancedSettings
пишет в ShowSuperHidden
.
Поэтому я прихожу к выводу, что при программировании версии этой функции, поставляемой с Windows 7, разработчик по ошибке пропустил in Show
, ShowSuperHidden
но ошибка была исправлена в Windows 10.
Для любопытных: диалоговое окно «Параметры папки» не нарушается этой ошибкой, поскольку оно проверяет ValueName
запись под каждым ключом настройки здесь:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder
Выяснение значимости других частей этой ветви оставляем в качестве (забавного!) упражнения для читателя.