ShowSuperHidden 和 SuperHidden 註冊表值之間有什麼區別?

ShowSuperHidden 和 SuperHidden 註冊表值之間有什麼區別?

在註冊表項下:

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

...有兩個詳細記錄的值與 Windows 資源管理器中隱藏檔案和資料夾的顯示有關。

Hidden鍵為 true 時顯示隱藏文件,為 false 時隱藏它們。

ShowSuperHidden密鑰通常被認為是「超級隱藏」(即受保護/系統)檔案的等效項;當 true 時顯示超級隱藏文件,當 false 時隱藏它們。

也就是說,SuperHidden價值從何而來?它的名字表明它是Hidden密鑰的自然類似物,但據我所知,關於它及其功能的文檔是不存在的。

該值的目的是什麼SuperHidden,它與 有何不同ShowSuperHidden

答案1

ShowSuperHidden,正如我們所發現的,控制是否顯示超級隱藏(隱藏+系統)檔案。據我所知,SuperHidden它不控制任何東西,它的存在可能是一個程式錯誤。

使用過程監控器,我觀察了這些註冊表值的讀取和寫入。唯一的互動SuperHidden是當使用者開啟「資料夾選項」對話方塊的「檢視」標籤時進行寫入。如果顯示超級隱藏文件,則收到 1,否則收到 0。即使我終止並重新啟動資源管理器,它也從未被讀取。

Procmon 提供了導致受監視操作的堆疊(雙擊事件並查閱“堆疊”選項卡),因此我使用以下命令檢查了涉及的 DLL 文件IDA v5.0。唯一提到的相關內容SuperHiddenshell32.dll。此CachedShellState::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

弄清楚該分支其他部分的重要性留給讀者作為(有趣!)練習。

相關內容