* moved Memory Lists from ExtendedTools to main program

* ExtendedTools: added Disk and Network sections

git-svn-id: svn://svn.code.sf.net/p/processhacker/code@4837 21ef857c-d57f-4fe0-8362-d861dc6d29cd
This commit is contained in:
wj32
2011-11-12 09:40:41 +00:00
parent 48accdc77f
commit 4a7e90efb0
23 changed files with 1532 additions and 1052 deletions
+74 -2
View File
@@ -444,6 +444,17 @@ BEGIN
END
END
IDR_EMPTYMEMLISTS MENU
BEGIN
POPUP "Empty"
BEGIN
MENUITEM "Empty Working Sets", ID_EMPTY_EMPTYWORKINGSETS
MENUITEM "Empty Modified Page List", ID_EMPTY_EMPTYMODIFIEDPAGELIST
MENUITEM "Empty Standby List", ID_EMPTY_EMPTYSTANDBYLIST
MENUITEM "Empty Priority 0 Standby List", ID_EMPTY_EMPTYPRIORITY0STANDBYLIST
END
END
/////////////////////////////////////////////////////////////////////////////
//
@@ -1517,7 +1528,7 @@ BEGIN
RTEXT "Static",IDC_ZTHREADS_V,45,38,46,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZHANDLES_V,45,48,46,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZUPTIME_V,46,58,45,8,SS_ENDELLIPSIS
CONTROL "Show one graph per CPU",IDC_ONEGRAPHPERCPU,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,0,76,96,10
CONTROL "&Show one graph per CPU",IDC_ONEGRAPHPERCPU,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,0,76,96,10
GROUPBOX "CPU",IDC_STATIC,101,17,136,55
LTEXT "Context Switches Delta",IDC_STATIC,109,28,76,8
LTEXT "Interrupts Delta",IDC_STATIC,109,38,52,8
@@ -1531,6 +1542,7 @@ END
IDD_SYSINFO_MEMPANEL DIALOGEX 0, 0, 358, 171
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU
EXSTYLE WS_EX_CONTROLPARENT
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
GROUPBOX "Commit Charge",IDC_STATIC,0,0,108,44
@@ -1571,7 +1583,7 @@ BEGIN
LTEXT "Limit",IDC_STATIC,7,135,15,8
LTEXT "Frees Delta",IDC_STATIC,7,155,38,8
RTEXT "Static",IDC_ZNONPAGEDFREESDELTA_V,56,155,45,8,SS_ENDELLIPSIS
GROUPBOX "Memory Lists",IDC_STATIC,234,0,123,154
GROUPBOX "Memory Lists",IDC_STATIC,234,0,123,169
LTEXT "Zeroed",IDC_STATIC,242,11,24,8
LTEXT "Modified",IDC_STATIC,242,31,28,8
RTEXT "Static",IDC_ZLISTZEROED_V,304,11,47,8,SS_ENDELLIPSIS
@@ -1609,10 +1621,12 @@ BEGIN
RTEXT "Static",IDC_ZPAGINGMAPPEDWRITESDELTA_V,191,108,31,8,SS_ENDELLIPSIS
LTEXT "Modified pagefile",IDC_STATIC,242,51,55,8
RTEXT "Static",IDC_ZLISTMODIFIEDPAGEFILE_V,303,51,48,8,SS_ENDELLIPSIS
PUSHBUTTON "&More",IDC_MORE,242,152,50,14
END
IDD_SYSINFO_MEM DIALOGEX 0, 0, 316, 250
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CONTROL | WS_CHILD | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_CONTROLPARENT
CAPTION "Memory"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
@@ -1653,6 +1667,56 @@ BEGIN
RTEXT "Static",IDC_ZOTHERBYTESDELTA_V,81,61,45,8,SS_ENDELLIPSIS
END
IDD_MEMLISTS DIALOGEX 0, 0, 228, 195
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_TOPMOST
CAPTION "Memory Lists"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "Close",IDOK,171,174,50,14
LTEXT "Zeroed",IDC_STATIC,7,7,24,8
LTEXT "Free",IDC_STATIC,7,17,16,8
LTEXT "Modified",IDC_STATIC,7,28,28,8
LTEXT "Modified no-write",IDC_STATIC,7,39,56,8
LTEXT "Bad",IDC_STATIC,7,60,13,8
LTEXT "Standby",IDC_STATIC,7,72,28,8
LTEXT "Priority 0",IDC_STATIC,23,83,30,8
LTEXT "Priority 1",IDC_STATIC,23,94,30,8
LTEXT "Priority 2",IDC_STATIC,23,105,30,8
LTEXT "Priority 3",IDC_STATIC,23,116,30,8
LTEXT "Priority 4",IDC_STATIC,23,128,30,8
LTEXT "Priority 5",IDC_STATIC,23,139,30,8
LTEXT "Priority 6",IDC_STATIC,23,150,30,8
LTEXT "Priority 7",IDC_STATIC,23,161,30,8
RTEXT "Static",IDC_ZLISTZEROED_V,73,7,59,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZLISTFREE_V,73,17,59,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZLISTMODIFIED_V,73,28,59,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZLISTMODIFIEDNOWRITE_V,73,39,59,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZLISTBAD_V,73,60,59,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZLISTSTANDBY_V,73,72,59,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZLISTSTANDBY0_V,73,83,59,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZLISTSTANDBY1_V,73,94,59,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZLISTSTANDBY2_V,73,105,59,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZLISTSTANDBY3_V,73,116,59,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZLISTSTANDBY4_V,73,128,59,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZLISTSTANDBY5_V,73,139,59,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZLISTSTANDBY6_V,73,150,59,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZLISTSTANDBY7_V,73,161,59,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZLISTREPURPOSED_V,162,72,59,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZLISTREPURPOSED0_V,162,84,59,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZLISTREPURPOSED1_V,162,95,59,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZLISTREPURPOSED2_V,162,106,59,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZLISTREPURPOSED3_V,162,117,59,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZLISTREPURPOSED4_V,162,128,59,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZLISTREPURPOSED5_V,162,139,59,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZLISTREPURPOSED6_V,162,150,59,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZLISTREPURPOSED7_V,162,161,59,8,SS_ENDELLIPSIS
RTEXT "(Repurposed)",IDC_STATIC,162,60,59,8
PUSHBUTTON "&Empty",IDC_EMPTY,117,174,50,14
LTEXT "Modified pagefile",IDC_STATIC,7,49,55,8
RTEXT "Static",IDC_ZLISTMODIFIEDPAGEFILE_V,73,49,59,8,SS_ENDELLIPSIS
END
/////////////////////////////////////////////////////////////////////////////
//
@@ -2157,6 +2221,14 @@ BEGIN
BEGIN
BOTTOMMARGIN, 74
END
IDD_MEMLISTS, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 221
TOPMARGIN, 7
BOTTOMMARGIN, 188
END
END
#endif // APSTUDIO_INVOKED
@@ -276,6 +276,7 @@
<ClCompile Include="mainwnd.c" />
<ClCompile Include="mdump.c" />
<ClCompile Include="memedit.c" />
<ClCompile Include="memlists.c" />
<ClCompile Include="memprot.c" />
<ClCompile Include="memprv.c" />
<ClCompile Include="memrslt.c" />
@@ -453,6 +453,9 @@
<ClCompile Include="pcre\pcre_xclass.c">
<Filter>PCRE</Filter>
</ClCompile>
<ClCompile Include="memlists.c">
<Filter>Process Hacker</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\phlib\circbuf_i.h">
+8
View File
@@ -1451,6 +1451,14 @@ VOID PhShowMemoryEditorDialog(
__in ULONG SelectLength
);
// memlists
VOID PhShowMemoryListsDialog(
__in HWND ParentWindowHandle,
__in_opt VOID (NTAPI *RegisterDialog)(HWND),
__in_opt VOID (NTAPI *UnregisterDialog)(HWND)
);
// memprot
VOID PhShowMemoryProtectDialog(
@@ -77,6 +77,14 @@ VOID PhSipOnUserMessage(
// Framework
VOID PhSipRegisterDialog(
__in HWND DialogWindowHandle
);
VOID PhSipUnregisterDialog(
__in HWND DialogWindowHandle
);
VOID PhSipInitializeParameters(
VOID
);
+278
View File
@@ -0,0 +1,278 @@
/*
* Process Hacker -
* memory list information
*
* Copyright (C) 2010-2011 wj32
*
* This file is part of Process Hacker.
*
* Process Hacker is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Process Hacker is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Process Hacker. If not, see <http://www.gnu.org/licenses/>.
*/
#include <phapp.h>
#define MSG_UPDATE (WM_APP + 1)
INT_PTR CALLBACK PhpMemoryListsDlgProc(
__in HWND hwndDlg,
__in UINT uMsg,
__in WPARAM wParam,
__in LPARAM lParam
);
HWND PhMemoryListsWindowHandle = NULL;
static VOID (NTAPI *UnregisterDialogFunction)(HWND);
static PH_CALLBACK_REGISTRATION ProcessesUpdatedRegistration;
VOID PhShowMemoryListsDialog(
__in HWND ParentWindowHandle,
__in_opt VOID (NTAPI *RegisterDialog)(HWND),
__in_opt VOID (NTAPI *UnregisterDialog)(HWND)
)
{
if (!PhMemoryListsWindowHandle)
{
PhMemoryListsWindowHandle = CreateDialog(
PhInstanceHandle,
MAKEINTRESOURCE(IDD_MEMLISTS),
ParentWindowHandle,
PhpMemoryListsDlgProc
);
RegisterDialog(PhMemoryListsWindowHandle);
UnregisterDialogFunction = UnregisterDialog;
}
if (!IsWindowVisible(PhMemoryListsWindowHandle))
ShowWindow(PhMemoryListsWindowHandle, SW_SHOW);
else if (IsIconic(PhMemoryListsWindowHandle))
ShowWindow(PhMemoryListsWindowHandle, SW_RESTORE);
else
SetForegroundWindow(PhMemoryListsWindowHandle);
}
static VOID NTAPI ProcessesUpdatedCallback(
__in_opt PVOID Parameter,
__in_opt PVOID Context
)
{
PostMessage(PhMemoryListsWindowHandle, MSG_UPDATE, 0, 0);
}
static VOID PhpUpdateMemoryListInfo(
__in HWND hwndDlg
)
{
SYSTEM_MEMORY_LIST_INFORMATION memoryListInfo;
if (NT_SUCCESS(NtQuerySystemInformation(
SystemMemoryListInformation,
&memoryListInfo,
sizeof(SYSTEM_MEMORY_LIST_INFORMATION),
NULL
)))
{
ULONG_PTR standbyPageCount;
ULONG_PTR repurposedPageCount;
ULONG i;
standbyPageCount = 0;
repurposedPageCount = 0;
for (i = 0; i < 8; i++)
{
standbyPageCount += memoryListInfo.PageCountByPriority[i];
repurposedPageCount += memoryListInfo.RepurposedPagesByPriority[i];
}
SetDlgItemText(hwndDlg, IDC_ZLISTZEROED_V, PhaFormatSize((ULONG64)memoryListInfo.ZeroPageCount * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZLISTFREE_V, PhaFormatSize((ULONG64)memoryListInfo.FreePageCount * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZLISTMODIFIED_V, PhaFormatSize((ULONG64)memoryListInfo.ModifiedPageCount * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZLISTMODIFIEDNOWRITE_V, PhaFormatSize((ULONG64)memoryListInfo.ModifiedNoWritePageCount * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZLISTBAD_V, PhaFormatSize((ULONG64)memoryListInfo.BadPageCount * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZLISTSTANDBY_V, PhaFormatSize((ULONG64)standbyPageCount * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZLISTSTANDBY0_V, PhaFormatSize((ULONG64)memoryListInfo.PageCountByPriority[0] * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZLISTSTANDBY1_V, PhaFormatSize((ULONG64)memoryListInfo.PageCountByPriority[1] * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZLISTSTANDBY2_V, PhaFormatSize((ULONG64)memoryListInfo.PageCountByPriority[2] * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZLISTSTANDBY3_V, PhaFormatSize((ULONG64)memoryListInfo.PageCountByPriority[3] * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZLISTSTANDBY4_V, PhaFormatSize((ULONG64)memoryListInfo.PageCountByPriority[4] * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZLISTSTANDBY5_V, PhaFormatSize((ULONG64)memoryListInfo.PageCountByPriority[5] * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZLISTSTANDBY6_V, PhaFormatSize((ULONG64)memoryListInfo.PageCountByPriority[6] * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZLISTSTANDBY7_V, PhaFormatSize((ULONG64)memoryListInfo.PageCountByPriority[7] * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZLISTREPURPOSED_V, PhaFormatSize((ULONG64)repurposedPageCount * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZLISTREPURPOSED0_V, PhaFormatSize((ULONG64)memoryListInfo.RepurposedPagesByPriority[0] * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZLISTREPURPOSED1_V, PhaFormatSize((ULONG64)memoryListInfo.RepurposedPagesByPriority[1] * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZLISTREPURPOSED2_V, PhaFormatSize((ULONG64)memoryListInfo.RepurposedPagesByPriority[2] * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZLISTREPURPOSED3_V, PhaFormatSize((ULONG64)memoryListInfo.RepurposedPagesByPriority[3] * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZLISTREPURPOSED4_V, PhaFormatSize((ULONG64)memoryListInfo.RepurposedPagesByPriority[4] * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZLISTREPURPOSED5_V, PhaFormatSize((ULONG64)memoryListInfo.RepurposedPagesByPriority[5] * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZLISTREPURPOSED6_V, PhaFormatSize((ULONG64)memoryListInfo.RepurposedPagesByPriority[6] * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZLISTREPURPOSED7_V, PhaFormatSize((ULONG64)memoryListInfo.RepurposedPagesByPriority[7] * PAGE_SIZE, -1)->Buffer);
if (WindowsVersion >= WINDOWS_8)
SetDlgItemText(hwndDlg, IDC_ZLISTMODIFIEDPAGEFILE_V, PhaFormatSize((ULONG64)memoryListInfo.ModifiedPageCountPageFile * PAGE_SIZE, -1)->Buffer);
else
SetDlgItemText(hwndDlg, IDC_ZLISTMODIFIEDPAGEFILE_V, L"N/A");
}
else
{
SetDlgItemText(hwndDlg, IDC_ZLISTZEROED_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZLISTFREE_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZLISTMODIFIED_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZLISTMODIFIEDNOWRITE_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZLISTMODIFIEDPAGEFILE_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZLISTBAD_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZLISTSTANDBY_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZLISTSTANDBY0_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZLISTSTANDBY1_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZLISTSTANDBY2_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZLISTSTANDBY3_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZLISTSTANDBY4_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZLISTSTANDBY5_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZLISTSTANDBY6_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZLISTSTANDBY7_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZLISTREPURPOSED_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZLISTREPURPOSED0_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZLISTREPURPOSED1_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZLISTREPURPOSED2_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZLISTREPURPOSED3_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZLISTREPURPOSED4_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZLISTREPURPOSED5_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZLISTREPURPOSED6_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZLISTREPURPOSED7_V, L"Unknown");
}
}
INT_PTR CALLBACK PhpMemoryListsDlgProc(
__in HWND hwndDlg,
__in UINT uMsg,
__in WPARAM wParam,
__in LPARAM lParam
)
{
switch (uMsg)
{
case WM_INITDIALOG:
{
PhRegisterCallback(&PhProcessesUpdatedEvent, ProcessesUpdatedCallback, NULL, &ProcessesUpdatedRegistration);
PhpUpdateMemoryListInfo(hwndDlg);
PhLoadWindowPlacementFromSetting(L"MemoryListsWindowPosition", NULL, hwndDlg);
PhRegisterDialog(hwndDlg);
}
break;
case WM_DESTROY:
{
PhUnregisterDialog(hwndDlg);
PhSaveWindowPlacementToSetting(L"MemoryListsWindowPosition", NULL, hwndDlg);
PhUnregisterCallback(&PhProcessesUpdatedEvent, &ProcessesUpdatedRegistration);
UnregisterDialogFunction(hwndDlg);
PhMemoryListsWindowHandle = NULL;
}
break;
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case IDCANCEL:
case IDOK:
DestroyWindow(hwndDlg);
break;
case IDC_EMPTY:
{
HMENU menu;
HMENU subMenu;
RECT buttonRect;
POINT point;
UINT selectedItem;
SYSTEM_MEMORY_LIST_COMMAND command = -1;
menu = LoadMenu(PhInstanceHandle, MAKEINTRESOURCE(IDR_EMPTYMEMLISTS));
subMenu = GetSubMenu(menu, 0);
GetClientRect(GetDlgItem(hwndDlg, IDC_EMPTY), &buttonRect);
point.x = 0;
point.y = buttonRect.bottom;
ClientToScreen(GetDlgItem(hwndDlg, IDC_EMPTY), &point);
selectedItem = PhShowContextMenu2(
hwndDlg,
GetDlgItem(hwndDlg, IDC_EMPTY),
subMenu,
point
);
switch (selectedItem)
{
case ID_EMPTY_EMPTYWORKINGSETS:
command = MemoryEmptyWorkingSets;
break;
case ID_EMPTY_EMPTYMODIFIEDPAGELIST:
command = MemoryFlushModifiedList;
break;
case ID_EMPTY_EMPTYSTANDBYLIST:
command = MemoryPurgeStandbyList;
break;
case ID_EMPTY_EMPTYPRIORITY0STANDBYLIST:
command = MemoryPurgeLowPriorityStandbyList;
break;
}
if (command != -1)
{
NTSTATUS status;
PVOID returnedState;
ULONG privilege = SE_PROF_SINGLE_PROCESS_PRIVILEGE;
if (NT_SUCCESS(status = RtlAcquirePrivilege(
&privilege,
1,
0,
&returnedState
)))
{
status = NtSetSystemInformation(
SystemMemoryListInformation,
&command,
sizeof(SYSTEM_MEMORY_LIST_COMMAND)
);
RtlReleasePrivilege(returnedState);
}
if (status == STATUS_PRIVILEGE_NOT_HELD)
{
PhShowError(hwndDlg, L"Process Hacker must be elevated to execute this command.");
}
else if (!NT_SUCCESS(status))
{
PhShowStatus(hwndDlg, L"Unable to execute the memory list command", status, 0);
}
}
DestroyMenu(menu);
}
break;
}
}
break;
case MSG_UPDATE:
{
PhpUpdateMemoryListInfo(hwndDlg);
}
break;
}
return FALSE;
}
+21 -2
View File
@@ -116,6 +116,9 @@
#define IDD_SYSINFO_MEM 199
#define IDD_SYSINFO_IO 200
#define IDD_SYSINFO_IOPANEL 201
#define IDD_MEMLISTS 202
#define IDR_EMPTYMEMORYLISTS 203
#define IDR_EMPTYMEMLISTS 204
#define IDC_TERMINATE 1003
#define IDC_FILEICON 1005
#define IDC_FILE 1006
@@ -215,6 +218,7 @@
#define IDC_ADD 1079
#define IDC_FONT 1079
#define IDC_INTEGRITY 1079
#define IDC_MORE 1079
#define IDC_EDITDEP 1080
#define IDC_VIEWPARENTPROCESS 1081
#define IDC_OPENFILENAME 1082
@@ -485,6 +489,17 @@
#define IDC_ZLISTSTANDBY1_V 1347
#define IDC_ZLISTSTANDBY2_V 1348
#define IDC_ZLISTSTANDBY3_V 1349
#define IDC_ZLISTBAD_V 1350
#define IDC_ZLISTREPURPOSED_V 1351
#define IDC_ZLISTREPURPOSED0_V 1352
#define IDC_ZLISTREPURPOSED1_V 1353
#define IDC_ZLISTREPURPOSED2_V 1354
#define IDC_ZLISTREPURPOSED3_V 1355
#define IDC_ZLISTREPURPOSED4_V 1356
#define IDC_ZLISTREPURPOSED5_V 1357
#define IDC_ZLISTREPURPOSED6_V 1358
#define IDC_ZLISTREPURPOSED7_V 1359
#define IDC_EMPTY 1360
#define IDC_ZLISTSTANDBY4_V 1364
#define IDC_ZLISTSTANDBY5_V 1365
#define IDC_ZLISTSTANDBY6_V 1366
@@ -714,6 +729,10 @@
#define ID_MODULE_OPENFILELOCATION 40247
#define ID_PROCESS_OPENFILELOCATION 40248
#define ID_MISCELLANEOUS_REDUCEWORKINGSET 40249
#define ID_EMPTY_EMPTYWORKINGSETS 40250
#define ID_EMPTY_EMPTYMODIFIEDPAGELIST 40251
#define ID_EMPTY_EMPTYSTANDBYLIST 40252
#define ID_EMPTY_EMPTYPRIORITY0STANDBYLIST 40253
#define IDC_BACK 40255
#define IDDYNAMIC 50000
#define IDPLUGINS 55000
@@ -723,9 +742,9 @@
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 199
#define _APS_NEXT_RESOURCE_VALUE 205
#define _APS_NEXT_COMMAND_VALUE 40256
#define _APS_NEXT_CONTROL_VALUE 1347
#define _APS_NEXT_CONTROL_VALUE 1361
#define _APS_NEXT_SYMED_VALUE 135
#endif
#endif
+1
View File
@@ -127,6 +127,7 @@ VOID PhSettingsInitialization(
PhpAddIntegerPairSetting(L"MemResultsPosition", L"300,300");
PhpAddIntegerPairSetting(L"MemResultsSize", L"500,520");
PhpAddStringSetting(L"MemoryListViewColumns", L"");
PhpAddIntegerPairSetting(L"MemoryListsWindowPosition", L"400,400");
PhpAddStringSetting(L"MemoryReadWriteAddressChoices", L"");
PhpAddStringSetting(L"ModuleTreeListColumns", L"");
PhpAddStringSetting(L"ModuleTreeListSort", L"0,0"); // 0, NoSortOrder
+57 -4
View File
@@ -34,6 +34,7 @@
static HANDLE PhSipThread = NULL;
static HWND PhSipWindow = NULL;
static PPH_LIST PhSipDialogList = NULL;
static PH_EVENT InitializedEvent = PH_EVENT_INIT;
static PH_LAYOUT_MANAGER WindowLayoutManager;
static RECT MinimumSize;
@@ -157,6 +158,20 @@ NTSTATUS PhSipSysInfoThreadStart(
processed = TRUE;
}
if (PhSipDialogList)
{
ULONG i;
for (i = 0; i < PhSipDialogList->Count; i++)
{
if (IsDialogMessage((HWND)PhSipDialogList->Items[i], &message))
{
processed = TRUE;
break;
}
}
}
if (!processed)
{
if (!IsDialogMessage(PhSipWindow, &message))
@@ -176,6 +191,12 @@ NTSTATUS PhSipSysInfoThreadStart(
PhSipWindow = NULL;
PhSipThread = NULL;
if (PhSipDialogList)
{
PhDereferenceObject(PhSipDialogList);
PhSipDialogList = NULL;
}
return STATUS_SUCCESS;
}
@@ -264,8 +285,6 @@ VOID PhSipOnInitDialog(
NULL,
&ProcessesUpdatedRegistration
);
PhLoadWindowPlacementFromSetting(L"SysInfoWindowPosition", L"SysInfoWindowSize", PhSipWindow);
}
VOID PhSipOnDestroy(
@@ -378,6 +397,8 @@ VOID PhSipOnShowWindow(
GetSystemMetrics(SM_CYSIZEFRAME) * 2;
}
PhLoadWindowPlacementFromSetting(L"SysInfoWindowPosition", L"SysInfoWindowSize", PhSipWindow);
AlwaysOnTop = (BOOLEAN)PhGetIntegerSetting(L"SysInfoWindowAlwaysOnTop");
Button_SetCheck(GetDlgItem(PhSipWindow, IDC_ALWAYSONTOP), AlwaysOnTop ? BST_CHECKED : BST_UNCHECKED);
PhSipSetAlwaysOnTop();
@@ -637,6 +658,26 @@ VOID PhSiSetColorsGraphDrawInfo(
DrawInfo->LineBackColor2 = PhMakeColorBrighter(Color2, 125);
}
VOID PhSipRegisterDialog(
__in HWND DialogWindowHandle
)
{
if (!PhSipDialogList)
PhSipDialogList = PhCreateList(4);
PhAddItemList(PhSipDialogList, DialogWindowHandle);
}
VOID PhSipUnregisterDialog(
__in HWND DialogWindowHandle
)
{
ULONG index;
if ((index = PhFindItemList(PhSipDialogList, DialogWindowHandle)) != -1)
PhRemoveItemList(PhSipDialogList, index);
}
VOID PhSipInitializeParameters(
VOID
)
@@ -662,10 +703,10 @@ VOID PhSipInitializeParameters(
hdc = GetDC(PhSipWindow);
logFont.lfHeight -= MulDiv(4, GetDeviceCaps(hdc, LOGPIXELSY), 72);
logFont.lfHeight -= MulDiv(3, GetDeviceCaps(hdc, LOGPIXELSY), 72);
CurrentParameters.MediumFont = CreateFontIndirect(&logFont);
logFont.lfHeight -= MulDiv(4, GetDeviceCaps(hdc, LOGPIXELSY), 72);
logFont.lfHeight -= MulDiv(3, GetDeviceCaps(hdc, LOGPIXELSY), 72);
CurrentParameters.LargeFont = CreateFontIndirect(&logFont);
CurrentParameters.GraphBackColor = RGB(0xef, 0xef, 0xef);
@@ -2193,6 +2234,18 @@ INT_PTR CALLBACK PhSipMemoryPanelDialogProc(
NOTHING;
}
break;
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case IDC_MORE:
{
PhShowMemoryListsDialog(PhSipWindow, PhSipRegisterDialog, PhSipUnregisterDialog);
}
break;
}
}
break;
}
return FALSE;
@@ -51,8 +51,8 @@ END
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,7,0,0
PRODUCTVERSION 1,7,0,0
FILEVERSION 1,8,0,0
PRODUCTVERSION 1,8,0,0
FILEFLAGSMASK 0x17L
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -69,12 +69,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "wj32"
VALUE "FileDescription", "Extended Tools plugin for Process Hacker"
VALUE "FileVersion", "1.7"
VALUE "FileVersion", "1.8"
VALUE "InternalName", "ExtendedTools"
VALUE "LegalCopyright", "Licensed under the GNU GPL, v3."
VALUE "OriginalFilename", "ExtendedTools.dll"
VALUE "ProductName", "Extended Tools plugin for Process Hacker"
VALUE "ProductVersion", "1.7"
VALUE "ProductVersion", "1.8"
END
END
BLOCK "VarFileInfo"
@@ -208,39 +208,19 @@ BEGIN
RTEXT "Static",IDC_ZSENDBYTESDELTA_V,205,74,38,8,SS_ENDELLIPSIS
END
IDD_SYSDISKNET DIALOGEX 0, 0, 361, 221
STYLE DS_SETFONT | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
CAPTION "Disk and Network"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "Close",IDOK,304,200,50,14
GROUPBOX "Disk I/O",IDC_GROUPDISK,7,7,347,53,0,WS_EX_TRANSPARENT
GROUPBOX "Network I/O",IDC_GROUPNETWORK,7,62,347,53,0,WS_EX_TRANSPARENT
CONTROL "Always on Top",IDC_ALWAYSONTOP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,238,202,63,10
END
IDD_SYSDISKNET_PANEL DIALOGEX 0, 0, 246, 58
IDD_SYSINFO_DISKPANEL DIALOGEX 0, 0, 146, 58
STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD | WS_SYSMENU
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
GROUPBOX "Disk I/O",IDC_STATIC,0,0,118,58
LTEXT "Reads",IDC_STATIC,8,11,21,8
LTEXT "Read Bytes",IDC_STATIC,8,22,38,8
LTEXT "Writes",IDC_STATIC,8,33,22,8
LTEXT "Write Bytes",IDC_STATIC,8,44,38,8
RTEXT "Static",IDC_ZREADS_V,55,11,54,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZREADBYTES_V,71,22,38,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZWRITES_V,55,33,54,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZWRITEBYTES_V,71,44,38,8,SS_ENDELLIPSIS
GROUPBOX "Network I/O",IDC_STATIC,122,0,124,58
LTEXT "Receives",IDC_STATIC,130,11,30,8
LTEXT "Receive Bytes",IDC_STATIC,130,23,46,8
LTEXT "Sends",IDC_STATIC,130,34,20,8
LTEXT "Send Bytes",IDC_STATIC,130,44,37,8
RTEXT "Static",IDC_ZRECEIVES_V,182,11,54,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZRECEIVEBYTES_V,198,23,38,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZSENDS_V,182,34,54,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZSENDBYTES_V,198,44,38,8,SS_ENDELLIPSIS
GROUPBOX "Disk I/O",IDC_STATIC,0,0,145,58
LTEXT "Reads Delta",IDC_STATIC,8,11,40,8
LTEXT "Read Bytes Delta",IDC_STATIC,8,22,56,8
LTEXT "Writes Delta",IDC_STATIC,8,33,40,8
LTEXT "Write Bytes Delta",IDC_STATIC,8,44,57,8
RTEXT "Static",IDC_ZREADSDELTA_V,84,11,54,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZREADBYTESDELTA_V,78,22,60,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZWRITESDELTA_V,84,33,54,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZWRITEBYTESDELTA_V,82,44,56,8,SS_ENDELLIPSIS
END
IDD_OPTIONS DIALOGEX 0, 0, 215, 77
@@ -337,6 +317,41 @@ BEGIN
RTEXT "Static",IDC_ZTOTALNODES_V,205,40,38,8,SS_ENDELLIPSIS
END
IDD_SYSINFO_DISK DIALOGEX 0, 0, 315, 186
STYLE DS_SETFONT | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
CAPTION "Disk"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
LTEXT "Disk",IDC_TITLE,0,0,72,21
LTEXT "Panel layout",IDC_LAYOUT,0,124,315,61,NOT WS_VISIBLE
LTEXT "Graph layout",IDC_GRAPH_LAYOUT,0,22,315,99,NOT WS_VISIBLE
END
IDD_SYSINFO_NETPANEL DIALOGEX 0, 0, 145, 58
STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD | WS_SYSMENU
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
GROUPBOX "Network I/O",IDC_STATIC,0,0,145,58
LTEXT "Receives Delta",IDC_STATIC,8,11,48,8
LTEXT "Receive Bytes Delta",IDC_STATIC,8,22,65,8
LTEXT "Sends Delta",IDC_STATIC,8,33,39,8
LTEXT "Send Bytes Delta",IDC_STATIC,8,44,56,8
RTEXT "Static",IDC_ZRECEIVESDELTA_V,84,11,54,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZRECEIVEBYTESDELTA_V,78,22,60,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZSENDSDELTA_V,84,33,54,8,SS_ENDELLIPSIS
RTEXT "Static",IDC_ZSENDBYTESDELTA_V,82,44,56,8,SS_ENDELLIPSIS
END
IDD_SYSINFO_NET DIALOGEX 0, 0, 315, 186
STYLE DS_SETFONT | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
CAPTION "Network"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
LTEXT "Network",IDC_TITLE,0,0,72,21
LTEXT "Panel layout",IDC_LAYOUT,0,124,315,61,NOT WS_VISIBLE
LTEXT "Graph layout",IDC_GRAPH_LAYOUT,0,22,315,99,NOT WS_VISIBLE
END
/////////////////////////////////////////////////////////////////////////////
//
@@ -394,15 +409,7 @@ BEGIN
BOTTOMMARGIN, 253
END
IDD_SYSDISKNET, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 354
TOPMARGIN, 7
BOTTOMMARGIN, 214
END
IDD_SYSDISKNET_PANEL, DIALOG
IDD_SYSINFO_DISKPANEL, DIALOG
BEGIN
END
@@ -437,6 +444,18 @@ BEGIN
TOPMARGIN, 7
BOTTOMMARGIN, 253
END
IDD_SYSINFO_DISK, DIALOG
BEGIN
END
IDD_SYSINFO_NETPANEL, DIALOG
BEGIN
END
IDD_SYSINFO_NET, DIALOG
BEGIN
END
END
#endif // APSTUDIO_INVOKED
@@ -184,7 +184,6 @@
<ClCompile Include="etwprprp.c" />
<ClCompile Include="etwsys.c" />
<ClCompile Include="main.c" />
<ClCompile Include="memlists.c" />
<ClCompile Include="modsrv.c" />
<ClCompile Include="objprp.c" />
<ClCompile Include="options.c" />
@@ -197,8 +196,10 @@
<ClInclude Include="d3dkmt.h" />
<ClInclude Include="disktabp.h" />
<ClInclude Include="etwmon.h" />
<ClInclude Include="etwsys.h" />
<ClInclude Include="exttools.h" />
<ClInclude Include="gpumon.h" />
<ClInclude Include="gpusys.h" />
<ClInclude Include="resource.h" />
</ItemGroup>
<ItemGroup>
@@ -33,9 +33,6 @@
<ClCompile Include="etwmon.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="memlists.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="etwstat.c">
<Filter>Source Files</Filter>
</ClCompile>
@@ -95,6 +92,12 @@
<ClInclude Include="gpumon.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="gpusys.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="etwsys.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="CHANGELOG.txt" />
+10
View File
@@ -55,6 +55,11 @@ PH_UINT32_DELTA EtDiskWriteDelta;
PH_UINT32_DELTA EtNetworkReceiveDelta;
PH_UINT32_DELTA EtNetworkSendDelta;
PH_UINT32_DELTA EtDiskReadCountDelta;
PH_UINT32_DELTA EtDiskWriteCountDelta;
PH_UINT32_DELTA EtNetworkReceiveCountDelta;
PH_UINT32_DELTA EtNetworkSendCountDelta;
PH_CIRCULAR_BUFFER_ULONG EtDiskReadHistory;
PH_CIRCULAR_BUFFER_ULONG EtDiskWriteHistory;
PH_CIRCULAR_BUFFER_ULONG EtNetworkReceiveHistory;
@@ -237,6 +242,11 @@ static VOID NTAPI ProcessesUpdatedCallback(
PhUpdateDelta(&EtNetworkReceiveDelta, EtpNetworkReceiveRaw);
PhUpdateDelta(&EtNetworkSendDelta, EtpNetworkSendRaw);
PhUpdateDelta(&EtDiskReadCountDelta, EtDiskReadCount);
PhUpdateDelta(&EtDiskWriteCountDelta, EtDiskWriteCount);
PhUpdateDelta(&EtNetworkReceiveCountDelta, EtNetworkReceiveCount);
PhUpdateDelta(&EtNetworkSendCountDelta, EtNetworkSendCount);
// Update per-process statistics.
// Note: no lock is needed because we only ever modify the list on this same thread.
File diff suppressed because it is too large Load Diff
+90
View File
@@ -0,0 +1,90 @@
#ifndef ETWSYS_H
#define ETWSYS_H
// Disk section
BOOLEAN EtpDiskSectionCallback(
__in PPH_SYSINFO_SECTION Section,
__in PH_SYSINFO_SECTION_MESSAGE Message,
__in_opt PVOID Parameter1,
__in_opt PVOID Parameter2
);
INT_PTR CALLBACK EtpDiskDialogProc(
__in HWND hwndDlg,
__in UINT uMsg,
__in WPARAM wParam,
__in LPARAM lParam
);
INT_PTR CALLBACK EtpDiskPanelDialogProc(
__in HWND hwndDlg,
__in UINT uMsg,
__in WPARAM wParam,
__in LPARAM lParam
);
VOID EtpNotifyDiskGraph(
__in NMHDR *Header
);
VOID EtpUpdateDiskGraph(
VOID
);
VOID EtpUpdateDiskPanel(
VOID
);
PPH_PROCESS_RECORD EtpReferenceMaxDiskRecord(
__in LONG Index
);
PPH_STRING EtpGetMaxDiskString(
__in LONG Index
);
// Network section
BOOLEAN EtpNetworkSectionCallback(
__in PPH_SYSINFO_SECTION Section,
__in PH_SYSINFO_SECTION_MESSAGE Message,
__in_opt PVOID Parameter1,
__in_opt PVOID Parameter2
);
INT_PTR CALLBACK EtpNetworkDialogProc(
__in HWND hwndDlg,
__in UINT uMsg,
__in WPARAM wParam,
__in LPARAM lParam
);
INT_PTR CALLBACK EtpNetworkPanelDialogProc(
__in HWND hwndDlg,
__in UINT uMsg,
__in WPARAM wParam,
__in LPARAM lParam
);
VOID EtpNotifyNetworkGraph(
__in NMHDR *Header
);
VOID EtpUpdateNetworkGraph(
VOID
);
VOID EtpUpdateNetworkPanel(
VOID
);
PPH_PROCESS_RECORD EtpReferenceMaxNetworkRecord(
__in LONG Index
);
PPH_STRING EtpGetMaxNetworkString(
__in LONG Index
);
#endif
+15 -15
View File
@@ -15,13 +15,6 @@ extern HWND NetworkTreeNewHandle;
#define SETTING_NAME_DISK_TREE_LIST_SORT (SETTING_PREFIX L"DiskTreeListSort")
#define SETTING_NAME_ENABLE_ETW_MONITOR (SETTING_PREFIX L"EnableEtwMonitor")
#define SETTING_NAME_ENABLE_GPU_MONITOR (SETTING_PREFIX L"EnableGpuMonitor")
#define SETTING_NAME_ETWSYS_ALWAYS_ON_TOP (SETTING_PREFIX L"EtwSysAlwaysOnTop")
#define SETTING_NAME_ETWSYS_WINDOW_POSITION (SETTING_PREFIX L"EtwSysWindowPosition")
#define SETTING_NAME_ETWSYS_WINDOW_SIZE (SETTING_PREFIX L"EtwSysWindowSize")
#define SETTING_NAME_GPUSYS_ALWAYS_ON_TOP (SETTING_PREFIX L"GpuSysAlwaysOnTop")
#define SETTING_NAME_GPUSYS_WINDOW_POSITION (SETTING_PREFIX L"GpuSysWindowPosition")
#define SETTING_NAME_GPUSYS_WINDOW_SIZE (SETTING_PREFIX L"GpuSysWindowSize")
#define SETTING_NAME_MEMORY_LISTS_WINDOW_POSITION (SETTING_PREFIX L"MemoryListsWindowPosition")
// Process icon
@@ -265,6 +258,11 @@ extern PH_UINT32_DELTA EtDiskWriteDelta;
extern PH_UINT32_DELTA EtNetworkReceiveDelta;
extern PH_UINT32_DELTA EtNetworkSendDelta;
extern PH_UINT32_DELTA EtDiskReadCountDelta;
extern PH_UINT32_DELTA EtDiskWriteCountDelta;
extern PH_UINT32_DELTA EtNetworkReceiveCountDelta;
extern PH_UINT32_DELTA EtNetworkSendCountDelta;
extern PH_CIRCULAR_BUFFER_ULONG EtDiskReadHistory;
extern PH_CIRCULAR_BUFFER_ULONG EtDiskWriteHistory;
extern PH_CIRCULAR_BUFFER_ULONG EtNetworkReceiveHistory;
@@ -397,6 +395,14 @@ typedef struct _ET_PROCESS_GPU_STATISTICS
ULONG64 ContextSwitches;
} ET_PROCESS_GPU_STATISTICS, *PET_PROCESS_GPU_STATISTICS;
ULONG EtGetGpuAdapterCount(
VOID
);
PPH_STRING EtGetGpuAdapterDescription(
__in ULONG Index
);
VOID EtQueryProcessGpuStatistics(
__in HANDLE ProcessHandle,
__out PET_PROCESS_GPU_STATISTICS Statistics
@@ -432,8 +438,8 @@ ET_FIREWALL_STATUS EtQueryFirewallStatus(
// etwsys
VOID EtShowEtwSystemDialog(
VOID
VOID EtEtwSystemInformationInitializing(
__in PPH_PLUGIN_SYSINFO_POINTERS Pointers
);
// gpusys
@@ -442,12 +448,6 @@ VOID EtGpuSystemInformationInitializing(
__in PPH_PLUGIN_SYSINFO_POINTERS Pointers
);
// memlists
VOID EtShowMemoryListsDialog(
VOID
);
// modsrv
VOID EtShowModuleServicesDialog(
+86 -2
View File
@@ -34,6 +34,7 @@ static _SetupDiGetClassDevsW SetupDiGetClassDevsW_I;
static _SetupDiDestroyDeviceInfoList SetupDiDestroyDeviceInfoList_I;
static _SetupDiEnumDeviceInterfaces SetupDiEnumDeviceInterfaces_I;
static _SetupDiGetDeviceInterfaceDetailW SetupDiGetDeviceInterfaceDetailW_I;
static _SetupDiGetDeviceRegistryPropertyW SetupDiGetDeviceRegistryPropertyW_I;
BOOLEAN EtGpuEnabled;
static PPH_LIST EtpGpuAdapterList;
@@ -80,6 +81,7 @@ VOID EtGpuMonitorInitialization(
SetupDiDestroyDeviceInfoList_I = (PVOID)GetProcAddress(setupapiHandle, "SetupDiDestroyDeviceInfoList");
SetupDiEnumDeviceInterfaces_I = (PVOID)GetProcAddress(setupapiHandle, "SetupDiEnumDeviceInterfaces");
SetupDiGetDeviceInterfaceDetailW_I = (PVOID)GetProcAddress(setupapiHandle, "SetupDiGetDeviceInterfaceDetailW");
SetupDiGetDeviceRegistryPropertyW_I = (PVOID)GetProcAddress(setupapiHandle, "SetupDiGetDeviceRegistryPropertyW");
}
if (
@@ -128,6 +130,7 @@ static BOOLEAN EtpInitializeD3DStatistics(
ULONG memberIndex;
SP_DEVICE_INTERFACE_DATA deviceInterfaceData;
PSP_DEVICE_INTERFACE_DETAIL_DATA detailData;
SP_DEVINFO_DATA deviceInfoData;
ULONG detailDataSize;
D3DKMT_OPENADAPTERFROMDEVICENAME openAdapterFromDeviceName;
D3DKMT_QUERYSTATISTICS queryStatistics;
@@ -145,8 +148,9 @@ static BOOLEAN EtpInitializeD3DStatistics(
detailDataSize = 0x100;
detailData = PhAllocate(detailDataSize);
detailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
deviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
if (!(result = SetupDiGetDeviceInterfaceDetailW_I(deviceInfoSet, &deviceInterfaceData, detailData, detailDataSize, &detailDataSize, NULL)) &&
if (!(result = SetupDiGetDeviceInterfaceDetailW_I(deviceInfoSet, &deviceInterfaceData, detailData, detailDataSize, &detailDataSize, &deviceInfoData)) &&
GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
PhFree(detailData);
@@ -155,7 +159,7 @@ static BOOLEAN EtpInitializeD3DStatistics(
if (detailDataSize >= sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA))
detailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
result = SetupDiGetDeviceInterfaceDetailW_I(deviceInfoSet, &deviceInterfaceData, detailData, detailDataSize, &detailDataSize, NULL);
result = SetupDiGetDeviceInterfaceDetailW_I(deviceInfoSet, &deviceInterfaceData, detailData, detailDataSize, &detailDataSize, &deviceInfoData);
}
if (result)
@@ -175,6 +179,7 @@ static BOOLEAN EtpInitializeD3DStatistics(
gpuAdapter = PhAllocate(sizeof(ETP_GPU_ADAPTER));
gpuAdapter->AdapterLuid = openAdapterFromDeviceName.AdapterLuid;
gpuAdapter->Description = EtpQueryDeviceDescription(deviceInfoSet, &deviceInfoData);
gpuAdapter->NodeCount = queryStatistics.QueryResult.AdapterInformation.NodeCount;
gpuAdapter->SegmentCount = queryStatistics.QueryResult.AdapterInformation.NbSegments;
gpuAdapter->ApertureBitMap = 0;
@@ -232,6 +237,56 @@ static BOOLEAN EtpInitializeD3DStatistics(
return TRUE;
}
static PPH_STRING EtpQueryDeviceDescription(
__in HDEVINFO DeviceInfoSet,
__in PSP_DEVINFO_DATA DeviceInfoData
)
{
LOGICAL result;
PPH_STRING string;
ULONG bufferSize;
if (!SetupDiGetDeviceRegistryPropertyW_I)
return NULL;
bufferSize = 0x40;
string = PhCreateStringEx(NULL, bufferSize);
if (!(result = SetupDiGetDeviceRegistryPropertyW_I(
DeviceInfoSet,
DeviceInfoData,
SPDRP_DEVICEDESC,
NULL,
(PBYTE)string->Buffer,
bufferSize,
&bufferSize
)) && GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
PhDereferenceObject(string);
string = PhCreateStringEx(NULL, bufferSize);
result = SetupDiGetDeviceRegistryPropertyW_I(
DeviceInfoSet,
DeviceInfoData,
SPDRP_DEVICEDESC,
NULL,
(PBYTE)string->Buffer,
bufferSize,
NULL
);
}
if (!result)
{
PhDereferenceObject(string);
return NULL;
}
PhTrimToNullTerminatorString(string);
return string;
}
static VOID EtpUpdateSegmentInformation(
__in_opt PET_PROCESS_BLOCK Block
)
@@ -467,6 +522,35 @@ static VOID NTAPI ProcessesUpdatedCallback(
runCount++;
}
ULONG EtGetGpuAdapterCount(
VOID
)
{
return EtpGpuAdapterList->Count;
}
PPH_STRING EtGetGpuAdapterDescription(
__in ULONG Index
)
{
PPH_STRING description;
if (Index >= EtpGpuAdapterList->Count)
return NULL;
description = ((PETP_GPU_ADAPTER)EtpGpuAdapterList->Items[Index])->Description;
if (description)
{
PhReferenceObject(description);
return description;
}
else
{
return NULL;
}
}
VOID EtQueryProcessGpuStatistics(
__in HANDLE ProcessHandle,
__out PET_PROCESS_GPU_STATISTICS Statistics
+16
View File
@@ -31,11 +31,22 @@ typedef BOOL (WINAPI *_SetupDiGetDeviceInterfaceDetailW)(
__out_opt PSP_DEVINFO_DATA DeviceInfoData
);
typedef BOOL (WINAPI *_SetupDiGetDeviceRegistryPropertyW)(
__in HDEVINFO DeviceInfoSet,
__in PSP_DEVINFO_DATA DeviceInfoData,
__in DWORD Property,
__out_opt PDWORD PropertyRegDataType,
__out_opt PBYTE PropertyBuffer,
__in DWORD PropertyBufferSize,
__out_opt PDWORD RequiredSize
);
// Structures
typedef struct _ETP_GPU_ADAPTER
{
LUID AdapterLuid;
PPH_STRING Description;
ULONG SegmentCount;
ULONG NodeCount;
@@ -48,6 +59,11 @@ BOOLEAN EtpInitializeD3DStatistics(
VOID
);
PPH_STRING EtpQueryDeviceDescription(
__in HDEVINFO DeviceInfoSet,
__in PSP_DEVINFO_DATA DeviceInfoData
);
VOID NTAPI ProcessesUpdatedCallback(
__in_opt PVOID Parameter,
__in_opt PVOID Context
+9 -76
View File
@@ -23,81 +23,7 @@
#include "exttools.h"
#include "resource.h"
#include <windowsx.h>
#define ET_GPU_PADDING 3
BOOLEAN EtpGpuSectionCallback(
__in PPH_SYSINFO_SECTION Section,
__in PH_SYSINFO_SECTION_MESSAGE Message,
__in_opt PVOID Parameter1,
__in_opt PVOID Parameter2
);
VOID EtpInitializeGpuDialog(
VOID
);
VOID EtpUninitializeGpuDialog(
VOID
);
VOID EtpTickGpuDialog(
VOID
);
INT_PTR CALLBACK EtpGpuDialogProc(
__in HWND hwndDlg,
__in UINT uMsg,
__in WPARAM wParam,
__in LPARAM lParam
);
INT_PTR CALLBACK EtpGpuPanelDialogProc(
__in HWND hwndDlg,
__in UINT uMsg,
__in WPARAM wParam,
__in LPARAM lParam
);
VOID EtpCreateGpuGraphs(
VOID
);
VOID EtpLayoutGpuGraphs(
VOID
);
VOID EtpNotifyGpuGraph(
__in NMHDR *Header
);
VOID EtpNotifyDedicatedGraph(
__in NMHDR *Header
);
VOID EtpNotifySharedGraph(
__in NMHDR *Header
);
VOID EtpUpdateGpuGraphs(
VOID
);
VOID EtpUpdateGpuPanel(
VOID
);
PPH_PROCESS_RECORD EtpReferenceMaxNodeRecord(
__in LONG Index
);
PPH_STRING EtpGetMaxNodeString(
__in LONG Index
);
PPH_STRING EtpGetGpuNameString(
VOID
);
#include "gpusys.h"
static PPH_SYSINFO_SECTION GpuSection;
static HWND GpuDialog;
@@ -749,5 +675,12 @@ PPH_STRING EtpGetGpuNameString(
VOID
)
{
return PhCreateString(L"TODO");
PPH_STRING description;
description = EtGetGpuAdapterDescription(0);
if (!description)
description = PhReferenceEmptyString();
return description;
}
+79
View File
@@ -0,0 +1,79 @@
#ifndef GPUSYS_H
#define GPUSYS_H
#define ET_GPU_PADDING 3
BOOLEAN EtpGpuSectionCallback(
__in PPH_SYSINFO_SECTION Section,
__in PH_SYSINFO_SECTION_MESSAGE Message,
__in_opt PVOID Parameter1,
__in_opt PVOID Parameter2
);
VOID EtpInitializeGpuDialog(
VOID
);
VOID EtpUninitializeGpuDialog(
VOID
);
VOID EtpTickGpuDialog(
VOID
);
INT_PTR CALLBACK EtpGpuDialogProc(
__in HWND hwndDlg,
__in UINT uMsg,
__in WPARAM wParam,
__in LPARAM lParam
);
INT_PTR CALLBACK EtpGpuPanelDialogProc(
__in HWND hwndDlg,
__in UINT uMsg,
__in WPARAM wParam,
__in LPARAM lParam
);
VOID EtpCreateGpuGraphs(
VOID
);
VOID EtpLayoutGpuGraphs(
VOID
);
VOID EtpNotifyGpuGraph(
__in NMHDR *Header
);
VOID EtpNotifyDedicatedGraph(
__in NMHDR *Header
);
VOID EtpNotifySharedGraph(
__in NMHDR *Header
);
VOID EtpUpdateGpuGraphs(
VOID
);
VOID EtpUpdateGpuPanel(
VOID
);
PPH_PROCESS_RECORD EtpReferenceMaxNodeRecord(
__in LONG Index
);
PPH_STRING EtpGetMaxNodeString(
__in LONG Index
);
PPH_STRING EtpGetGpuNameString(
VOID
);
#endif
+3 -23
View File
@@ -296,14 +296,7 @@ LOGICAL DllMain(
{ StringSettingType, SETTING_NAME_DISK_TREE_LIST_COLUMNS, L"" },
{ IntegerPairSettingType, SETTING_NAME_DISK_TREE_LIST_SORT, L"4,2" }, // 4, DescendingSortOrder
{ IntegerSettingType, SETTING_NAME_ENABLE_ETW_MONITOR, L"1" },
{ IntegerSettingType, SETTING_NAME_ENABLE_GPU_MONITOR, L"1" },
{ IntegerSettingType, SETTING_NAME_ETWSYS_ALWAYS_ON_TOP, L"0" },
{ IntegerPairSettingType, SETTING_NAME_ETWSYS_WINDOW_POSITION, L"400,400" },
{ IntegerPairSettingType, SETTING_NAME_ETWSYS_WINDOW_SIZE, L"500,400" },
{ IntegerPairSettingType, SETTING_NAME_MEMORY_LISTS_WINDOW_POSITION, L"400,400" },
{ IntegerSettingType, SETTING_NAME_GPUSYS_ALWAYS_ON_TOP, L"0" },
{ IntegerPairSettingType, SETTING_NAME_GPUSYS_WINDOW_POSITION, L"400,400" },
{ IntegerPairSettingType, SETTING_NAME_GPUSYS_WINDOW_SIZE, L"500,500" }
{ IntegerSettingType, SETTING_NAME_ENABLE_GPU_MONITOR, L"1" }
};
PhAddSettings(settings, sizeof(settings) / sizeof(PH_SETTING_CREATE));
@@ -350,16 +343,6 @@ VOID NTAPI MenuItemCallback(
switch (menuItem->Id)
{
case ID_VIEW_DISKANDNETWORK:
{
EtShowEtwSystemDialog();
}
break;
case ID_VIEW_MEMORYLISTS:
{
EtShowMemoryListsDialog();
}
break;
case ID_PROCESS_UNLOADEDMODULES:
{
EtShowUnloadedDllsDialog(PhMainWndHandle, menuItem->Context);
@@ -405,13 +388,8 @@ VOID NTAPI MainWindowShowingCallback(
__in_opt PVOID Context
)
{
PhPluginAddMenuItem(PluginInstance, PH_MENU_ITEM_LOCATION_VIEW, L"System Information", ID_VIEW_MEMORYLISTS, L"Memory Lists", NULL);
if (EtEtwEnabled)
{
// This will get inserted before GPU Information.
PhPluginAddMenuItem(PluginInstance, PH_MENU_ITEM_LOCATION_VIEW, L"System Information", ID_VIEW_DISKANDNETWORK, L"Disk and Network", NULL);
EtInitializeDiskTab();
}
}
@@ -560,6 +538,8 @@ VOID NTAPI SystemInformationInitializingCallback(
{
if (EtGpuEnabled)
EtGpuSystemInformationInitializing(Parameter);
if (EtEtwEnabled)
EtEtwSystemInformationInitializing(Parameter);
}
static VOID NTAPI ProcessesUpdatedCallback(
-267
View File
@@ -1,267 +0,0 @@
/*
* Process Hacker Extended Tools -
* memory list information
*
* Copyright (C) 2010-2011 wj32
*
* This file is part of Process Hacker.
*
* Process Hacker is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Process Hacker is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Process Hacker. If not, see <http://www.gnu.org/licenses/>.
*/
#include "exttools.h"
#include "resource.h"
#define MSG_UPDATE (WM_APP + 1)
INT_PTR CALLBACK EtpMemoryListsDlgProc(
__in HWND hwndDlg,
__in UINT uMsg,
__in WPARAM wParam,
__in LPARAM lParam
);
HWND EtpMemoryListsWindowHandle = NULL;
static PH_CALLBACK_REGISTRATION ProcessesUpdatedRegistration;
VOID EtShowMemoryListsDialog(
VOID
)
{
if (!EtpMemoryListsWindowHandle)
{
EtpMemoryListsWindowHandle = CreateDialog(
PluginInstance->DllBase,
MAKEINTRESOURCE(IDD_MEMLISTS),
PhMainWndHandle,
EtpMemoryListsDlgProc
);
}
if (!IsWindowVisible(EtpMemoryListsWindowHandle))
ShowWindow(EtpMemoryListsWindowHandle, SW_SHOW);
else if (IsIconic(EtpMemoryListsWindowHandle))
ShowWindow(EtpMemoryListsWindowHandle, SW_RESTORE);
else
SetForegroundWindow(EtpMemoryListsWindowHandle);
}
VOID NTAPI EtpProcessesUpdatedCallback(
__in_opt PVOID Parameter,
__in_opt PVOID Context
)
{
PostMessage(EtpMemoryListsWindowHandle, MSG_UPDATE, 0, 0);
}
static VOID EtpUpdateMemoryListInfo(
__in HWND hwndDlg
)
{
SYSTEM_MEMORY_LIST_INFORMATION memoryListInfo;
if (NT_SUCCESS(NtQuerySystemInformation(
SystemMemoryListInformation,
&memoryListInfo,
sizeof(SYSTEM_MEMORY_LIST_INFORMATION),
NULL
)))
{
ULONG_PTR standbyPageCount;
ULONG_PTR repurposedPageCount;
ULONG i;
standbyPageCount = 0;
repurposedPageCount = 0;
for (i = 0; i < 8; i++)
{
standbyPageCount += memoryListInfo.PageCountByPriority[i];
repurposedPageCount += memoryListInfo.RepurposedPagesByPriority[i];
}
SetDlgItemText(hwndDlg, IDC_ZZEROED_V, PhaFormatSize((ULONG64)memoryListInfo.ZeroPageCount * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZFREE_V, PhaFormatSize((ULONG64)memoryListInfo.FreePageCount * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZMODIFIED_V, PhaFormatSize((ULONG64)memoryListInfo.ModifiedPageCount * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZMODIFIEDNOWRITE_V, PhaFormatSize((ULONG64)memoryListInfo.ModifiedNoWritePageCount * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZBAD_V, PhaFormatSize((ULONG64)memoryListInfo.BadPageCount * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZSTANDBY_V, PhaFormatSize((ULONG64)standbyPageCount * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZSTANDBY0_V, PhaFormatSize((ULONG64)memoryListInfo.PageCountByPriority[0] * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZSTANDBY1_V, PhaFormatSize((ULONG64)memoryListInfo.PageCountByPriority[1] * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZSTANDBY2_V, PhaFormatSize((ULONG64)memoryListInfo.PageCountByPriority[2] * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZSTANDBY3_V, PhaFormatSize((ULONG64)memoryListInfo.PageCountByPriority[3] * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZSTANDBY4_V, PhaFormatSize((ULONG64)memoryListInfo.PageCountByPriority[4] * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZSTANDBY5_V, PhaFormatSize((ULONG64)memoryListInfo.PageCountByPriority[5] * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZSTANDBY6_V, PhaFormatSize((ULONG64)memoryListInfo.PageCountByPriority[6] * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZSTANDBY7_V, PhaFormatSize((ULONG64)memoryListInfo.PageCountByPriority[7] * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZREPURPOSED_V, PhaFormatSize((ULONG64)repurposedPageCount * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZREPURPOSED0_V, PhaFormatSize((ULONG64)memoryListInfo.RepurposedPagesByPriority[0] * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZREPURPOSED1_V, PhaFormatSize((ULONG64)memoryListInfo.RepurposedPagesByPriority[1] * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZREPURPOSED2_V, PhaFormatSize((ULONG64)memoryListInfo.RepurposedPagesByPriority[2] * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZREPURPOSED3_V, PhaFormatSize((ULONG64)memoryListInfo.RepurposedPagesByPriority[3] * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZREPURPOSED4_V, PhaFormatSize((ULONG64)memoryListInfo.RepurposedPagesByPriority[4] * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZREPURPOSED5_V, PhaFormatSize((ULONG64)memoryListInfo.RepurposedPagesByPriority[5] * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZREPURPOSED6_V, PhaFormatSize((ULONG64)memoryListInfo.RepurposedPagesByPriority[6] * PAGE_SIZE, -1)->Buffer);
SetDlgItemText(hwndDlg, IDC_ZREPURPOSED7_V, PhaFormatSize((ULONG64)memoryListInfo.RepurposedPagesByPriority[7] * PAGE_SIZE, -1)->Buffer);
}
else
{
SetDlgItemText(hwndDlg, IDC_ZZEROED_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZFREE_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZMODIFIED_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZMODIFIEDNOWRITE_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZBAD_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZSTANDBY_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZSTANDBY0_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZSTANDBY1_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZSTANDBY2_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZSTANDBY3_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZSTANDBY4_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZSTANDBY5_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZSTANDBY6_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZSTANDBY7_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZREPURPOSED_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZREPURPOSED0_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZREPURPOSED1_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZREPURPOSED2_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZREPURPOSED3_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZREPURPOSED4_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZREPURPOSED5_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZREPURPOSED6_V, L"Unknown");
SetDlgItemText(hwndDlg, IDC_ZREPURPOSED7_V, L"Unknown");
}
}
INT_PTR CALLBACK EtpMemoryListsDlgProc(
__in HWND hwndDlg,
__in UINT uMsg,
__in WPARAM wParam,
__in LPARAM lParam
)
{
switch (uMsg)
{
case WM_INITDIALOG:
{
PhRegisterCallback(&PhProcessesUpdatedEvent, EtpProcessesUpdatedCallback, NULL, &ProcessesUpdatedRegistration);
EtpUpdateMemoryListInfo(hwndDlg);
PhLoadWindowPlacementFromSetting(SETTING_NAME_MEMORY_LISTS_WINDOW_POSITION, NULL, hwndDlg);
PhRegisterDialog(hwndDlg);
}
break;
case WM_DESTROY:
{
PhUnregisterDialog(hwndDlg);
PhSaveWindowPlacementToSetting(SETTING_NAME_MEMORY_LISTS_WINDOW_POSITION, NULL, hwndDlg);
PhUnregisterCallback(&PhProcessesUpdatedEvent, &ProcessesUpdatedRegistration);
EtpMemoryListsWindowHandle = NULL;
}
break;
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case IDCANCEL:
case IDOK:
DestroyWindow(hwndDlg);
break;
case IDC_EMPTY:
{
HMENU menu;
HMENU subMenu;
RECT buttonRect;
POINT point;
UINT selectedItem;
SYSTEM_MEMORY_LIST_COMMAND command = -1;
menu = LoadMenu(PluginInstance->DllBase, MAKEINTRESOURCE(IDR_EMPTYMEMLISTS));
subMenu = GetSubMenu(menu, 0);
GetClientRect(GetDlgItem(hwndDlg, IDC_EMPTY), &buttonRect);
point.x = 0;
point.y = buttonRect.bottom;
ClientToScreen(GetDlgItem(hwndDlg, IDC_EMPTY), &point);
selectedItem = PhShowContextMenu2(
hwndDlg,
GetDlgItem(hwndDlg, IDC_EMPTY),
subMenu,
point
);
switch (selectedItem)
{
case ID_EMPTY_EMPTYWORKINGSETS:
command = MemoryEmptyWorkingSets;
break;
case ID_EMPTY_EMPTYMODIFIEDPAGELIST:
command = MemoryFlushModifiedList;
break;
case ID_EMPTY_EMPTYSTANDBYLIST:
command = MemoryPurgeStandbyList;
break;
case ID_EMPTY_EMPTYPRIORITY0STANDBYLIST:
command = MemoryPurgeLowPriorityStandbyList;
break;
}
if (command != -1)
{
NTSTATUS status;
PVOID returnedState;
ULONG privilege = SE_PROF_SINGLE_PROCESS_PRIVILEGE;
if (NT_SUCCESS(status = RtlAcquirePrivilege(
&privilege,
1,
0,
&returnedState
)))
{
status = NtSetSystemInformation(
SystemMemoryListInformation,
&command,
sizeof(SYSTEM_MEMORY_LIST_COMMAND)
);
RtlReleasePrivilege(returnedState);
}
if (status == STATUS_PRIVILEGE_NOT_HELD)
{
PhShowError(hwndDlg, L"Process Hacker must be elevated to execute this command.");
}
else if (!NT_SUCCESS(status))
{
PhShowStatus(hwndDlg, L"Unable to execute the memory list command", status, 0);
}
}
DestroyMenu(menu);
}
break;
}
}
break;
case MSG_UPDATE:
{
EtpUpdateMemoryListInfo(hwndDlg);
}
break;
}
return FALSE;
}
+9 -5
View File
@@ -15,10 +15,10 @@
#define IDD_DIALOG1 106
#define IDD_PROCDISKNET 106
#define IDC_NETWORK 106
#define IDD_SYSDISKNET 107
#define ID_VIEW_DISKANDNETWORK 107
#define IDD_SYSDISKNET_PANEL 108
#define ID_PROCESS_WSWATCH 108
#define IDD_SYSINFO_DISKPANEL 108
#define IDD_OPTIONS 109
#define IDC_GPU 109
#define IDD_WSWATCH 110
@@ -33,6 +33,9 @@
#define ID_VIEW_GPUINFORMATION 112
#define IDD_SYSINFO_GPUPANEL 112
#define IDD_PROCGPU 113
#define IDD_SYSINFO_DISK 114
#define IDD_SYSINFO_NETPANEL 116
#define IDD_SYSINFO_NET 117
#define IDC_LIST 1001
#define IDC_REFRESH 1002
#define IDC_SEQUENCENUMBER 1003
@@ -67,9 +70,6 @@
#define IDC_ZSENDS_V 1032
#define IDC_ZSENDBYTES_V 1033
#define IDC_ZSENDBYTESDELTA_V 1034
#define IDC_GROUPDISK 1035
#define IDC_GROUPNETWORK 1036
#define IDC_ALWAYSONTOP 1037
#define IDC_ENABLEETW 1038
#define IDC_ENABLEETWMONITOR 1038
#define IDC_ENABLE 1039
@@ -115,6 +115,10 @@
#define IDC_GPU_L 1079
#define IDC_DEDICATED_L 1080
#define IDC_SHARED_L 1081
#define IDC_ZRECEIVESDELTA_V 1082
#define IDC_ZSENDSDELTA_V 1083
#define IDC_ZWRITESDELTA_V 1084
#define IDC_ZREADSDELTA_V 1085
#define ID_EMPTY_EMPTYWORKINGSETS 40001
#define ID_EMPTY_EMPTYMODIFIEDPAGELIST 40002
#define ID_EMPTY_EMPTYSTANDBYLIST 40003
@@ -130,7 +134,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 113
#define _APS_NEXT_COMMAND_VALUE 40009
#define _APS_NEXT_CONTROL_VALUE 1082
#define _APS_NEXT_CONTROL_VALUE 1086
#define _APS_NEXT_SYMED_VALUE 113
#endif
#endif