ReactOS 0.4.16-dev-1067-ge98bba2
general.cpp File Reference
#include "precomp.h"
Include dependency graph for general.cpp:

Go to the source code of this file.

Classes

struct  GENERAL_DIALOG
 

Typedefs

typedef struct GENERAL_DIALOG GENERAL_DIALOG
 
typedef struct GENERAL_DIALOGPGENERAL_DIALOG
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (fprop)
 
EXTERN_C void SHELL32_GetDefaultShellState (LPSHELLSTATE pss)
 
EXTERN_C LSTATUS SHELL32_WriteRegShellState (PREGSHELLSTATE prss)
 
static BOOL IntSetShellStateSettings (BOOL bDoubleClick, BOOL bUseCommonTasks)
 
EXTERN_C BOOL SHELL32_ReadRegShellState (PREGSHELLSTATE prss)
 
static BOOL IntSetUnderlineState (BOOL bIconUnderline)
 
static BOOL IntGetUnderlineState (VOID)
 
static HRESULT IntSetNewWindowMode (BOOL bNewWindowMode)
 
static BOOL IntGetNewWindowMode (VOID)
 
static VOID GeneralDlg_UpdateIcons (HWND hDlg, UINT nCtrlID, PGENERAL_DIALOG pGeneral)
 
static void GeneralDlg_StoreToUI (HWND hwndDlg, BOOL bDoubleClick, BOOL bUseCommonTasks, BOOL bUnderline, BOOL bNewWindowMode, PGENERAL_DIALOG pGeneral)
 
static BOOL GeneralDlg_OnInitDialog (HWND hwndDlg, PGENERAL_DIALOG pGeneral)
 
static void GeneralDlg_OnRestoreDefaults (HWND hwndDlg, PGENERAL_DIALOG pGeneral)
 
static BOOL GeneralDlg_OnApply (HWND hwndDlg, PGENERAL_DIALOG pGeneral)
 
