Index: reactos/dll/win32/shell32/wine/shellord.c =================================================================== --- reactos/dll/win32/shell32/wine/shellord.c (revision 73492) +++ reactos/dll/win32/shell32/wine/shellord.c (working copy) @@ -4,6 +4,7 @@ * * Copyright 1997 Marcus Meissner * 1998 Jürgen Schmied + * 2017 Katayama Hirofumi MZ * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -195,16 +196,98 @@ /************************************************************************* * SHGetSetSettings [SHELL32.68] */ + +static const char AdvancedRegPath[] = + "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced"; + VOID WINAPI SHGetSetSettings(LPSHELLSTATE lpss, DWORD dwMask, BOOL bSet) { - if(bSet) - { - FIXME("%p 0x%08x TRUE\n", lpss, dwMask); - } - else - { - SHGetSettings((LPSHELLFLAGSTATE)lpss,dwMask); - } + HKEY hKey; + DWORD dwData, dwDataSize = sizeof(DWORD); + + TRACE("(%p 0x%08x)\n", lpss, dwMask); + + if (!bSet) + { + SHGetSettings((LPSHELLFLAGSTATE)lpss,dwMask); + return; + } + + if (RegOpenKeyExA(HKEY_CURRENT_USER, AdvancedRegPath, 0, KEY_READ, &hKey)) + return; + + if (SSF_SHOWEXTENSIONS & dwMask) + { + dwData = (lpss->fShowExtensions != FALSE); + RegSetValueExA(hKey, "HideFileExt", 0, REG_DWORD, (LPBYTE)&dwData, dwDataSize); + } + if (SSF_SHOWINFOTIP & dwMask) + { + dwData = (lpss->fShowInfoTip != FALSE); + RegSetValueExA(hKey, "ShowInfoTip", 0, REG_DWORD, (LPBYTE)&dwData, dwDataSize); + } + if (SSF_DONTPRETTYPATH & dwMask) + { + dwData = (lpss->fDontPrettyPath != FALSE); + RegSetValueExA(hKey, "DontPrettyPath", 0, REG_DWORD, (LPBYTE)&dwData, dwDataSize); + } + if (SSF_HIDEICONS & dwMask) + { + dwData = (lpss->fHideIcons != FALSE); + RegSetValueExA(hKey, "HideIcons", 0, REG_DWORD, (LPBYTE)&dwData, dwDataSize); + } + if (SSF_MAPNETDRVBUTTON & dwMask) + { + dwData = (lpss->fMapNetDrvBtn != FALSE); + RegSetValueExA(hKey, "MapNetDrvBtn", 0, REG_DWORD, (LPBYTE)&dwData, dwDataSize); + } + if (SSF_SHOWATTRIBCOL & dwMask) + { + dwData = (lpss->fShowAttribCol != FALSE); + RegSetValueExA(hKey, "ShowAttribCol", 0, REG_DWORD, (LPBYTE)&dwData, dwDataSize); + } + if ((SSF_SHOWALLOBJECTS | SSF_SHOWSYSFILES) & dwMask) + { + BOOL fShowAllObjects = lpss->fShowAllObjects; + BOOL fShowSysFiles = lpss->fShowSysFiles; + + if (!(SSF_SHOWALLOBJECTS & dwMask)) + fShowAllObjects = 1; + if (!(SSF_SHOWSYSFILES & dwMask)) + fShowSysFiles = 1; + + if (!fShowAllObjects && !fShowSysFiles) + { + dwData = 0; + RegSetValueExA(hKey, "Hidden", 0, REG_DWORD, (LPBYTE)&dwData, dwDataSize); + } + else if (fShowAllObjects && !fShowSysFiles) + { + dwData = 1; + RegSetValueExA(hKey, "Hidden", 0, REG_DWORD, (LPBYTE)&dwData, dwDataSize); + } + else if (!fShowAllObjects && fShowSysFiles) + { + dwData = 2; + RegSetValueExA(hKey, "Hidden", 0, REG_DWORD, (LPBYTE)&dwData, dwDataSize); + } + } + + dwData = (lpss->fWebView != FALSE); + RegSetValueExA(hKey, "WebView", 0, REG_DWORD, (LPBYTE)&dwData, dwDataSize); + + dwData = (lpss->fFilter != FALSE); + RegSetValueExA(hKey, "Filter", 0, REG_DWORD, (LPBYTE)&dwData, dwDataSize); + + dwData = (lpss->fShowSuperHidden != FALSE); + RegSetValueExA(hKey, "SuperHidden", 0, REG_DWORD, (LPBYTE)&dwData, dwDataSize); + + dwData = (lpss->fSepProcess != FALSE); + RegSetValueExA(hKey, "SeparateProcess", 0, REG_DWORD, (LPBYTE)&dwData, dwDataSize); + + RegCloseKey(hKey); + + TRACE("-- 0x%04x\n", *(WORD*)lpss); } /************************************************************************* @@ -223,7 +306,7 @@ TRACE("(%p 0x%08x)\n",lpsfs,dwMask); - if (RegCreateKeyExA(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", + if (RegCreateKeyExA(HKEY_CURRENT_USER, AdvancedRegPath, 0, 0, 0, KEY_ALL_ACCESS, 0, &hKey, 0)) return;