ShowSuperHidden レジストリ値と SuperHidden レジストリ値の違いは何ですか?

ShowSuperHidden レジストリ値と SuperHidden レジストリ値の違いは何ですか?

レジストリキーの下:

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.dllCachedShellState::SaveAdvancedSettings関数は、その値とそのキー内の他の値にレジストリ書き込みを発行し、現在のビュー設定をコミットします。

SaveAdvancedSettingsにSuperHiddenを書き込む

エクスプローラーは、どうやら [表示] タブを表示する前にその関数を呼び出すようです。これは、表示オプションの現在の状態をロードする前に、レジストリが現在のメモリ内設定と一致していることを確認するために行われると思われますが、その理由については 100% 確信があるわけではありません。いずれにしても、対応するshell32.dll関数CachedShellState::_GetAdvancedSettingsは正しい値からの読み取りを発行しますShowSuperHidden

_GetAdvancedSettings で ShowSuperHidden を読み取ります

これらの逆アセンブリ リストは、その DLL の Windows 7 バージョンのものです。Windows 10 では、SuperHiddenレジストリに存在せず、CachedShellState::SaveAdvancedSettingsに書き込みますShowSuperHidden

Windows 10 は SaveAdvancedSettings に ShowSuperHidden を書き込む

したがって、Windows 7 に付属するその関数のバージョンをプログラミングする際に、開発者が誤って in を省略したShowShowSuperHidden、Windows 10 に移行する過程でそのエラーが修正されたと結論付けます。

興味深いことに、フォルダー オプション ダイアログは、ValueName次の各設定キーの下のエントリを参照するため、このエラーによって壊れることはありません。

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

そのブランチの他の部分の重要性を理解することは、読者への(楽しい!)練習として残されています。

関連情報