Author: ekohl Date: Fri Dec 26 13:11:57 2014 New Revision: 65836
URL: http://svn.reactos.org/svn/reactos?rev=65836&view=rev Log: [SYSDM] Fix startup and recovery option dialog issues. Patch by Ricardo Hanke. Thanks a lot! CORE-8952 #resolve
Modified: trunk/reactos/dll/cpl/sysdm/startrec.c
Modified: trunk/reactos/dll/cpl/sysdm/startrec.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/sysdm/startrec.c?re... ============================================================================== --- trunk/reactos/dll/cpl/sysdm/startrec.c [iso-8859-1] (original) +++ trunk/reactos/dll/cpl/sysdm/startrec.c [iso-8859-1] Fri Dec 26 13:11:57 2014 @@ -22,6 +22,7 @@ INT iFreeLdrIni; } STARTINFO, *PSTARTINFO;
+BOOL SaveRecoveryOptions;
static VOID SetTimeout(HWND hwndDlg, INT Timeout) @@ -544,13 +545,21 @@ HKEY hKey; DWORD lResult;
- if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, - L"System\CurrentControlSet\Control\CrashControl", - 0, - KEY_WRITE, - &hKey) != ERROR_SUCCESS) - { - /* Failed to open key */ + lResult = (DWORD)RegCreateKeyExW(HKEY_LOCAL_MACHINE, + L"System\CurrentControlSet\Control\CrashControl", + 0, + NULL, + REG_OPTION_NON_VOLATILE, + KEY_WRITE, + NULL, + &hKey, + NULL); + if (lResult != ERROR_SUCCESS) + { + /* Failed to open key */ + SetLastError(lResult); + ShowLastWin32Error(hwndDlg); + return; }
@@ -587,15 +596,31 @@ { HKEY hKey; WCHAR szName[MAX_PATH]; - DWORD dwValue, dwValueLength, dwType; - - if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, - L"System\CurrentControlSet\Control\CrashControl", - 0, - KEY_READ, - &hKey) != ERROR_SUCCESS) + DWORD dwValue, dwValueLength, dwType, dwResult; + + dwResult = (DWORD)RegCreateKeyExW(HKEY_LOCAL_MACHINE, + L"System\CurrentControlSet\Control\CrashControl", + 0, + NULL, + REG_OPTION_NON_VOLATILE, + KEY_READ, + NULL, + &hKey, + NULL); + if (dwResult != ERROR_SUCCESS) { /* Failed to open key */ + SetLastError(dwResult); + ShowLastWin32Error(hwndDlg); + + EnableWindow(GetDlgItem(hwndDlg, IDC_STRRECWRITEEVENT), FALSE); + EnableWindow(GetDlgItem(hwndDlg, IDC_STRRECSENDALERT), FALSE); + EnableWindow(GetDlgItem(hwndDlg, IDC_STRRECRESTART), FALSE); + EnableWindow(GetDlgItem(hwndDlg, IDC_STRRECDEBUGCOMBO), FALSE); + EnableWindow(GetDlgItem(hwndDlg, IDC_STRRECDUMPFILE), FALSE); + EnableWindow(GetDlgItem(hwndDlg, IDC_STRRECOVERWRITE), FALSE); + + SaveRecoveryOptions = FALSE; return; }
@@ -633,7 +658,7 @@ SendDlgItemMessageW(hwndDlg, IDC_STRRECDEBUGCOMBO, CB_ADDSTRING, (WPARAM)0, (LPARAM) szName); }
- if (LoadString(hApplet, IDS_FULL_DUMP, szName, sizeof(szName) / sizeof(WCHAR))) + if (LoadStringW(hApplet, IDS_FULL_DUMP, szName, sizeof(szName) / sizeof(WCHAR))) { szName[(sizeof(szName)/sizeof(WCHAR))-1] = L'\0'; SendDlgItemMessageW(hwndDlg, IDC_STRRECDEBUGCOMBO, CB_ADDSTRING, (WPARAM)0, (LPARAM) szName); @@ -653,6 +678,8 @@
SetCrashDlgItems(hwndDlg, pStartInfo); RegCloseKey(hKey); + + SaveRecoveryOptions = TRUE; }
@@ -748,7 +775,11 @@ } }
- WriteStartupRecoveryOptions(hwndDlg, pStartInfo); + if (SaveRecoveryOptions) + { + WriteStartupRecoveryOptions(hwndDlg, pStartInfo); + } + EndDialog(hwndDlg, LOWORD(wParam)); return TRUE;