INT_PTR CALLBACK FolderOptionsGeneralDlg (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
 

Variables

static const LPCWSTR s_pszExplorerKey
 

Typedef Documentation

◆ GENERAL_DIALOG

◆ PGENERAL_DIALOG

Function Documentation

◆ FolderOptionsGeneralDlg()

INT_PTR CALLBACK FolderOptionsGeneralDlg ( HWND  hwndDlg,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 332 of file general.cpp.

337{
338 static GENERAL_DIALOG general;
339
340 switch (uMsg)
341 {
342 case WM_INITDIALOG:
343 general.hTaskIcon = NULL;
344 general.hFolderIcon = NULL;
345 general.hClickIcon = NULL;
346 return GeneralDlg_OnInitDialog(hwndDlg, &general);
347
348 case WM_COMMAND:
349 switch (LOWORD(wParam))
350 {
359 if (HIWORD(wParam) == BN_CLICKED)
360 {
361 GeneralDlg_UpdateIcons(hwndDlg, LOWORD(wParam), &general);
362
363 // Enable the 'Apply' button
364 PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
365 }
366 break;
368 if (HIWORD(wParam) == BN_CLICKED)
369 {
370 GeneralDlg_OnRestoreDefaults(hwndDlg, &general);
371
372 // Enable the 'Apply' button
373 PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
374 }
375 break;
376 }
377 break;
378
379 case WM_NOTIFY:
380 {
381 LPNMHDR pnmh = (LPNMHDR)lParam;
382
383 switch (pnmh->code)
384 {
385 case PSN_SETACTIVE:
386 break;
387
388 case PSN_APPLY:
389 return GeneralDlg_OnApply(hwndDlg, &general);
390 }
391 break;
392 }
393
394 case WM_DESTROY:
395 DestroyIcon(general.hTaskIcon);
396 DestroyIcon(general.hFolderIcon);
397 DestroyIcon(general.hClickIcon);
398 break;
399
400 default:
401 return FALSE;
402 }
403 return FALSE;
404}
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117
static BOOL GeneralDlg_OnInitDialog(HWND hwndDlg, PGENERAL_DIALOG pGeneral)
Definition: general.cpp:287
static VOID GeneralDlg_UpdateIcons(HWND hDlg, UINT nCtrlID, PGENERAL_DIALOG pGeneral)
Definition: general.cpp:161
static void GeneralDlg_OnRestoreDefaults(HWND hwndDlg, PGENERAL_DIALOG pGeneral)
Definition: general.cpp:303
static BOOL GeneralDlg_OnApply(HWND hwndDlg, PGENERAL_DIALOG pGeneral)
Definition: general.cpp:316
#define LOWORD(l)
Definition: pedump.c:82
#define PropSheet_Changed(d, w)
Definition: prsht.h:344
#define PSN_APPLY
Definition: prsht.h:117
#define PSN_SETACTIVE
Definition: prsht.h:115
#define WM_NOTIFY
Definition: richedit.h:61
#define IDC_FOLDER_OPTIONS_CLASSICFOLDERS
Definition: shresdef.h:443
#define IDC_FOLDER_OPTIONS_ULBROWSER
Definition: shresdef.h:448
#define IDC_FOLDER_OPTIONS_SINGLECLICK
Definition: shresdef.h:446
#define IDC_FOLDER_OPTIONS_COMMONTASKS
Definition: shresdef.h:442
#define IDC_FOLDER_OPTIONS_SAMEWINDOW
Definition: shresdef.h:444
#define IDC_FOLDER_OPTIONS_DOUBLECLICK
Definition: shresdef.h:447
#define IDC_FOLDER_OPTIONS_ULPOINT
Definition: shresdef.h:449
#define IDC_FOLDER_OPTIONS_RESTORE
Definition: shresdef.h:450
#define IDC_FOLDER_OPTIONS_OWNWINDOW
Definition: shresdef.h:445
HICON hFolderIcon
Definition: general.cpp:156
HICON hClickIcon
Definition: general.cpp:157
HICON hTaskIcon
Definition: general.cpp:155
UINT code
Definition: winuser.h:3170
#define HIWORD(l)
Definition: typedefs.h:247
#define WM_COMMAND
Definition: winuser.h:1751
#define WM_INITDIALOG
Definition: winuser.h:1750
struct tagNMHDR * LPNMHDR
HWND WINAPI GetParent(_In_ HWND)
#define BN_CLICKED
Definition: winuser.h:1936
#define WM_DESTROY
Definition: winuser.h:1620
BOOL WINAPI DestroyIcon(_In_ HICON)
Definition: cursoricon.c:2390

Referenced by CFolderOptions::AddPages(), and ShowFolderOptionsDialogThreadProc().

◆ GeneralDlg_OnApply()

static BOOL GeneralDlg_OnApply ( HWND  hwndDlg,
PGENERAL_DIALOG  pGeneral 
)
static

Definition at line 316 of file general.cpp.

317{
319 BOOL bUseCommonTasks = (IsDlgButtonChecked(hwndDlg, IDC_FOLDER_OPTIONS_COMMONTASKS) == BST_CHECKED);
321 BOOL bNewWindowMode = !(IsDlgButtonChecked(hwndDlg, IDC_FOLDER_OPTIONS_SAMEWINDOW) == BST_CHECKED);
322
323 IntSetUnderlineState(bUnderline);
324 BOOL updateCabinets = IntSetNewWindowMode(bNewWindowMode) == S_OK;
325 IntSetShellStateSettings(bDoubleClick, bUseCommonTasks);
326 if (updateCabinets)
328 return TRUE;
329}
#define TRUE
Definition: types.h:120
unsigned int BOOL
Definition: ntddk_ex.h:94
static BOOL IntSetShellStateSettings(BOOL bDoubleClick, BOOL bUseCommonTasks)
Definition: general.cpp:68
static BOOL IntSetUnderlineState(BOOL bIconUnderline)
Definition: general.cpp:102
static HRESULT IntSetNewWindowMode(BOOL bNewWindowMode)
Definition: general.cpp:130
#define S_OK
Definition: intsafe.h:52
#define CWM_STATECHANGE
Definition: undocshell.h:241
void PostCabinetMessage(UINT Msg, WPARAM wParam, LPARAM lParam)
Definition: view.cpp:880
UINT WINAPI IsDlgButtonChecked(_In_ HWND, _In_ int)
#define BST_CHECKED
Definition: winuser.h:197

Referenced by FolderOptionsGeneralDlg().

◆ GeneralDlg_OnInitDialog()

static BOOL GeneralDlg_OnInitDialog ( HWND  hwndDlg,
PGENERAL_DIALOG  pGeneral 
)
static

Definition at line 287 of file general.cpp.

288{
291 BOOL bDoubleClick = !!ss.fDoubleClickInWebView;
292 BOOL bUseCommonTasks = !!ss.fWebView;
293 BOOL bUnderline = IntGetUnderlineState();
294 BOOL bNewWindowMode = IntGetNewWindowMode();
295
296 GeneralDlg_StoreToUI(hwndDlg, bDoubleClick, bUseCommonTasks, bUnderline, bNewWindowMode, pGeneral);
297 GeneralDlg_UpdateIcons(hwndDlg, 0, pGeneral);
298
299 return TRUE;
300}
static BOOL IntGetNewWindowMode(VOID)
Definition: general.cpp:141
static BOOL IntGetUnderlineState(VOID)
Definition: general.cpp:115
static void GeneralDlg_StoreToUI(HWND hwndDlg, BOOL bDoubleClick, BOOL bUseCommonTasks, BOOL bUnderline, BOOL bNewWindowMode, PGENERAL_DIALOG pGeneral)
Definition: general.cpp:249
#define ss
Definition: i386-dis.c:441
VOID WINAPI SHGetSetSettings(LPSHELLSTATE lpss, DWORD dwMask, BOOL bSet)
Definition: shellord.c:225
#define SSF_DOUBLECLICKINWEBVIEW
Definition: shlobj.h:1618
#define SSF_WEBVIEW
Definition: shlobj.h:1628

Referenced by FolderOptionsGeneralDlg().

◆ GeneralDlg_OnRestoreDefaults()

static void GeneralDlg_OnRestoreDefaults ( HWND  hwndDlg,
PGENERAL_DIALOG  pGeneral 
)
static

Definition at line 303 of file general.cpp.

304{
305 // default values
306 BOOL bDoubleClick = TRUE;
307 BOOL bUseCommonTasks = TRUE;
308 BOOL bUnderline = FALSE;
309 BOOL bNewWindowMode = (_WIN32_WINNT < _WIN32_WINNT_WIN2K);
310
311 GeneralDlg_StoreToUI(hwndDlg, bDoubleClick, bUseCommonTasks, bUnderline, bNewWindowMode, pGeneral);
312 GeneralDlg_UpdateIcons(hwndDlg, 0, pGeneral);
313}
#define _WIN32_WINNT
Definition: precomp.h:14
#define _WIN32_WINNT_WIN2K
Definition: sdkddkver.h:21

Referenced by FolderOptionsGeneralDlg().

◆ GeneralDlg_StoreToUI()

static void GeneralDlg_StoreToUI ( HWND  hwndDlg,
BOOL  bDoubleClick,
BOOL  bUseCommonTasks,
BOOL  bUnderline,
BOOL  bNewWindowMode,
PGENERAL_DIALOG  pGeneral 
)
static

Definition at line 249 of file general.cpp.

251{
252 EnableWindow(GetDlgItem(hwndDlg, IDC_FOLDER_OPTIONS_COMMONTASKS), bUseCommonTasks); // FIXME: ROS DefView does not support WebView nor the tasks pane
253
254 if (bUseCommonTasks)
256 else
258
259 if (bDoubleClick)
261 else
263
264 if (bNewWindowMode)
266 else
268
269 if (!bDoubleClick)
270 {
273 if (bUnderline)
275 else
277 }
278 else
279 {
283 }
284}
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
BOOL WINAPI CheckRadioButton(_In_ HWND, _In_ int, _In_ int, _In_ int)

Referenced by GeneralDlg_OnInitDialog(), and GeneralDlg_OnRestoreDefaults().

◆ GeneralDlg_UpdateIcons()

static VOID GeneralDlg_UpdateIcons ( HWND  hDlg,
UINT  nCtrlID,
PGENERAL_DIALOG  pGeneral 
)
static

Definition at line 161 of file general.cpp.

162{
163 HICON hTaskIcon = NULL, hFolderIcon = NULL, hClickIcon = NULL;
164 LPTSTR lpTaskIconName = NULL, lpFolderIconName = NULL, lpClickIconName = NULL;
165
166 // Show task setting icon.
171
172 if (lpTaskIconName)
173 {
174 hTaskIcon = (HICON)LoadImage(shell32_hInstance, lpTaskIconName,
176 if (hTaskIcon)
177 {
178 HWND hwndTaskIcon = GetDlgItem(hDlg, IDC_FOLDER_OPTIONS_TASKICON);
179 SendMessage(hwndTaskIcon, STM_SETIMAGE, IMAGE_ICON, (LPARAM)hTaskIcon);
180 }
181 }
182
183 // Show Folder setting icons
188
189 if (lpFolderIconName)
190 {
191 hFolderIcon = (HICON)LoadImage(shell32_hInstance, lpFolderIconName,
193 if (hFolderIcon)
194 {
195 HWND hwndFolderIcon = GetDlgItem(hDlg, IDC_FOLDER_OPTIONS_FOLDERICON);
196 SendMessage(hwndFolderIcon, STM_SETIMAGE, IMAGE_ICON, (LPARAM)hFolderIcon);
197 }
198 }
199
200 // Show click setting icon
205
206 if (lpClickIconName)
207 {
208 hClickIcon = (HICON)LoadImage(shell32_hInstance, lpClickIconName,
210 if (hClickIcon)
211 {
212 HWND hwndClickIcon = GetDlgItem(hDlg, IDC_FOLDER_OPTIONS_CLICKICON);
213 SendMessage(hwndClickIcon, STM_SETIMAGE, IMAGE_ICON, (LPARAM)hClickIcon);
214 }
215 }
216
217 // Replace icons
218 if (hTaskIcon)
219 {
220 DestroyIcon(pGeneral->hTaskIcon);
221 pGeneral->hTaskIcon = hTaskIcon;
222 }
223 if (hFolderIcon)
224 {
225 DestroyIcon(pGeneral->hFolderIcon);
226 pGeneral->hFolderIcon = hFolderIcon;
227 }
228 if (hClickIcon)
229 {
230 DestroyIcon(pGeneral->hClickIcon);
231 pGeneral->hClickIcon = hClickIcon;
232 }
233
234 if (nCtrlID == IDC_FOLDER_OPTIONS_SINGLECLICK)
235 {
238 }
239
240 if (nCtrlID == IDC_FOLDER_OPTIONS_DOUBLECLICK)
241 {
245 }
246}
#define shell32_hInstance
static HICON
Definition: imagelist.c:80
#define MAKEINTRESOURCE(i)
Definition: ntverrsrc.c:25
#define IDI_SHELL_OPEN_IN_SOME_WINDOW
Definition: shresdef.h:678
#define IDC_FOLDER_OPTIONS_FOLDERICON
Definition: shresdef.h:440
#define IDI_SHELL_OPEN_IN_NEW_WINDOW
Definition: shresdef.h:679
#define IDI_SHELL_CLASSIC_FOLDERS
Definition: shresdef.h:677
#define IDI_SHELL_SINGLE_CLICK_TO_OPEN
Definition: shresdef.h:680
#define IDC_FOLDER_OPTIONS_CLICKICON
Definition: shresdef.h:441
#define IDI_SHELL_DOUBLE_CLICK_TO_OPEN
Definition: shresdef.h:681
#define IDC_FOLDER_OPTIONS_TASKICON
Definition: shresdef.h:439
#define IDI_SHELL_SHOW_COMMON_TASKS
Definition: shresdef.h:676
LONG_PTR LPARAM
Definition: windef.h:208
#define IMAGE_ICON
Definition: winuser.h:212
#define STM_SETIMAGE
Definition: winuser.h:2104
#define SendMessage
Definition: winuser.h:5863
#define LoadImage
Definition: winuser.h:5835
#define LR_DEFAULTCOLOR
Definition: winuser.h:1098
CHAR * LPTSTR
Definition: xmlstorage.h:192

Referenced by FolderOptionsGeneralDlg(), GeneralDlg_OnInitDialog(), and GeneralDlg_OnRestoreDefaults().

◆ IntGetNewWindowMode()

static BOOL IntGetNewWindowMode ( VOID  )
static

Definition at line 141 of file general.cpp.

142{
144 if (!ReadCabinetState(&cs, sizeof(cs)))
145 return FALSE;
146
147 return !!cs.fNewWindowMode;
148}
#define cs
Definition: i386-dis.c:442
BOOL WINAPI ReadCabinetState(CABINETSTATE *cs, int length)
Definition: shellord.c:1807

Referenced by GeneralDlg_OnInitDialog().

◆ IntGetUnderlineState()

static BOOL IntGetUnderlineState ( VOID  )
static

Definition at line 115 of file general.cpp.

116{
117 DWORD dwValue, dwDefault = 2, dwSize = sizeof(DWORD);
118 SHRegGetUSValue(s_pszExplorerKey, L"IconUnderline", NULL, &dwValue, &dwSize, FALSE, &dwDefault, sizeof(DWORD));
119 return dwValue == 3;
120}
unsigned long DWORD
Definition: ntddk_ex.h:95
static const LPCWSTR s_pszExplorerKey
Definition: general.cpp:26
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
#define DWORD
Definition: nt_native.h:44
#define L(x)
Definition: ntvdm.h:50
#define SHRegGetUSValue
Definition: shlwapi.h:543

Referenced by GeneralDlg_OnInitDialog().

◆ IntSetNewWindowMode()

static HRESULT IntSetNewWindowMode ( BOOL  bNewWindowMode)
static

Definition at line 130 of file general.cpp.

131{
133 if (!ReadCabinetState(&cs, sizeof(cs)))
134 return E_FAIL;
135
136 BOOL changed = !!cs.fNewWindowMode != !!bNewWindowMode;
137 cs.fNewWindowMode = !!bNewWindowMode;
138 return WriteCabinetState(&cs) ? (changed ? S_OK : S_FALSE) : E_FAIL;
139}
#define E_FAIL
Definition: ddrawi.h:102
BOOL WINAPI WriteCabinetState(CABINETSTATE *cs)
Definition: shellord.c:1859
#define S_FALSE
Definition: winerror.h:2357

Referenced by GeneralDlg_OnApply().

◆ IntSetShellStateSettings()

static BOOL IntSetShellStateSettings ( BOOL  bDoubleClick,
BOOL  bUseCommonTasks 
)
static

Definition at line 68 of file general.cpp.

69{
70 SHELLSTATE shellstate;
71 shellstate.fDoubleClickInWebView = !!bDoubleClick;
72 shellstate.fWebView = !!bUseCommonTasks;
74
75 // FIXME: This is not correct, it does nothing. SHGetSetSettings will broadcast it.
76 SHSettingsChanged(0, L"ShellState");
77 return TRUE;
78}
BOOL WINAPI SHSettingsChanged(LPCVOID unused, LPCWSTR pszKey)
Definition: shpolicy.c:197
BOOL fWebView
Definition: shlobj.h:1563
BOOL fDoubleClickInWebView
Definition: shlobj.h:1555

Referenced by GeneralDlg_OnApply().

◆ IntSetUnderlineState()

static BOOL IntSetUnderlineState ( BOOL  bIconUnderline)
static

Definition at line 102 of file general.cpp.

103{
105 DWORD dwValue = (bIconUnderline ? 3 : 2), dwSize = sizeof(DWORD);
108 if (Status != ERROR_SUCCESS)
109 return FALSE;
110
111 SHSendMessageBroadcastW(WM_SETTINGCHANGE, 0, (LPARAM)L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\IconUnderline");
112 return TRUE;
113}
#define ERROR_SUCCESS
Definition: deptool.c:10
static LSTATUS(WINAPI *pRegDeleteTreeW)(HKEY
DWORD WINAPI SHSendMessageBroadcastW(UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: ordinal.c:4072
Status
Definition: gdiplustypes.h:25
#define REG_NONE
Definition: nt_native.h:1492
#define SHRegSetUSValue
Definition: shlwapi.h:565
#define SHREGSET_HKLM
Definition: shlwapi.h:322
#define SHREGSET_FORCE_HKCU
Definition: shlwapi.h:321
#define WM_SETTINGCHANGE
Definition: winuser.h:1640

Referenced by GeneralDlg_OnApply().

◆ SHELL32_GetDefaultShellState()

EXTERN_C void SHELL32_GetDefaultShellState ( LPSHELLSTATE  pss)

Definition at line 33 of file general.cpp.

34{
35 ZeroMemory(pss, sizeof(*pss));
36 pss->fShowAllObjects = TRUE;
37 pss->fShowExtensions = TRUE;
38 pss->fShowCompColor = TRUE;
40 pss->fShowAttribCol = TRUE; // ROS defaults to Details view with this column on
41 pss->fShowInfoTip = TRUE;
44 pss->iSortDirection = 1;
46 pss->fSepProcess = FALSE;
47 pss->fStartPanelOn = FALSE; // Note: This should be changed to TRUE when the modern start menu is implemented
48}
#define SHFSF_COL_NAME
Definition: shfldr.h:44
BOOL fShowSuperHidden
Definition: shlobj.h:1565
BOOL fShowExtensions
Definition: shlobj.h:1550
LONG lParamSort
Definition: shlobj.h:1571
BOOL fShowAttribCol
Definition: shlobj.h:1559
BOOL fShowCompColor
Definition: shlobj.h:1554
BOOL fShowInfoTip
Definition: shlobj.h:1561
UINT version
Definition: shlobj.h:1573
BOOL fSepProcess
Definition: shlobj.h:1575
int iSortDirection
Definition: shlobj.h:1572
BOOL fShowAllObjects
Definition: shlobj.h:1549
BOOL fStartPanelOn
Definition: shlobj.h:1576
#define REGSHELLSTATE_VERSION
Definition: undocshell.h:582
#define ZeroMemory
Definition: winbase.h:1743

Referenced by SHGetSetSettings().

◆ SHELL32_ReadRegShellState()

EXTERN_C BOOL SHELL32_ReadRegShellState ( PREGSHELLSTATE  prss)

Definition at line 86 of file general.cpp.

87{
88 DWORD dwSize = sizeof(REGSHELLSTATE);
90 L"ShellState", NULL, prss, &dwSize);
91 return err == ERROR_SUCCESS && prss->dwSize >= REGSHELLSTATE_SIZE;
92}
DWORD WINAPI SHGetValueW(HKEY hKey, LPCWSTR lpszSubKey, LPCWSTR lpszValue, LPDWORD pwType, LPVOID pvData, LPDWORD pcbData)
Definition: reg.c:1236
#define err(...)
#define REGSHELLSTATE_SIZE
Definition: undocshell.h:581
#define HKEY_CURRENT_USER
Definition: winreg.h:11

Referenced by SHGetSetSettings().

◆ SHELL32_WriteRegShellState()

EXTERN_C LSTATUS SHELL32_WriteRegShellState ( PREGSHELLSTATE  prss)

Definition at line 51 of file general.cpp.

52{
56 REG_BINARY, prss, prss->dwSize);
57}
DWORD WINAPI SHSetValueW(HKEY hKey, LPCWSTR lpszSubKey, LPCWSTR lpszValue, DWORD dwType, LPCVOID pvData, DWORD cbData)
Definition: reg.c:1306
#define REG_BINARY
Definition: nt_native.h:1496
SHELLSTATE ss
Definition: ShellState.cpp:22

Referenced by SHGetSetSettings().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( fprop  )

Variable Documentation

◆ s_pszExplorerKey

const LPCWSTR s_pszExplorerKey
static
Initial value:
=
L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer"

Definition at line 26 of file general.cpp.

Referenced by IntGetUnderlineState(), IntSetUnderlineState(), SHELL32_ReadRegShellState(), and SHELL32_WriteRegShellState().