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,우리가 발견한 대로, 슈퍼 숨김(Hidden + System) 파일 표시 여부를 제어합니다. 내가 알 수 있는 한, SuperHidden는 아무것도 제어하지 않으며 그 존재는 아마도 프로그래밍 오류일 것입니다.

사용프로세스 모니터, 이러한 레지스트리 값에서 읽고 쓰는 것을 관찰했습니다. 유일한 상호 작용은 SuperHidden사용자가 폴더 옵션 대화 상자의 보기 탭을 열 때 쓰기였습니다. 슈퍼 숨겨진 파일이 표시되면 1을 받고, 그렇지 않으면 0을 받습니다. Explorer를 종료했다가 다시 시작해도 읽히지 않았습니다.

Procmon은 모니터링되는 작업(이벤트를 두 번 클릭하고 스택 탭 참조)으로 이어지는 스택을 제공하므로 다음을 사용하여 관련된 DLL 파일을 검사했습니다.IDA v5.0. SuperHidden에 대한 언급이 있는 유일한 관련 항목은 입니다 shell32.dll. 이 CachedShellState::SaveAdvancedSettings함수는 해당 값과 해당 키의 다른 항목에 대한 레지스트리 쓰기를 실행하여 현재 보기 설정을 커밋합니다.

SaveAdvancedSettings에 SuperHidden 작성

Explorer는 보기 탭을 표시하기 전에 분명히 해당 기능을 호출합니다. 이는 아마도 보기 옵션의 현재 상태를 로드하기 전에 레지스트리가 현재 메모리 내 설정과 일치하는지 확인하기 위해 수행되었을 것입니다. 하지만 그 이유가 100% 확실하지는 않다는 점은 인정합니다. 어쨌든 해당 shell32.dll함수 CachedShellState::_GetAdvancedSettings는 올바른 값인 ShowSuperHidden.

_GetAdvancedSettings에서 ShowSuperHidden 읽기

이러한 디스어셈블리 목록은 해당 DLL의 Windows 7 버전에서 가져온 것입니다. Windows 10에서는 SuperHidden레지스트리에 존재하지 CachedShellState::SaveAdvancedSettings않으며 ShowSuperHidden.

Windows 10은 SaveAdvancedSettings의 ShowSuperHidden에 씁니다.

따라서 Windows 7에 포함된 해당 기능의 버전을 프로그래밍할 때 개발자가 실수로 in 을 생략했지만 ShowWindows ShowSuperHidden10으로 가는 도중에 오류가 수정되었다고 결론을 내렸습니다.

궁금한 점은 폴더 옵션 대화 상자가 ValueName여기에서 각 설정 키 아래의 항목을 참조하기 때문에 이 오류로 인해 중단되지 않는다는 것입니다.

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

해당 가지의 다른 부분의 중요성을 알아내는 것은 (재미있는!) 독자의 몫입니다.

관련 정보