diff --git a/boot/bootdata/hivedef.inf b/boot/bootdata/hivedef.inf index 8346f145159..49c7b8bd11e 100644 --- a/boot/bootdata/hivedef.inf +++ b/boot/bootdata/hivedef.inf @@ -1892,6 +1892,7 @@ HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced","ListviewShad HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced","HideFileExt",0x00010003,0x00000000 HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced","StartMenuLogoff",0x00010003,0x00000001 HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced","Hidden",0x00010003,1 +HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced","ShowSuperHidden",0x00010003,0 ; ComDlg32 HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32",,0x00000012 diff --git a/dll/win32/shell32/CDefView.cpp b/dll/win32/shell32/CDefView.cpp index 9dc6bc98110..608ada85bf4 100644 --- a/dll/win32/shell32/CDefView.cpp +++ b/dll/win32/shell32/CDefView.cpp @@ -908,29 +908,32 @@ HRESULT CDefView::FillList() DWORD dwFetched; HRESULT hRes; HDPA hdpa; - HKEY hKey; DWORD dFlags = SHCONTF_NONFOLDERS | SHCONTF_FOLDERS; + DWORD dwValue, cbValue; TRACE("%p\n", this); /* determine if there is a setting to show all the hidden files/folders */ - if (RegOpenKeyExW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS) + dwValue = 1; + cbValue = sizeof(dwValue); + SHGetValueW(HKEY_CURRENT_USER, + L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", + L"Hidden", NULL, &dwValue, &cbValue); + if (dwValue == 1) { - DWORD dataLength, flagVal; + dFlags |= SHCONTF_INCLUDEHIDDEN; + m_ListView.SendMessageW(LVM_SETCALLBACKMASK, LVIS_CUT, 0); + } - dataLength = sizeof(flagVal); - if (RegQueryValueExW(hKey, L"Hidden", NULL, NULL, (LPBYTE)&flagVal, &dataLength) == ERROR_SUCCESS) - { - /* if the value is 1, then show all hidden files/folders */ - if (flagVal == 1) - { - dFlags |= SHCONTF_INCLUDEHIDDEN; - m_ListView.SendMessageW(LVM_SETCALLBACKMASK, LVIS_CUT, 0); - } - } - - /* close the key */ - RegCloseKey(hKey); + dwValue = 0; + cbValue = sizeof(dwValue); + SHGetValueW(HKEY_CURRENT_USER, + L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", + L"ShowSuperHidden", NULL, &dwValue, &cbValue); + if (dwValue) + { + dFlags |= SHCONTF_INCLUDESUPERHIDDEN; + m_ListView.SendMessageW(LVM_SETCALLBACKMASK, LVIS_CUT, 0); } /* get the itemlist from the shfolder */ diff --git a/dll/win32/shell32/folders/CFSFolder.cpp b/dll/win32/shell32/folders/CFSFolder.cpp index 493eeeafa49..d0aee2faccf 100644 --- a/dll/win32/shell32/folders/CFSFolder.cpp +++ b/dll/win32/shell32/folders/CFSFolder.cpp @@ -391,10 +391,16 @@ HRESULT WINAPI CFileSysEnum::Initialize(LPWSTR lpszPath, DWORD dwFlags) { BOOL findFinished = FALSE; +#define HIDDEN FILE_ATTRIBUTE_HIDDEN +#define SUPER_HIDDEN (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM) + do { - if ( !(stffile.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) - || (dwFlags & SHCONTF_INCLUDEHIDDEN) ) + if ((stffile.dwFileAttributes & HIDDEN) == 0 || + ((dwFlags & SHCONTF_INCLUDEHIDDEN) && + (stffile.dwFileAttributes & SUPER_HIDDEN) == HIDDEN) || + ((dwFlags & SHCONTF_INCLUDESUPERHIDDEN) && + (stffile.dwFileAttributes & SUPER_HIDDEN) == SUPER_HIDDEN)) { LPITEMIDLIST pidl = NULL; diff --git a/sdk/include/psdk/shobjidl.idl b/sdk/include/psdk/shobjidl.idl index 1fa2e3940b5..a94f1a9f4c6 100644 --- a/sdk/include/psdk/shobjidl.idl +++ b/sdk/include/psdk/shobjidl.idl @@ -176,7 +176,12 @@ interface IShellFolder : IUnknown SHCONTF_INIT_ON_FIRST_NEXT = 256, SHCONTF_NETPRINTERSRCH = 512, SHCONTF_SHAREABLE = 1024, - SHCONTF_STORAGE = 2048 + SHCONTF_STORAGE = 2048, + SHCONTF_NAVIGATION_ENUM = 0x01000, + SHCONTF_FASTITEMS = 0x02000, + SHCONTF_FLATLIST = 0x04000, + SHCONTF_ENABLE_ASYNC = 0x08000, + SHCONTF_INCLUDESUPERHIDDEN = 0x10000 }; typedef DWORD SHCONTF;