
レジストリキーの下:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced
...Windows エクスプローラーで隠しファイルとフォルダーを表示することに関連する、よく文書化された値が 2 つあります。
キーHidden
が true の場合、隠しファイルが表示され、false の場合、隠しファイルが非表示になります。
このShowSuperHidden
キーは、一般に「スーパー隠し」(つまり保護された/システム) ファイルと同等であると認識されています。つまり、true の場合はスーパー隠しファイルを表示し、false の場合はスーパー隠しファイルを非表示にします。
とはいえ、SuperHidden
値はどこに関係するのでしょうか? その名前は、キーの自然な類似物であることを示唆していますHidden
が、私が知る限り、それに関するドキュメントやそれが何をするのかは存在しません。
値の目的は何ですかSuperHidden
? とどう違うのですかShowSuperHidden
?
答え1
ShowSuperHidden
、私たちが発見したようには、スーパー隠し (隠し + システム) ファイルを表示するかどうかを制御します。私の知る限り、SuperHidden
何も制御せず、その存在はおそらくプログラミング エラーです。
使用プロセスモニター、これらのレジストリ値の読み取りと書き込みを観察しました。 との唯一のやり取りは、SuperHidden
ユーザーが [フォルダー オプション] ダイアログの [表示] タブを開いたときの書き込みでした。 極秘ファイルが表示されている場合は 1 が返され、それ以外の場合は 0 が返されました。 エクスプローラーを終了して再起動しても、読み取られることはありませんでした。
Procmonは監視対象の操作につながるスタックを提供します(イベントをダブルクリックしてスタックタブを参照してください)。そのため、関連するDLLファイルを次のように調べました。IDA v5.0. について言及されている唯一の関連項目SuperHidden
は ですshell32.dll
。CachedShellState::SaveAdvancedSettings
関数は、その値とそのキー内の他の値にレジストリ書き込みを発行し、現在のビュー設定をコミットします。
エクスプローラーは、どうやら [表示] タブを表示する前にその関数を呼び出すようです。これは、表示オプションの現在の状態をロードする前に、レジストリが現在のメモリ内設定と一致していることを確認するために行われると思われますが、その理由については 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
そのブランチの他の部分の重要性を理解することは、読者への(楽しい!)練習として残されています。