レジストリキーの下:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced
... Windowsエクスプローラーの隠しファイルとフォルダーの表示に関連する2つの十分に文書化された値があります。
Hidden
キーは、trueの場合は隠しファイルを表示し、falseの場合は非表示にします。
ShowSuperHidden
キーは通常、「スーパー隠しファイル」(つまり、保護された/システム)ファイルと同等のものとして認識されています。 trueの場合はスーパー隠しファイルを表示し、falseの場合は非表示にします。
そうは言っても、SuperHidden
の値はどこから来るのでしょうか。その名前は、それがHidden
キーへの自然な類似物であることを示唆していますが、それに関する文書とそれが何をするかは、私が知る限りでは存在しません。
SuperHidden
値の目的は何ですか、そしてShowSuperHidden
とどのように違うのですか?
ShowSuperHidden
、 発見したとおり は、非表示(非表示+システム)ファイルを表示するかどうかを制御します。私の知る限り、SuperHidden
は何も制御せず、その存在はおそらくプログラミングエラーです。
Process Monitor を使用して、これらのレジストリ値の読み取りと書き込みを確認しました。 SuperHidden
との唯一の対話は、ユーザーが[フォルダーオプション]ダイアログの[表示]タブを開いたときの書き込みでした。スーパー隠しファイルが表示される場合は1を受け取り、それ以外の場合は0を受け取ります。 Explorerを終了して再起動しても、読み込まれませんでした。
Procmonは監視対象の操作につながるスタックを提供します(イベントをダブルクリックして[Stack]タブを調べます)。したがって、DLLを使用して関連するファイル IDA v5. =。SuperHidden
について言及した唯一の関連するものはShell32.dll
。 CachedShellState::SaveAdvancedSettings
関数は、そのキーとそのキーの他の値にレジストリ書き込みを発行し、現在のビュー設定をコミットします。
Explorerは、[表示]タブを表示する前にその関数を呼び出しているようです。これはおそらく、Viewオプションの現在の状態をロードする前に、レジストリが現在のメモリ内の設定と一致していることを確認するために行われますが、理由は100%確実ではありません。とにかく、対応するShell32.dll
関数 CachedShellState::_GetAdvancedSettings
は、正しい値ShowSuperHidden
から読み取りを発行します。
これらの逆アセンブリリストは、そのDLLのWindows 7バージョンのものです。 Windows 10では、SuperHidden
はレジストリに存在せず、CachedShellState::SaveAdvancedSettings
はShowSuperHidden
に書き込みます。
したがって、Windows 7に同梱されている関数のバージョンをプログラミングするときに、開発者は誤ってShow
のShowSuperHidden
を省略しましたが、エラーはWindows 10への途中で修正されました。
好奇心旺盛な方のために、ここで各設定キーの下のValueName
エントリを調べているため、[フォルダーオプション]ダイアログはこのエラーによって壊れていません。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder
そのブランチの他の部分の重要性を解明することは、(楽しい!)演習として読者に残します。