#include "precomp.h"
+static BOOL OnSelChange(HWND hwndDlg, PVIRTMEM pVirtMem);
static LPCTSTR lpKey = _T("SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Memory Management");
static BOOL
ReadPageFileSettings(PVIRTMEM pVirtMem)
{
- HKEY hkey = NULL;
- DWORD dwType;
- DWORD dwDataSize;
- BOOL bRet = FALSE;
-
- if(RegCreateKeyEx(HKEY_LOCAL_MACHINE,
- lpKey,
- 0,
- NULL,
- REG_OPTION_NON_VOLATILE,
- KEY_QUERY_VALUE,
- NULL,
- &hkey,
- NULL) == ERROR_SUCCESS)
- {
- if(RegQueryValueEx(hkey,
- _T("PagingFiles"),
- NULL,
- &dwType,
- NULL,
- &dwDataSize) == ERROR_SUCCESS)
+ HKEY hkey = NULL;
+ DWORD dwType;
+ DWORD dwDataSize;
+ BOOL bRet = FALSE;
+
+ if (RegCreateKeyEx(HKEY_LOCAL_MACHINE,
+ lpKey,
+ 0,
+ NULL,
+ REG_OPTION_NON_VOLATILE,
+ KEY_QUERY_VALUE,
+ NULL,
+ &hkey,
+ NULL) == ERROR_SUCCESS)
+ {
+ if (RegQueryValueEx(hkey,
+ _T("PagingFiles"),
+ NULL,
+ &dwType,
+ NULL,
+ &dwDataSize) == ERROR_SUCCESS)
{
- pVirtMem->szPagingFiles = (LPTSTR)HeapAlloc(GetProcessHeap(),
- 0,
- dwDataSize);
- if (pVirtMem->szPagingFiles != NULL)
- {
- ZeroMemory(pVirtMem->szPagingFiles,
- dwDataSize);
- if(RegQueryValueEx(hkey,
- _T("PagingFiles"),
- NULL,
- &dwType,
- (PBYTE)pVirtMem->szPagingFiles,
- &dwDataSize) == ERROR_SUCCESS)
- {
- bRet = TRUE;
- }
- }
- }
- }
-
- if (!bRet)
- ShowLastWin32Error(pVirtMem->hSelf);
-
- if (hkey != NULL)
- RegCloseKey(hkey);
-
- return bRet;
+ pVirtMem->szPagingFiles = (LPTSTR)HeapAlloc(GetProcessHeap(),
+ 0,
+ dwDataSize);
+ if (pVirtMem->szPagingFiles != NULL)
+ {
+ ZeroMemory(pVirtMem->szPagingFiles,
+ dwDataSize);
+ if (RegQueryValueEx(hkey,
+ _T("PagingFiles"),
+ NULL,
+ &dwType,
+ (PBYTE)pVirtMem->szPagingFiles,
+ &dwDataSize) == ERROR_SUCCESS)
+ {
+ bRet = TRUE;
+ }
+ }
+ }
+ }
+
+ if (!bRet)
+ ShowLastWin32Error(pVirtMem->hSelf);
+
+ if (hkey != NULL)
+ RegCloseKey(hkey);
+
+ return bRet;
}
-static INT
-GetPageFileSizes(LPTSTR lpPageFiles)
+static VOID
+GetPageFileSizes(LPTSTR lpPageFiles,
+ LPINT lpInitialSize,
+ LPINT lpMaximumSize)
{
- while (*lpPageFiles != _T('\0'))
- {
- if (*lpPageFiles == _T(' '))
- {
- lpPageFiles++;
- return (INT)_ttoi(lpPageFiles);
- }
-
- lpPageFiles++;
- }
-
- return -1;
+ INT i = 0;
+
+ *lpInitialSize = -1;
+ *lpMaximumSize = -1;
+
+ while (*lpPageFiles != _T('\0'))
+ {
+ if (*lpPageFiles == _T(' '))
+ {
+ lpPageFiles++;
+
+ switch (i)
+ {
+ case 0:
+ *lpInitialSize = (INT)_ttoi(lpPageFiles);
+ i = 1;
+ break;
+
+ case 1:
+ *lpMaximumSize = (INT)_ttoi(lpPageFiles);
+ return;
+ }
+ }
+
+ lpPageFiles++;
+ }
}
static VOID
ParseMemSettings(PVIRTMEM pVirtMem)
{
- TCHAR szDrives[1024]; // all drives
- LPTSTR DrivePtr = szDrives;
- TCHAR szDrive[MAX_PATH]; // single drive
- TCHAR szVolume[MAX_PATH];
- INT InitialSize = 0;
- INT MaxSize = 0;
- INT DriveLen;
- INT PgCnt = 0;
-
- DriveLen = GetLogicalDriveStrings(1023,
- szDrives);
-
- while (DriveLen != 0)
- {
- LVITEM Item;
- INT Len;
-
- Len = lstrlen(DrivePtr) + 1;
- DriveLen -= Len;
-
- DrivePtr = _tcsupr(DrivePtr);
-
- /* copy the 'X:' portion */
- lstrcpyn(szDrive, DrivePtr, 3);
-
- if(GetDriveType(DrivePtr) == DRIVE_FIXED)
- {
- /* does drive match the one in the registry ? */
- if(!_tcsncmp(pVirtMem->szPagingFiles, szDrive, 2))
- {
- /* FIXME: we only check the first available pagefile in the reg */
- InitialSize = GetPageFileSizes(pVirtMem->szPagingFiles);
- MaxSize = GetPageFileSizes(pVirtMem->szPagingFiles);
-
- pVirtMem->Pagefile[PgCnt].InitialValue = InitialSize;
- pVirtMem->Pagefile[PgCnt].MaxValue = MaxSize;
- 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].bUsed = FALSE;
- lstrcpy(pVirtMem->Pagefile[PgCnt].szDrive, szDrive);
- }
-
- /* fill out the listview */
- ZeroMemory(&Item, sizeof(Item));
- Item.mask = LVIF_TEXT;
- Item.iItem = ListView_GetItemCount(pVirtMem->hListView);
- Item.pszText = szDrive;
- (void)ListView_InsertItem(pVirtMem->hListView, &Item);
-
- /* set a volume label if there is one */
- if (GetVolumeInformation(DrivePtr,
- szVolume,
- 255,
- NULL,
- NULL,
- NULL,
- NULL,
- 0))
- {
- if (szVolume[0] != _T('\0'))
- {
- TCHAR szVol[MAX_PATH + 2];
-
- _stprintf(szVol, _T("[%s]"), szVolume);
-
- Item.iSubItem = 1;
- Item.pszText = szVol;
- (void)ListView_InsertItem(pVirtMem->hListView, &Item);
- }
- }
-
- if ((InitialSize != 0) || (MaxSize != 0))
- {
- TCHAR szSize[64];
-
- _stprintf(szSize, _T("%i - %i"), InitialSize, MaxSize);
-
- Item.iSubItem = 2;
- Item.pszText = szSize;
- (void)ListView_InsertItem(pVirtMem->hListView, &Item);
- }
-
- PgCnt++;
- }
-
- DrivePtr += Len;
- }
-
- pVirtMem->Count = PgCnt;
-}
+ TCHAR szDrives[1024]; // all drives
+ LPTSTR DrivePtr = szDrives;
+ TCHAR szDrive[3]; // single drive
+ TCHAR szVolume[MAX_PATH];
+ TCHAR *szDisplayString;
+ INT InitialSize = 0;
+ INT MaxSize = 0;
+ INT DriveLen;
+ INT PgCnt = 0;
+ DriveLen = GetLogicalDriveStrings(1023,
+ szDrives);
-static VOID
-WritePageFileSettings(PVIRTMEM pVirtMem)
-{
- HKEY hk = NULL;
- TCHAR szPagingFiles[2048];
- INT i;
- INT nPos = 0;
- BOOL bErr = TRUE;
-
- for(i = 0; i < pVirtMem->Count; ++i)
- {
- if(pVirtMem->Pagefile[i].bUsed)
- {
- TCHAR szText[256];
-
- _stprintf(szText, _T("%s\\pagefile.sys %i %i"),
- pVirtMem->Pagefile[i].szDrive,
- pVirtMem->Pagefile[i].InitialValue,
- pVirtMem->Pagefile[i].MaxValue);
-
- /* Add it to our overall registry string */
- lstrcat(szPagingFiles + nPos, szText);
-
- /* Record the position where the next string will start */
- nPos += (INT)lstrlen(szText) + 1;
-
- /* add another NULL for REG_MULTI_SZ */
- szPagingFiles[nPos] = _T('\0');
- nPos++;
- }
- }
-
- if(RegCreateKeyEx(HKEY_LOCAL_MACHINE,
- lpKey,
- 0,
- NULL,
- REG_OPTION_NON_VOLATILE,
- KEY_WRITE,
- NULL,
- &hk,
- NULL) == ERROR_SUCCESS)
- {
- if (RegSetValueEx(hk,
- _T("PagingFiles"),
- 0,
- REG_MULTI_SZ,
- (LPBYTE) szPagingFiles,
- (DWORD) nPos * sizeof(TCHAR)))
- {
- bErr = FALSE;
- }
-
- RegCloseKey(hk);
- }
-
- if (bErr)
- ShowLastWin32Error(pVirtMem->hSelf);
+ szDisplayString = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (MAX_PATH * 2 + 69) * sizeof(TCHAR));
+ if (szDisplayString == NULL)
+ return;
+
+ while (DriveLen != 0)
+ {
+ INT Len;
+
+ Len = lstrlen(DrivePtr) + 1;
+ DriveLen -= Len;
+
+ DrivePtr = _tcsupr(DrivePtr);
+
+ /* copy the 'X:' portion */
+ lstrcpyn(szDrive, DrivePtr, sizeof(szDrive) / sizeof(TCHAR));
+
+ if (GetDriveType(DrivePtr) == DRIVE_FIXED)
+ {
+ /* does drive match the one in the registry ? */
+ if (!_tcsncmp(pVirtMem->szPagingFiles, szDrive, 2))
+ {
+ /* FIXME: we only check the first available pagefile in the reg */
+ GetPageFileSizes(pVirtMem->szPagingFiles,
+ &InitialSize,
+ &MaxSize);
+
+ pVirtMem->Pagefile[PgCnt].InitialValue = InitialSize;
+ pVirtMem->Pagefile[PgCnt].MaxValue = MaxSize;
+ 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].bUsed = FALSE;
+ lstrcpy(pVirtMem->Pagefile[PgCnt].szDrive, szDrive);
+ }
+
+ _tcscpy(szDisplayString, szDrive);
+ _tcscat(szDisplayString, _T("\t"));
+
+ /* set a volume label if there is one */
+ if (GetVolumeInformation(DrivePtr,
+ szVolume,
+ 255,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ 0))
+ {
+ if (szVolume[0] != _T('\0'))
+ {
+ TCHAR szVol[MAX_PATH + 2];
+ _stprintf(szVol, _T("[%s]"), szVolume);
+ _tcscat(szDisplayString, szVol);
+ }
+ }
+
+ if ((InitialSize != 0) || (MaxSize != 0))
+ {
+ TCHAR szSize[64];
+
+ _stprintf(szSize, _T("%i - %i"), InitialSize, MaxSize);
+ _tcscat(szDisplayString, _T("\t"));
+ _tcscat(szDisplayString, szSize);
+ }
+
+ SendMessage(pVirtMem->hListBox, LB_ADDSTRING, (WPARAM)0, (LPARAM)szDisplayString);
+ PgCnt++;
+ }
+
+ DrivePtr += Len;
+ }
+
+ SendMessage(pVirtMem->hListBox, LB_SETCURSEL, (WPARAM)0, (LPARAM)0);
+ HeapFree(GetProcessHeap(), 0, szDisplayString);
+ pVirtMem->Count = PgCnt;
+ OnSelChange(pVirtMem->hSelf, pVirtMem);
}
static VOID
-SetListViewColumns(HWND hwndListView)
+WritePageFileSettings(PVIRTMEM pVirtMem)
{
- RECT rect;
- LV_COLUMN lvc;
-
- GetClientRect(hwndListView, &rect);
+ HKEY hk = NULL;
+ TCHAR szPagingFiles[2048];
+ TCHAR szText[256];
+ INT i;
+ INT nPos = 0;
+ BOOL bErr = TRUE;
+
+ for (i = 0; i < pVirtMem->Count; ++i)
+ {
+ if (pVirtMem->Pagefile[i].bUsed)
+ {
+ _stprintf(szText, _T("%s\\pagefile.sys %i %i"),
+ pVirtMem->Pagefile[i].szDrive,
+ pVirtMem->Pagefile[i].InitialValue,
+ pVirtMem->Pagefile[i].MaxValue);
+
+ /* Add it to our overall registry string */
+ lstrcpy(szPagingFiles + nPos, szText);
+
+ /* Record the position where the next string will start */
+ nPos += (INT)lstrlen(szText) + 1;
+
+ /* add another NULL for REG_MULTI_SZ */
+ szPagingFiles[nPos] = _T('\0');
+ nPos++;
+ }
+ }
+
+ if (RegCreateKeyEx(HKEY_LOCAL_MACHINE,
+ lpKey,
+ 0,
+ NULL,
+ REG_OPTION_NON_VOLATILE,
+ KEY_WRITE,
+ NULL,
+ &hk,
+ NULL) == ERROR_SUCCESS)
+ {
+ if (RegSetValueEx(hk,
+ _T("PagingFiles"),
+ 0,
+ REG_MULTI_SZ,
+ (LPBYTE) szPagingFiles,
+ (DWORD) nPos * sizeof(TCHAR)) == ERROR_SUCCESS)
+ {
+ bErr = FALSE;
+ }
- (void)ListView_SetExtendedListViewStyle(hwndListView,
- LVS_EX_FULLROWSELECT);
+ RegCloseKey(hk);
+ }
- ZeroMemory(&lvc, sizeof(lvc));
- lvc.mask = LVCF_SUBITEM | LVCF_WIDTH | LVCF_FMT;
- lvc.fmt = LVCFMT_LEFT;
+ if (bErr)
+ ShowLastWin32Error(pVirtMem->hSelf);
+}
- lvc.cx = (INT)((rect.right - rect.left) * 0.1);
- lvc.iSubItem = 0;
- (void)ListView_InsertColumn(hwndListView, 0, &lvc);
- lvc.cx = (INT)((rect.right - rect.left) * 0.3);
- lvc.iSubItem = 1;
- (void)ListView_InsertColumn(hwndListView, 1, &lvc);
+static VOID
+SetListBoxColumns(HWND hwndListBox)
+{
+ const INT tabs[2] = {30, 120};
- lvc.cx = (INT)((rect.right - rect.left) * 0.6);
- lvc.iSubItem = 2;
- (void)ListView_InsertColumn(hwndListView, 2, &lvc);
+ SendMessage(hwndListBox, LB_SETTABSTOPS, (WPARAM)2, (LPARAM)&tabs[0]);
}
static VOID
OnNoPagingFile(PVIRTMEM pVirtMem)
{
- /* Disable the page file custom size boxes */
- EnableWindow(GetDlgItem(pVirtMem->hSelf, IDC_INITIALSIZE), FALSE);
- EnableWindow(GetDlgItem(pVirtMem->hSelf, IDC_MAXSIZE), FALSE);
+ /* Disable the page file custom size boxes */
+ EnableWindow(GetDlgItem(pVirtMem->hSelf, IDC_INITIALSIZE), FALSE);
+ EnableWindow(GetDlgItem(pVirtMem->hSelf, IDC_MAXSIZE), FALSE);
}
static VOID
OnSysManSize(PVIRTMEM pVirtMem)
{
- /* Disable the page file custom size boxes */
- EnableWindow(GetDlgItem(pVirtMem->hSelf, IDC_INITIALSIZE), FALSE);
- EnableWindow(GetDlgItem(pVirtMem->hSelf, IDC_MAXSIZE), FALSE);
+ /* Disable the page file custom size boxes */
+ EnableWindow(GetDlgItem(pVirtMem->hSelf, IDC_INITIALSIZE), FALSE);
+ EnableWindow(GetDlgItem(pVirtMem->hSelf, IDC_MAXSIZE), FALSE);
}
static VOID
OnCustom(PVIRTMEM pVirtMem)
{
- /* Enable the page file custom size boxes */
- EnableWindow(GetDlgItem(pVirtMem->hSelf, IDC_INITIALSIZE), TRUE);
- EnableWindow(GetDlgItem(pVirtMem->hSelf, IDC_MAXSIZE), TRUE);
+ /* Enable the page file custom size boxes */
+ EnableWindow(GetDlgItem(pVirtMem->hSelf, IDC_INITIALSIZE), TRUE);
+ EnableWindow(GetDlgItem(pVirtMem->hSelf, IDC_MAXSIZE), TRUE);
}
static VOID
OnSet(PVIRTMEM pVirtMem)
{
- INT Index;
-
- pVirtMem->bSave = TRUE;
-
- Index = (INT)SendDlgItemMessage(pVirtMem->hSelf,
- IDC_PAGEFILELIST,
- LB_GETCURSEL,
- 0,
- 0);
-
- if(Index < pVirtMem->Count)
- {
- TCHAR szText[255];
-
- /* check if custom settings are checked */
- if(SendDlgItemMessage(pVirtMem->hSelf,
- IDC_CUSTOM,
- BM_GETCHECK,
- 0,
- 0) == BST_CHECKED)
- {
- SendDlgItemMessage(pVirtMem->hSelf,
- IDC_INITIALSIZE,
- WM_GETTEXT,
- 254,
- (LPARAM)szText);
- pVirtMem->Pagefile[Index].InitialValue = _ttoi(szText);
-
- SendDlgItemMessage(pVirtMem->hSelf,
- IDC_MAXSIZE,
- WM_GETTEXT,
- 254,
- (LPARAM)szText);
- pVirtMem->Pagefile[Index].MaxValue = _ttoi(szText);
- }
- else
- {
- /* set sizes to 0 */
- pVirtMem->Pagefile[Index].InitialValue = pVirtMem->Pagefile[Index].MaxValue = 0;
-
- // check to see if this drive is used for a paging file
- if (SendDlgItemMessage(pVirtMem->hSelf,
- IDC_NOPAGEFILE,
- BM_GETCHECK,
- 0,
- 0) == BST_UNCHECKED)
- {
- pVirtMem->Pagefile[Index].bUsed = TRUE;
- }
- else
- {
- pVirtMem->Pagefile[Index].bUsed = FALSE;
- }
- }
- }
+ INT Index;
+ UINT InitValue;
+ UINT MaxValue;
+ BOOL bTranslated;
+ TCHAR szTitle[64];
+ TCHAR szMessage[256];
+
+ pVirtMem->bSave = TRUE;
+
+ Index = (INT)SendDlgItemMessage(pVirtMem->hSelf,
+ IDC_PAGEFILELIST,
+ LB_GETCURSEL,
+ 0,
+ 0);
+ if (Index < pVirtMem->Count)
+ {
+ /* check if custom settings are checked */
+ if (IsDlgButtonChecked(pVirtMem->hSelf,
+ IDC_CUSTOM) == BST_CHECKED)
+ {
+ InitValue = GetDlgItemInt(pVirtMem->hSelf,
+ IDC_INITIALSIZE,
+ &bTranslated,
+ FALSE);
+ if (!bTranslated)
+ {
+ if (LoadString(hApplet,
+ IDS_MESSAGEBOXTITLE,
+ szTitle,
+ sizeof(szTitle) / sizeof(szTitle[0])) == 0)
+ _tcscpy(szTitle, _T("System control panel applet"));
+
+ if (LoadString(hApplet,
+ IDS_WARNINITIALSIZE,
+ szMessage,
+ sizeof(szMessage) / sizeof(szMessage[0])) == 0)
+ _tcscpy(szMessage, _T("Enter a numeric value for the initial size of the paging file."));
+
+ MessageBox(NULL,
+ szMessage,
+ szTitle,
+ MB_ICONWARNING | MB_OK);
+ return;
+ }
+
+ MaxValue = GetDlgItemInt(pVirtMem->hSelf,
+ IDC_MAXSIZE,
+ &bTranslated,
+ FALSE);
+ if (!bTranslated)
+ {
+ if (LoadString(hApplet,
+ IDS_MESSAGEBOXTITLE,
+ szTitle,
+ sizeof(szTitle) / sizeof(szTitle[0])) == 0)
+ _tcscpy(szTitle, _T("System control panel applet"));
+
+ if (LoadString(hApplet,
+ IDS_WARNMAXIMUMSIZE,
+ szMessage,
+ sizeof(szMessage) / sizeof(szMessage[0])) == 0)
+ _tcscpy(szMessage, _T("Enter a numeric value for the maximum size of the paging file."));
+
+ MessageBox(NULL,
+ szMessage,
+ szTitle,
+ MB_ICONWARNING | MB_OK);
+ return;
+ }
+
+ /* FIXME: Add more file size checks! */
+
+ pVirtMem->Pagefile[Index].InitialValue = InitValue;
+ pVirtMem->Pagefile[Index].MaxValue = MaxValue;
+ pVirtMem->Pagefile[Index].bUsed = TRUE;
+ }
+ else
+ {
+ /* set sizes to 0 */
+ pVirtMem->Pagefile[Index].InitialValue = pVirtMem->Pagefile[Index].MaxValue = 0;
+
+ // check to see if this drive is used for a paging file
+ if (IsDlgButtonChecked(pVirtMem->hSelf,
+ IDC_NOPAGEFILE) == BST_UNCHECKED)
+ {
+ pVirtMem->Pagefile[Index].bUsed = TRUE;
+ }
+ else
+ {
+ pVirtMem->Pagefile[Index].bUsed = FALSE;
+ }
+ }
+ }
}
static BOOL
-OnSelChange(PVIRTMEM pVirtMem,
- LPNMLISTVIEW pnmv)
+OnSelChange(HWND hwndDlg, PVIRTMEM pVirtMem)
{
- TCHAR szCustVals[255];
- INT Index;
-
- UNREFERENCED_PARAMETER(pnmv);
-
- Index = (INT)SendDlgItemMessage(pVirtMem->hSelf,
- IDC_PAGEFILELIST,
- LB_GETCURSEL,
- 0,
- 0);
-
- if(Index < pVirtMem->Count)
- {
-
- if(pVirtMem->Pagefile[Index].InitialValue != 0 &&
- pVirtMem->Pagefile[Index].MaxValue != 0)
- {
- /* enable and fill the custom values */
- EnableWindow(GetDlgItem(pVirtMem->hSelf, IDC_MAXSIZE), TRUE);
- EnableWindow(GetDlgItem(pVirtMem->hSelf, IDC_INITIALSIZE), TRUE);
-
- _itot(pVirtMem->Pagefile[Index].InitialValue , szCustVals, 10);
- SendDlgItemMessage(pVirtMem->hSelf,
- IDC_INITIALSIZE,
- WM_SETTEXT,
- 0,
- (LPARAM)szCustVals);
-
- _itot(pVirtMem->Pagefile[Index].MaxValue, szCustVals, 10);
- SendDlgItemMessage(pVirtMem->hSelf,
- IDC_MAXSIZE,
- WM_SETTEXT,
- 0,
- (LPARAM)szCustVals);
-
- SendDlgItemMessage(pVirtMem->hSelf,
- IDC_CUSTOM,
- BM_SETCHECK,
- 1,
- 0);
- }
- else
- {
- /* It's not a custom value */
- EnableWindow(GetDlgItem(pVirtMem->hSelf, IDC_MAXSIZE), FALSE);
- EnableWindow(GetDlgItem(pVirtMem->hSelf, IDC_INITIALSIZE), FALSE);
-
- /* is it system managed */
- if(pVirtMem->Pagefile[Index].bUsed)
- {
- SendDlgItemMessage(pVirtMem->hSelf,
- IDC_SYSMANSIZE,
- BM_SETCHECK,
- 1,
- 0);
- }
- else
- {
- SendDlgItemMessage(pVirtMem->hSelf,
- IDC_NOPAGEFILE,
- BM_SETCHECK,
- 1,
- 0);
- }
- }
- }
-
- return TRUE;
-}
+ TCHAR szBuffer[64];
+ MEMORYSTATUSEX MemoryStatus;
+ ULARGE_INTEGER FreeBytes;
+ DWORDLONG FreeMemory;
+ INT Index;
+ INT i;
+ INT FileSize;
+
+ Index = (INT)SendDlgItemMessage(hwndDlg,
+ IDC_PAGEFILELIST,
+ LB_GETCURSEL,
+ 0,
+ 0);
+ if (Index < pVirtMem->Count)
+ {
+ /* Set drive letter */
+ SetDlgItemText(hwndDlg, IDC_DRIVE,
+ pVirtMem->Pagefile[Index].szDrive);
+
+ /* Set available disk space */
+ if (GetDiskFreeSpaceEx(pVirtMem->Pagefile[Index].szDrive,
+ NULL, NULL, &FreeBytes))
+ {
+ _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)
+ {
+ /* enable and fill the custom values */
+ EnableWindow(GetDlgItem(pVirtMem->hSelf, IDC_MAXSIZE), TRUE);
+ EnableWindow(GetDlgItem(pVirtMem->hSelf, IDC_INITIALSIZE), TRUE);
+
+ SetDlgItemInt(pVirtMem->hSelf,
+ IDC_INITIALSIZE,
+ pVirtMem->Pagefile[Index].InitialValue,
+ FALSE);
+
+ SetDlgItemInt(pVirtMem->hSelf,
+ IDC_MAXSIZE,
+ pVirtMem->Pagefile[Index].MaxValue,
+ FALSE);
+
+ CheckDlgButton(pVirtMem->hSelf,
+ IDC_CUSTOM,
+ BST_CHECKED);
+ }
+ else
+ {
+ /* It's not a custom value */
+ EnableWindow(GetDlgItem(pVirtMem->hSelf, IDC_MAXSIZE), FALSE);
+ EnableWindow(GetDlgItem(pVirtMem->hSelf, IDC_INITIALSIZE), FALSE);
+
+ /* is it system managed */
+ if (pVirtMem->Pagefile[Index].bUsed)
+ {
+ CheckDlgButton(pVirtMem->hSelf,
+ IDC_SYSMANSIZE,
+ BST_CHECKED);
+ }
+ else
+ {
+ CheckDlgButton(pVirtMem->hSelf,
+ IDC_NOPAGEFILE,
+ BST_CHECKED);
+ }
+ }
+
+ /* Set minimum pagefile size */
+ SetDlgItemText(hwndDlg, IDC_MINIMUM, _T("2 MB"));
+
+ /* Set recommended pagefile size */
+ MemoryStatus.dwLength = sizeof(MEMORYSTATUSEX);
+ if (GlobalMemoryStatusEx(&MemoryStatus))
+ {
+ FreeMemory = MemoryStatus.ullTotalPhys / (1024 * 1024);
+ _stprintf(szBuffer, _T("%I64u MB"), FreeMemory + (FreeMemory / 2));
+ SetDlgItemText(hwndDlg, IDC_RECOMMENDED, szBuffer);
+ }
+
+ /* Set current pagefile size */
+ FileSize = 0;
+ for (i = 0; i < 26; i++)
+ {
+ FileSize += pVirtMem->Pagefile[i].InitialValue;
+ }
+ _stprintf(szBuffer, _T("%u MB"), FileSize);
+ SetDlgItemText(hwndDlg, IDC_CURRENT, szBuffer);
+ }
-static VOID
-OnOk(PVIRTMEM pVirtMem)
-{
- if(pVirtMem->bSave == TRUE)
- {
- WritePageFileSettings(pVirtMem);
- }
-
- if (pVirtMem->szPagingFiles)
- HeapFree(GetProcessHeap(),
- 0,
- pVirtMem->szPagingFiles);
-
- HeapFree(GetProcessHeap(),
- 0,
- pVirtMem);
+ return TRUE;
}
static VOID
-OnCancel(PVIRTMEM pVirtMem)
+OnOk(PVIRTMEM pVirtMem)
{
- if (pVirtMem->szPagingFiles)
- HeapFree(GetProcessHeap(),
- 0,
- pVirtMem->szPagingFiles);
-
- HeapFree(GetProcessHeap(),
- 0,
- pVirtMem);
+ if (pVirtMem->bSave == TRUE)
+ {
+ WritePageFileSettings(pVirtMem);
+ }
}
-static PVIRTMEM
-OnInitDialog(HWND hwnd)
+static VOID
+OnInitDialog(HWND hwnd, PVIRTMEM pVirtMem)
{
- PVIRTMEM pVirtMem = (PVIRTMEM)HeapAlloc(GetProcessHeap(),
- HEAP_ZERO_MEMORY,
- sizeof(VIRTMEM));
- if (pVirtMem == NULL)
- {
- EndDialog(hwnd, 0);
- }
-
- pVirtMem->hSelf = hwnd;
- pVirtMem->hListView = GetDlgItem(hwnd, IDC_PAGEFILELIST);
- pVirtMem->bSave = FALSE;
-
- SetListViewColumns(pVirtMem->hListView);
-
- /* Load the pagefile systems from the reg */
- if (ReadPageFileSettings(pVirtMem))
- {
- /* Parse our settings and set up dialog */
- ParseMemSettings(pVirtMem);
- }
-
- return pVirtMem;
+ pVirtMem->hSelf = hwnd;
+ pVirtMem->hListBox = GetDlgItem(hwnd, IDC_PAGEFILELIST);
+ pVirtMem->bSave = FALSE;
+
+ SetListBoxColumns(pVirtMem->hListBox);
+
+ /* Load the pagefile systems from the reg */
+ if (ReadPageFileSettings(pVirtMem))
+ {
+ /* Parse our settings and set up dialog */
+ ParseMemSettings(pVirtMem);
+ }
}
WPARAM wParam,
LPARAM lParam)
{
- /* there can only be one instance of this dialog */
- static PVIRTMEM pVirtMem = NULL;
-
- UNREFERENCED_PARAMETER(lParam);
-
- switch (uMsg)
- {
- case WM_INITDIALOG:
- pVirtMem = OnInitDialog(hwndDlg);
- break;
-
- case WM_COMMAND:
- {
- switch (LOWORD(wParam))
- {
- case IDCANCEL:
- OnCancel(pVirtMem);
- EndDialog(hwndDlg, 0);
- return TRUE;
-
- case IDOK:
- OnOk(pVirtMem);
- EndDialog(hwndDlg, 0);
- return TRUE;
-
- case IDC_NOPAGEFILE:
- OnNoPagingFile(pVirtMem);
- return TRUE;
-
- case IDC_SYSMANSIZE:
- OnSysManSize(pVirtMem);
- return TRUE;
-
- case IDC_CUSTOM:
- OnCustom(pVirtMem);
- return TRUE;
-
- case IDC_SET:
- OnSet(pVirtMem);
- return TRUE;
- }
- }
- break;
-
- case WM_NOTIFY:
- {
- LPNMHDR pnmhdr = (LPNMHDR)lParam;
-
- switch (pnmhdr->code)
- {
- case LVN_ITEMCHANGED:
- {
- LPNMLISTVIEW pnmv = (LPNMLISTVIEW) lParam;
-
- OnSelChange(pVirtMem, pnmv);
- }
- }
- }
- break;
- }
-
- return FALSE;
+ PVIRTMEM pVirtMem;
+
+ UNREFERENCED_PARAMETER(lParam);
+
+ pVirtMem = (PVIRTMEM)GetWindowLongPtr(hwndDlg, DWLP_USER);
+
+ switch (uMsg)
+ {
+ case WM_INITDIALOG:
+ pVirtMem = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(VIRTMEM));
+ if (pVirtMem == NULL)
+ {
+ EndDialog(hwndDlg, 0);
+ return FALSE;
+ }
+
+ SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pVirtMem);
+
+ OnInitDialog(hwndDlg, pVirtMem);
+ break;
+
+ case WM_DESTROY:
+ if (pVirtMem->szPagingFiles)
+ HeapFree(GetProcessHeap(), 0,
+ pVirtMem->szPagingFiles);
+ HeapFree(GetProcessHeap(), 0, pVirtMem);
+ break;
+
+ case WM_COMMAND:
+ switch (LOWORD(wParam))
+ {
+ case IDCANCEL:
+ EndDialog(hwndDlg, 0);
+ return TRUE;
+
+ case IDOK:
+ OnOk(pVirtMem);
+ EndDialog(hwndDlg, 0);
+ return TRUE;
+
+ case IDC_NOPAGEFILE:
+ OnNoPagingFile(pVirtMem);
+ return TRUE;
+
+ case IDC_SYSMANSIZE:
+ OnSysManSize(pVirtMem);
+ return TRUE;
+
+ case IDC_CUSTOM:
+ OnCustom(pVirtMem);
+ return TRUE;
+
+ case IDC_SET:
+ OnSet(pVirtMem);
+ return TRUE;
+
+ case IDC_PAGEFILELIST:
+ switch HIWORD(wParam)
+ {
+ case LBN_SELCHANGE:
+ OnSelChange(hwndDlg, pVirtMem);
+ return TRUE;
+ }
+ break;
+ }
+ break;
+ }
+
+ return FALSE;
}