webdevqa.jp.net

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

レジストリキーの下:

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

... Windowsエクスプローラーの隠しファイルとフォルダーの表示に関連する2つの十分に文書化された値があります。

Hiddenキーは、trueの場合は隠しファイルを表示し、falseの場合は非表示にします。

ShowSuperHiddenキーは通常、「スーパー隠しファイル」(つまり、保護された/システム)ファイルと同等のものとして認識されています。 trueの場合はスーパー隠しファイルを表示し、falseの場合は非表示にします。

そうは言っても、SuperHiddenの値はどこから来るのでしょうか。その名前は、それがHiddenキーへの自然な類似物であることを示唆していますが、それに関する文書とそれが何をするかは、私が知る限りでは存在しません。

SuperHidden値の目的は何ですか、そしてShowSuperHiddenとどのように違うのですか?

8
Hashim

ShowSuperHidden発見したとおり は、非表示(非表示+システム)ファイルを表示するかどうかを制御します。私の知る限り、SuperHiddenは何も制御せず、その存在はおそらくプログラミングエラーです。

Process Monitor を使用して、これらのレジストリ値の読み取りと書き込みを確認しました。 SuperHiddenとの唯一の対話は、ユーザーが[フォルダーオプション]ダイアログの[表示]タブを開いたときの書き込みでした。スーパー隠しファイルが表示される場合は1を受け取り、それ以外の場合は0を受け取ります。 Explorerを終了して再起動しても、読み込まれませんでした。

Procmonは監視対象の操作につながるスタックを提供します(イベントをダブルクリックして[Stack]タブを調べます)。したがって、DLLを使用して関連するファイル IDA v5. =。SuperHiddenについて言及した唯一の関連するものはShell32.dllCachedShellState::SaveAdvancedSettings関数は、そのキーとそのキーの他の値にレジストリ書き込みを発行し、現在のビュー設定をコミットします。

writing SuperHidden in SaveAdvancedSettings

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

reading ShowSuperHidden in _GetAdvancedSettings

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

Windows 10 writes to ShowSuperHidden in SaveAdvancedSettings

したがって、Windows 7に同梱されている関数のバージョンをプログラミングするときに、開発者は誤ってShowShowSuperHiddenを省略しましたが、エラーはWindows 10への途中で修正されました。

好奇心旺盛な方のために、ここで各設定キーの下のValueNameエントリを調べているため、[フォルダーオプション]ダイアログはこのエラーによって壊れていません。

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

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

11
Ben N