From 65435e1b84f223df234ac16b3431460a5d2ef7cb Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Thu, 3 Jun 2010 13:17:33 +0000 Subject: [PATCH] [SYSDM] - Check the custom paging file sizes for being within useful limits and display warnings if these limit were exceeded. - Translators: Please translate the message strings! svn path=/trunk/; revision=47534 --- reactos/dll/cpl/sysdm/lang/de-DE.rc | 4 +- reactos/dll/cpl/sysdm/lang/en-US.rc | 2 + reactos/dll/cpl/sysdm/precomp.h | 5 +- reactos/dll/cpl/sysdm/resource.h | 2 + reactos/dll/cpl/sysdm/virtmem.c | 102 ++++++++++++++++++++-------- 5 files changed, 83 insertions(+), 32 deletions(-) diff --git a/reactos/dll/cpl/sysdm/lang/de-DE.rc b/reactos/dll/cpl/sysdm/lang/de-DE.rc index 52393863607..eec7d1eff51 100644 --- a/reactos/dll/cpl/sysdm/lang/de-DE.rc +++ b/reactos/dll/cpl/sysdm/lang/de-DE.rc @@ -202,7 +202,7 @@ BEGIN LTEXT "", IDC_SPACEAVAIL, 105, 92, 104, 9 LTEXT "&Anfangsgröße (MB):", -1, 22, 118, 70, 9 LTEXT "Ma&ximale Größe (MB):", -1, 22, 131, 75, 9 - AUTORADIOBUTTON "&Benutzerdefinierte Größe", IDC_CUSTOM, 20, 105, 90, 9, WS_GROUP + AUTORADIOBUTTON "&Benutzerdefinierte Größe", IDC_CUSTOM, 20, 105, 95, 9, WS_GROUP AUTORADIOBUTTON "Größe wird vom &System verwaltet", IDC_SYSMANSIZE, 20, 145, 120, 9 AUTORADIOBUTTON "&Keine Auslagerungsdatei", IDC_NOPAGEFILE, 20, 158, 90, 9 EDITTEXT IDC_INITIALSIZE, 100, 114, 44, 13, NOT WS_BORDER, WS_EX_CLIENTEDGE @@ -292,5 +292,7 @@ BEGIN IDS_MESSAGEBOXTITLE "Systemsteuerungsoption ""System""" IDS_WARNINITIALSIZE "Geben Sie einen numerischen Wert für die Anfangsgröße der Auslagerungsdatei an." IDS_WARNMAXIMUMSIZE "Geben Sie einen numerischen Wert für die Maximalgröße der Auslagerungsdatei an." + IDS_WARNINITIALRANGE "Die Anfangsgröße der Auslagerungsdatei darf nicht kleiner als 2 MB sein und darf den verfügbaren Speicherplatz auf dem gewählten Laufwerk nicht überschreiten." + IDS_WARNMAXIMUMRANGE "Die Maximalgröße der Auslagerungsdatei darf nicht kleiner als die Anfangsgröße sein und darf den verfügbaren Speicherplatz auf dem gewählten Laufwerk nicht überschreiten." IDS_DEVS "\nReactOS Team\n\nProjektkoordinator\n\nAleksey Bragin\n\nEntwicklerteam\n\nAleksey Bragin\nAndrew Greenwood\nAndrey Korotaev\nArt Yerkes\nChristoph von Wittich\nColin Finck\nDaniel Reimer\nDmitry Chapyshev\nEric Kohl\nGed Murphy\nGregor Brunmar\nHervé Poussineau\nJames Tabor\nJeffrey Morlan\nJohannes Anderwald\nKJK::Hyperion\nMaarten Bosma\nMagnus Olsen\nMarc Piulachs\nMatthias Kupfer\nMike Nordell\nPeter Ward\nPierre Schweitzer\nSaveliy Tretiakov\nStefan Ginsberg\nSylvain Petreolle\nThomas Blümel\nTimo Kreuzer \n\nAlex Ionescu\nFilip Navara\nGunnar Dalsnes\nMartin Fuchs\nRoyce Mitchell III\nBrandon Turner\nBrian Palmer\nCasper Hornstrup\nDavid Welch\nEmanuele Aliberti\nGé van Geldorp\nGregor Anich\nJason Filby\nJens Collin\nMichael Wirth\nNathan Woods\nRobert Dickenson\nRex Jolliff\nVizzini \n\nRelease Verantwortliche\n\nColin Finck\nZ98\n\nWebseitenteam\n\nColin Finck\nJaix Bly\nKlemens Friedl\nZ98\n\nMedienteam\n\nMindflyer\nWierd_W\n\nweiterer Dank geht an\n\nalle Mitwirkenden\nWine Team\n\n" END diff --git a/reactos/dll/cpl/sysdm/lang/en-US.rc b/reactos/dll/cpl/sysdm/lang/en-US.rc index d0f971c0bd9..c1d7fa93eeb 100644 --- a/reactos/dll/cpl/sysdm/lang/en-US.rc +++ b/reactos/dll/cpl/sysdm/lang/en-US.rc @@ -287,5 +287,7 @@ BEGIN IDS_MESSAGEBOXTITLE "System control panel applet" IDS_WARNINITIALSIZE "Enter a numeric value for the initial size of the paging file." IDS_WARNMAXIMUMSIZE "Enter a numeric value for the maximum size of the paging file." + IDS_WARNINITIALRANGE "The initial size of the paging file must not be smaller than 2 MB and must not exceed the available space on the selected drive." + IDS_WARNMAXIMUMRANGE "The maximum size of the paging file must not be smaller than its initial size and must not exceed the available space on the selected drive." IDS_DEVS "\nReactOS Team\n\nProject Coordinator\n\nAleksey Bragin\n\nDevelopment Team\n\nAleksey Bragin\nAndrew Greenwood\nAndrey Korotaev\nArt Yerkes\nChristoph von Wittich\nColin Finck\nDaniel Reimer\nDmitry Chapyshev\nEric Kohl\nGed Murphy\nGregor Brunmar\nHervé Poussineau\nJames Tabor\nJeffrey Morlan\nJohannes Anderwald\nKJK::Hyperion\nMaarten Bosma\nMagnus Olsen\nMarc Piulachs\nMatthias Kupfer\nMike Nordell\nPeter Ward\nPierre Schweitzer\nSaveliy Tretiakov\nStefan Ginsberg\nSylvain Petreolle\nThomas Blümel\nTimo Kreuzer \n\nAlex Ionescu\nFilip Navara\nGunnar Dalsnes\nMartin Fuchs\nRoyce Mitchell III\nBrandon Turner\nBrian Palmer\nCasper Hornstrup\nDavid Welch\nEmanuele Aliberti\nGé van Geldorp\nGregor Anich\nJason Filby\nJens Collin\nMichael Wirth\nNathan Woods\nRobert Dickenson\nRex Jolliff\nVizzini \n\nRelease Engineers\n\nColin Finck\nZ98\n\nWebsite Team\n\nColin Finck\nJaix Bly\nKlemens Friedl\nZ98\n\nMedia Team\n\nMindflyer\nWierd_W\n\nfurther thanks go to\n\nall Contributers\nWine Team\n\n" END diff --git a/reactos/dll/cpl/sysdm/precomp.h b/reactos/dll/cpl/sysdm/precomp.h index 3ef2ee0d259..cf3afd6f62a 100644 --- a/reactos/dll/cpl/sysdm/precomp.h +++ b/reactos/dll/cpl/sysdm/precomp.h @@ -50,8 +50,9 @@ INT_PTR CALLBACK LicenceDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM l typedef struct _PAGEFILE { TCHAR szDrive[3]; - INT InitialValue; - INT MaxValue; + INT InitialSize; + INT MaximumSize; + INT FreeSize; BOOL bUsed; } PAGEFILE, *PPAGEFILE; diff --git a/reactos/dll/cpl/sysdm/resource.h b/reactos/dll/cpl/sysdm/resource.h index 10cd614b2ba..885aae6c003 100644 --- a/reactos/dll/cpl/sysdm/resource.h +++ b/reactos/dll/cpl/sysdm/resource.h @@ -35,6 +35,8 @@ #define IDS_MESSAGEBOXTITLE 77 #define IDS_WARNINITIALSIZE 78 #define IDS_WARNMAXIMUMSIZE 79 +#define IDS_WARNINITIALRANGE 80 +#define IDS_WARNMAXIMUMRANGE 81 /* propsheet - general */ #define IDD_PROPPAGEGENERAL 100 diff --git a/reactos/dll/cpl/sysdm/virtmem.c b/reactos/dll/cpl/sysdm/virtmem.c index 5dc572c0138..c09b6e40dcf 100644 --- a/reactos/dll/cpl/sysdm/virtmem.c +++ b/reactos/dll/cpl/sysdm/virtmem.c @@ -110,7 +110,7 @@ ParseMemSettings(PVIRTMEM pVirtMem) TCHAR szVolume[MAX_PATH]; TCHAR *szDisplayString; INT InitialSize = 0; - INT MaxSize = 0; + INT MaximumSize = 0; INT DriveLen; INT PgCnt = 0; @@ -141,17 +141,17 @@ ParseMemSettings(PVIRTMEM pVirtMem) /* FIXME: we only check the first available pagefile in the reg */ GetPageFileSizes(pVirtMem->szPagingFiles, &InitialSize, - &MaxSize); + &MaximumSize); - pVirtMem->Pagefile[PgCnt].InitialValue = InitialSize; - pVirtMem->Pagefile[PgCnt].MaxValue = MaxSize; + pVirtMem->Pagefile[PgCnt].InitialSize = InitialSize; + pVirtMem->Pagefile[PgCnt].MaximumSize = MaximumSize; pVirtMem->Pagefile[PgCnt].bUsed = TRUE; lstrcpy(pVirtMem->Pagefile[PgCnt].szDrive, szDrive); } else { - pVirtMem->Pagefile[PgCnt].InitialValue = 0; - pVirtMem->Pagefile[PgCnt].MaxValue = 0; + pVirtMem->Pagefile[PgCnt].InitialSize = 0; + pVirtMem->Pagefile[PgCnt].MaximumSize = 0; pVirtMem->Pagefile[PgCnt].bUsed = FALSE; lstrcpy(pVirtMem->Pagefile[PgCnt].szDrive, szDrive); } @@ -177,11 +177,11 @@ ParseMemSettings(PVIRTMEM pVirtMem) } } - if ((InitialSize != 0) || (MaxSize != 0)) + if ((InitialSize != 0) || (MaximumSize != 0)) { TCHAR szSize[64]; - _stprintf(szSize, _T("%i - %i"), InitialSize, MaxSize); + _stprintf(szSize, _T("%i - %i"), InitialSize, MaximumSize); _tcscat(szDisplayString, _T("\t")); _tcscat(szDisplayString, szSize); } @@ -216,8 +216,8 @@ WritePageFileSettings(PVIRTMEM pVirtMem) { _stprintf(szText, _T("%s\\pagefile.sys %i %i"), pVirtMem->Pagefile[i].szDrive, - pVirtMem->Pagefile[i].InitialValue, - pVirtMem->Pagefile[i].MaxValue); + pVirtMem->Pagefile[i].InitialSize, + pVirtMem->Pagefile[i].MaximumSize); /* Add it to our overall registry string */ lstrcpy(szPagingFiles + nPos, szText); @@ -299,8 +299,8 @@ static VOID OnSet(PVIRTMEM pVirtMem) { INT Index; - UINT InitValue; - UINT MaxValue; + UINT InitialSize; + UINT MaximumSize; BOOL bTranslated; TCHAR szTitle[64]; TCHAR szMessage[256]; @@ -318,10 +318,10 @@ OnSet(PVIRTMEM pVirtMem) if (IsDlgButtonChecked(pVirtMem->hSelf, IDC_CUSTOM) == BST_CHECKED) { - InitValue = GetDlgItemInt(pVirtMem->hSelf, - IDC_INITIALSIZE, - &bTranslated, - FALSE); + InitialSize = GetDlgItemInt(pVirtMem->hSelf, + IDC_INITIALSIZE, + &bTranslated, + FALSE); if (!bTranslated) { if (LoadString(hApplet, @@ -343,10 +343,10 @@ OnSet(PVIRTMEM pVirtMem) return; } - MaxValue = GetDlgItemInt(pVirtMem->hSelf, - IDC_MAXSIZE, - &bTranslated, - FALSE); + MaximumSize = GetDlgItemInt(pVirtMem->hSelf, + IDC_MAXSIZE, + &bTranslated, + FALSE); if (!bTranslated) { if (LoadString(hApplet, @@ -368,16 +368,59 @@ OnSet(PVIRTMEM pVirtMem) return; } - /* FIXME: Add more file size checks! */ + /* Check the valid range of the inial size */ + if (InitialSize < 2 || + InitialSize > pVirtMem->Pagefile[Index].FreeSize) + { + if (LoadString(hApplet, + IDS_MESSAGEBOXTITLE, + szTitle, + sizeof(szTitle) / sizeof(szTitle[0])) == 0) + _tcscpy(szTitle, _T("System control panel applet")); + + LoadString(hApplet, + IDS_WARNINITIALRANGE, + szMessage, + sizeof(szMessage) / sizeof(szMessage[0])); + + MessageBox(NULL, + szMessage, + szTitle, + MB_ICONWARNING | MB_OK); + return; + } + + /* Check the valid range of the maximum size */ + if (MaximumSize < InitialSize || + MaximumSize > pVirtMem->Pagefile[Index].FreeSize) + { + if (LoadString(hApplet, + IDS_MESSAGEBOXTITLE, + szTitle, + sizeof(szTitle) / sizeof(szTitle[0])) == 0) + _tcscpy(szTitle, _T("System control panel applet")); + + LoadString(hApplet, + IDS_WARNMAXIMUMRANGE, + szMessage, + sizeof(szMessage) / sizeof(szMessage[0])); + + MessageBox(NULL, + szMessage, + szTitle, + MB_ICONWARNING | MB_OK); + return; + } - pVirtMem->Pagefile[Index].InitialValue = InitValue; - pVirtMem->Pagefile[Index].MaxValue = MaxValue; + pVirtMem->Pagefile[Index].InitialSize = InitialSize; + pVirtMem->Pagefile[Index].MaximumSize = MaximumSize; pVirtMem->Pagefile[Index].bUsed = TRUE; } else { /* set sizes to 0 */ - pVirtMem->Pagefile[Index].InitialValue = pVirtMem->Pagefile[Index].MaxValue = 0; + pVirtMem->Pagefile[Index].InitialSize = 0; + pVirtMem->Pagefile[Index].MaximumSize = 0; // check to see if this drive is used for a paging file if (IsDlgButtonChecked(pVirtMem->hSelf, @@ -420,12 +463,13 @@ OnSelChange(HWND hwndDlg, PVIRTMEM pVirtMem) if (GetDiskFreeSpaceEx(pVirtMem->Pagefile[Index].szDrive, NULL, NULL, &FreeBytes)) { + pVirtMem->Pagefile[Index].FreeSize = FreeBytes.QuadPart >> 20; _stprintf(szBuffer, _T("%I64u MB"), FreeBytes.QuadPart / (1024 * 1024)); SetDlgItemText(hwndDlg, IDC_SPACEAVAIL, szBuffer); } - if (pVirtMem->Pagefile[Index].InitialValue != 0 && - pVirtMem->Pagefile[Index].MaxValue != 0) + if (pVirtMem->Pagefile[Index].InitialSize != 0 && + pVirtMem->Pagefile[Index].MaximumSize != 0) { /* enable and fill the custom values */ EnableWindow(GetDlgItem(pVirtMem->hSelf, IDC_MAXSIZE), TRUE); @@ -433,12 +477,12 @@ OnSelChange(HWND hwndDlg, PVIRTMEM pVirtMem) SetDlgItemInt(pVirtMem->hSelf, IDC_INITIALSIZE, - pVirtMem->Pagefile[Index].InitialValue, + pVirtMem->Pagefile[Index].InitialSize, FALSE); SetDlgItemInt(pVirtMem->hSelf, IDC_MAXSIZE, - pVirtMem->Pagefile[Index].MaxValue, + pVirtMem->Pagefile[Index].MaximumSize, FALSE); CheckDlgButton(pVirtMem->hSelf, @@ -482,7 +526,7 @@ OnSelChange(HWND hwndDlg, PVIRTMEM pVirtMem) FileSize = 0; for (i = 0; i < 26; i++) { - FileSize += pVirtMem->Pagefile[i].InitialValue; + FileSize += pVirtMem->Pagefile[i].InitialSize; } _stprintf(szBuffer, _T("%u MB"), FileSize); SetDlgItemText(hwndDlg, IDC_CURRENT, szBuffer); -- 2.17.1