Skip to content

Commit 1f39694

Browse files
committed
Add (experimental) EventQueue support, Improve process/service/network tab performance, Remove legacy process/service providor hacks
1 parent 4b8f8b4 commit 1f39694

File tree

13 files changed

+236
-399
lines changed

13 files changed

+236
-399
lines changed

ProcessHacker/hidnproc.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -565,8 +565,8 @@ static PPH_PROCESS_ITEM PhpCreateProcessItemForHiddenProcess(
565565
processItem = PhCreateProcessItem(Entry->ProcessId);
566566

567567
// Mark the process as terminated if necessary.
568-
if (Entry->Type == TerminatedProcess)
569-
processItem->State |= PH_PROCESS_ITEM_REMOVED;
568+
//if (Entry->Type == TerminatedProcess)
569+
// processItem->State |= PH_PROCESS_ITEM_REMOVED;
570570

571571
// We need a process record. Just use the record of System Idle Process.
572572
if (idleProcessItem = PhReferenceProcessItem(SYSTEM_IDLE_PROCESS_ID))

ProcessHacker/include/mainwnd.h

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,19 @@ extern BOOLEAN PhMainWndExiting;
88
#define WM_PH_ACTIVATE (WM_APP + 99)
99
#define PH_ACTIVATE_REPLY 0x1119
1010

11-
#define WM_PH_PROCESS_ADDED (WM_APP + 101)
12-
#define WM_PH_PROCESS_MODIFIED (WM_APP + 102)
13-
#define WM_PH_PROCESS_REMOVED (WM_APP + 103)
11+
//#define WM_PH_PROCESS_ADDED_DEPRECATED (WM_APP + 101)
12+
//#define WM_PH_PROCESS_MODIFIED_DEPRECATED (WM_APP + 102)
13+
//#define WM_PH_PROCESS_REMOVED_DEPRECATED (WM_APP + 103)
1414
#define WM_PH_PROCESSES_UPDATED (WM_APP + 104)
1515

16-
#define WM_PH_SERVICE_ADDED (WM_APP + 105)
17-
#define WM_PH_SERVICE_MODIFIED (WM_APP + 106)
18-
#define WM_PH_SERVICE_REMOVED (WM_APP + 107)
16+
//#define WM_PH_SERVICE_ADDED_DEPRECATED (WM_APP + 105)
17+
//#define WM_PH_SERVICE_MODIFIED_DEPRECATED (WM_APP + 106)
18+
//#define WM_PH_SERVICE_REMOVED_DEPRECATED (WM_APP + 107)
1919
#define WM_PH_SERVICES_UPDATED (WM_APP + 108)
2020

21-
#define WM_PH_NETWORK_ITEM_ADDED (WM_APP + 109)
22-
#define WM_PH_NETWORK_ITEM_MODIFIED (WM_APP + 110)
23-
#define WM_PH_NETWORK_ITEM_REMOVED (WM_APP + 111)
21+
//#define WM_PH_NETWORK_ITEM_ADDED_DEPRECATED (WM_APP + 109)
22+
//#define WM_PH_NETWORK_ITEM_MODIFIED_DEPRECATED (WM_APP + 110)
23+
//#define WM_PH_NETWORK_ITEM_REMOVED_DEPRECATED (WM_APP + 111)
2424
#define WM_PH_NETWORK_ITEMS_UPDATED (WM_APP + 112)
2525

2626
// begin_phapppub

ProcessHacker/include/mainwndp.h

Lines changed: 20 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -121,28 +121,6 @@ ULONG_PTR PhMwpOnUserMessage(
121121
_In_ ULONG_PTR LParam
122122
);
123123

124-
// Callbacks
125-
126-
VOID NTAPI PhMwpNetworkItemAddedHandler(
127-
_In_opt_ PVOID Parameter,
128-
_In_opt_ PVOID Context
129-
);
130-
131-
VOID NTAPI PhMwpNetworkItemModifiedHandler(
132-
_In_opt_ PVOID Parameter,
133-
_In_opt_ PVOID Context
134-
);
135-
136-
VOID NTAPI PhMwpNetworkItemRemovedHandler(
137-
_In_opt_ PVOID Parameter,
138-
_In_opt_ PVOID Context
139-
);
140-
141-
VOID NTAPI PhMwpNetworkItemsUpdatedHandler(
142-
_In_opt_ PVOID Parameter,
143-
_In_opt_ PVOID Context
144-
);
145-
146124
// Settings
147125

148126
VOID PhMwpLoadSettings(
@@ -276,6 +254,7 @@ extern PPH_MAIN_TAB_PAGE PhMwpProcessesPage;
276254
extern HWND PhMwpProcessTreeNewHandle;
277255
extern HWND PhMwpSelectedProcessWindowHandle;
278256
extern BOOLEAN PhMwpSelectedProcessVirtualizationEnabled;
257+
extern struct _PH_PROVIDER_EVENT_QUEUE PhMwpProcessEventQueue;
279258

280259
BOOLEAN PhMwpProcessesPageCallback(
281260
_In_ struct _PH_MAIN_TAB_PAGE *Page,
@@ -352,27 +331,15 @@ VOID NTAPI PhMwpProcessesUpdatedHandler(
352331
_In_opt_ PVOID Context
353332
);
354333

355-
VOID PhMwpOnProcessAdded(
356-
_In_ _Assume_refs_(1) PPH_PROCESS_ITEM ProcessItem,
357-
_In_ ULONG RunId
358-
);
359-
360-
VOID PhMwpOnProcessModified(
361-
_In_ PPH_PROCESS_ITEM ProcessItem
362-
);
363-
364-
VOID PhMwpOnProcessRemoved(
365-
_In_ PPH_PROCESS_ITEM ProcessItem
366-
);
367-
368334
VOID PhMwpOnProcessesUpdated(
369-
VOID
335+
_In_ ULONG RunId
370336
);
371337

372338
// Services
373339

374340
extern PPH_MAIN_TAB_PAGE PhMwpServicesPage;
375341
extern HWND PhMwpServiceTreeNewHandle;
342+
extern struct _PH_PROVIDER_EVENT_QUEUE PhMwpServiceEventQueue;
376343

377344
BOOLEAN PhMwpServicesPageCallback(
378345
_In_ struct _PH_MAIN_TAB_PAGE *Page,
@@ -420,27 +387,15 @@ VOID NTAPI PhMwpServicesUpdatedHandler(
420387
_In_opt_ PVOID Context
421388
);
422389

423-
VOID PhMwpOnServiceAdded(
424-
_In_ _Assume_refs_(1) PPH_SERVICE_ITEM ServiceItem,
425-
_In_ ULONG RunId
426-
);
427-
428-
VOID PhMwpOnServiceModified(
429-
_In_ struct _PH_SERVICE_MODIFIED_DATA *ServiceModifiedData
430-
);
431-
432-
VOID PhMwpOnServiceRemoved(
433-
_In_ PPH_SERVICE_ITEM ServiceItem
434-
);
435-
436390
VOID PhMwpOnServicesUpdated(
437-
VOID
391+
_In_ ULONG RunId
438392
);
439393

440394
// Network
441395

442396
extern PPH_MAIN_TAB_PAGE PhMwpNetworkPage;
443397
extern HWND PhMwpNetworkTreeNewHandle;
398+
extern struct _PH_PROVIDER_EVENT_QUEUE PhMwpNetworkEventQueue;
444399

445400
BOOLEAN PhMwpNetworkPageCallback(
446401
_In_ struct _PH_MAIN_TAB_PAGE *Page,
@@ -469,21 +424,28 @@ VOID PhMwpInitializeNetworkMenu(
469424
_In_ ULONG NumberOfNetworkItems
470425
);
471426

472-
VOID PhMwpOnNetworkItemAdded(
473-
_In_ ULONG RunId,
474-
_In_ _Assume_refs_(1) PPH_NETWORK_ITEM NetworkItem
427+
VOID PhMwpNetworkItemAddedHandler(
428+
_In_opt_ PVOID Parameter,
429+
_In_opt_ PVOID Context
430+
);
431+
432+
VOID PhMwpNetworkItemModifiedHandler(
433+
_In_opt_ PVOID Parameter,
434+
_In_opt_ PVOID Context
475435
);
476436

477-
VOID PhMwpOnNetworkItemModified(
478-
_In_ PPH_NETWORK_ITEM NetworkItem
437+
VOID PhMwpNetworkItemRemovedHandler(
438+
_In_opt_ PVOID Parameter,
439+
_In_opt_ PVOID Context
479440
);
480441

481-
VOID PhMwpOnNetworkItemRemoved(
482-
_In_ PPH_NETWORK_ITEM NetworkItem
442+
VOID PhMwpNetworkItemsUpdatedHandler(
443+
_In_opt_ PVOID Parameter,
444+
_In_opt_ PVOID Context
483445
);
484446

485447
VOID PhMwpOnNetworkItemsUpdated(
486-
VOID
448+
_In_ ULONG RunId
487449
);
488450

489451
// Users

ProcessHacker/include/phuisup.h

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ FORCEINLINE VOID PhChangeShStateTn(
4444
ULONG64 tickCount; \
4545
BOOLEAN preferFullInvalidate; \
4646
HANDLE stateListHandle; \
47-
BOOLEAN redrawDisabled = FALSE; \
4847
BOOLEAN needsFullInvalidate = FALSE; \
4948
\
5049
if (!StateList || StateList->Count == 0) \
@@ -72,21 +71,13 @@ FORCEINLINE VOID PhChangeShStateTn(
7271
} \
7372
else \
7473
{ \
75-
TreeNew_InvalidateNode(TreeNewHandleForUpdate, node); \
74+
if (TreeNewHandleForUpdate) \
75+
TreeNew_InvalidateNode((TreeNewHandleForUpdate), node); \
7676
} \
7777
} \
7878
} \
7979
else if (node->ShStateFieldName.State == RemovingItemState) \
8080
{ \
81-
if (TreeNewHandleForUpdate) \
82-
{ \
83-
if (!redrawDisabled) \
84-
{ \
85-
TreeNew_SetRedraw((TreeNewHandleForUpdate), FALSE); \
86-
redrawDisabled = TRUE; \
87-
} \
88-
} \
89-
\
9081
RemoveFunction(node, __VA_ARGS__); \
9182
needsFullInvalidate = TRUE; \
9283
} \
@@ -96,8 +87,6 @@ FORCEINLINE VOID PhChangeShStateTn(
9687
\
9788
if (TreeNewHandleForUpdate) \
9889
{ \
99-
if (redrawDisabled) \
100-
TreeNew_SetRedraw((TreeNewHandleForUpdate), TRUE); \
10190
if (needsFullInvalidate) \
10291
{ \
10392
InvalidateRect((TreeNewHandleForUpdate), NULL, FALSE); \

ProcessHacker/include/procprv.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ typedef struct _PH_PROCESS_ITEM
164164
ULONG IsImmersive : 1;
165165
ULONG IsWow64Valid : 1;
166166
ULONG IsPartiallySuspended : 1;
167-
ULONG AddedEventSent : 1;
167+
ULONG Unused : 1;
168168
ULONG IsProtectedProcess : 1;
169169
ULONG IsSecureProcess : 1;
170170
ULONG IsSubsystemProcess : 1;
@@ -342,7 +342,7 @@ PhGetStatisticsTimeString(
342342
// end_phapppub
343343

344344
VOID PhFlushProcessQueryData(
345-
_In_ BOOLEAN SendModifiedEvent
345+
VOID
346346
);
347347

348348
VOID PhProcessProviderUpdate(

ProcessHacker/mainwnd.c

Lines changed: 9 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -385,11 +385,6 @@ VOID PhMwpApplyUpdateInterval(
385385
{
386386
PhSetIntervalProviderThread(&PhPrimaryProviderThread, Interval);
387387
PhSetIntervalProviderThread(&PhSecondaryProviderThread, Interval);
388-
389-
if (Interval > PH_FLUSH_PROCESS_QUERY_DATA_INTERVAL_LONG_TERM)
390-
SetTimer(PhMainWndHandle, TIMER_FLUSH_PROCESS_QUERY_DATA, PH_FLUSH_PROCESS_QUERY_DATA_INTERVAL_LONG_TERM, NULL);
391-
else
392-
KillTimer(PhMainWndHandle, TIMER_FLUSH_PROCESS_QUERY_DATA); // Might not exist
393388
}
394389

395390
VOID PhMwpInitializeControls(
@@ -1722,12 +1717,15 @@ VOID PhMwpOnTimer(
17221717
KillTimer(PhMainWndHandle, TIMER_FLUSH_PROCESS_QUERY_DATA);
17231718

17241719
break;
1725-
default:
1726-
NOTHING;
1720+
case 3:
1721+
{
1722+
KillTimer(PhMainWndHandle, TIMER_FLUSH_PROCESS_QUERY_DATA);
1723+
}
17271724
break;
17281725
}
17291726

1730-
PhFlushProcessQueryData(TRUE);
1727+
PhBoostProvider(&PhMwpProcessProviderRegistration, NULL);
1728+
PhBoostProvider(&PhMwpServiceProviderRegistration, NULL);
17311729
}
17321730
}
17331731

@@ -2056,127 +2054,26 @@ ULONG_PTR PhMwpOnUserMessage(
20562054
PhMwpActivateWindow(!!PhGetIntegerSetting(L"IconTogglesVisibility"));
20572055
}
20582056
break;
2059-
case WM_PH_PROCESS_ADDED:
2060-
{
2061-
ULONG runId = (ULONG)WParam;
2062-
PPH_PROCESS_ITEM processItem = (PPH_PROCESS_ITEM)LParam;
2063-
2064-
PhMwpOnProcessAdded(processItem, runId);
2065-
}
2066-
break;
2067-
case WM_PH_PROCESS_MODIFIED:
2068-
{
2069-
PhMwpOnProcessModified((PPH_PROCESS_ITEM)LParam);
2070-
}
2071-
break;
2072-
case WM_PH_PROCESS_REMOVED:
2073-
{
2074-
PhMwpOnProcessRemoved((PPH_PROCESS_ITEM)LParam);
2075-
}
2076-
break;
20772057
case WM_PH_PROCESSES_UPDATED:
20782058
{
2079-
PhMwpOnProcessesUpdated();
2080-
}
2081-
break;
2082-
case WM_PH_SERVICE_ADDED:
2083-
{
2084-
ULONG runId = (ULONG)WParam;
2085-
PPH_SERVICE_ITEM serviceItem = (PPH_SERVICE_ITEM)LParam;
2086-
2087-
PhMwpOnServiceAdded(serviceItem, runId);
2088-
}
2089-
break;
2090-
case WM_PH_SERVICE_MODIFIED:
2091-
{
2092-
PPH_SERVICE_MODIFIED_DATA serviceModifiedData = (PPH_SERVICE_MODIFIED_DATA)LParam;
2093-
2094-
PhMwpOnServiceModified(serviceModifiedData);
2095-
PhFree(serviceModifiedData);
2096-
}
2097-
break;
2098-
case WM_PH_SERVICE_REMOVED:
2099-
{
2100-
PhMwpOnServiceRemoved((PPH_SERVICE_ITEM)LParam);
2059+
PhMwpOnProcessesUpdated((ULONG)WParam);
21012060
}
21022061
break;
21032062
case WM_PH_SERVICES_UPDATED:
21042063
{
2105-
PhMwpOnServicesUpdated();
2106-
}
2107-
break;
2108-
case WM_PH_NETWORK_ITEM_ADDED:
2109-
{
2110-
ULONG runId = (ULONG)WParam;
2111-
PPH_NETWORK_ITEM networkItem = (PPH_NETWORK_ITEM)LParam;
2112-
2113-
PhMwpOnNetworkItemAdded(runId, networkItem);
2114-
}
2115-
break;
2116-
case WM_PH_NETWORK_ITEM_MODIFIED:
2117-
{
2118-
PhMwpOnNetworkItemModified((PPH_NETWORK_ITEM)LParam);
2119-
}
2120-
break;
2121-
case WM_PH_NETWORK_ITEM_REMOVED:
2122-
{
2123-
PhMwpOnNetworkItemRemoved((PPH_NETWORK_ITEM)LParam);
2064+
PhMwpOnServicesUpdated((ULONG)WParam);
21242065
}
21252066
break;
21262067
case WM_PH_NETWORK_ITEMS_UPDATED:
21272068
{
2128-
PhMwpOnNetworkItemsUpdated();
2069+
PhMwpOnNetworkItemsUpdated((ULONG)WParam);
21292070
}
21302071
break;
21312072
}
21322073

21332074
return 0;
21342075
}
21352076

2136-
VOID NTAPI PhMwpNetworkItemAddedHandler(
2137-
_In_opt_ PVOID Parameter,
2138-
_In_opt_ PVOID Context
2139-
)
2140-
{
2141-
PPH_NETWORK_ITEM networkItem = (PPH_NETWORK_ITEM)Parameter;
2142-
2143-
PhReferenceObject(networkItem);
2144-
PostMessage(
2145-
PhMainWndHandle,
2146-
WM_PH_NETWORK_ITEM_ADDED,
2147-
PhGetRunIdProvider(&PhMwpNetworkProviderRegistration),
2148-
(LPARAM)networkItem
2149-
);
2150-
}
2151-
2152-
VOID NTAPI PhMwpNetworkItemModifiedHandler(
2153-
_In_opt_ PVOID Parameter,
2154-
_In_opt_ PVOID Context
2155-
)
2156-
{
2157-
PPH_NETWORK_ITEM networkItem = (PPH_NETWORK_ITEM)Parameter;
2158-
2159-
PostMessage(PhMainWndHandle, WM_PH_NETWORK_ITEM_MODIFIED, 0, (LPARAM)networkItem);
2160-
}
2161-
2162-
VOID NTAPI PhMwpNetworkItemRemovedHandler(
2163-
_In_opt_ PVOID Parameter,
2164-
_In_opt_ PVOID Context
2165-
)
2166-
{
2167-
PPH_NETWORK_ITEM networkItem = (PPH_NETWORK_ITEM)Parameter;
2168-
2169-
PostMessage(PhMainWndHandle, WM_PH_NETWORK_ITEM_REMOVED, 0, (LPARAM)networkItem);
2170-
}
2171-
2172-
VOID NTAPI PhMwpNetworkItemsUpdatedHandler(
2173-
_In_opt_ PVOID Parameter,
2174-
_In_opt_ PVOID Context
2175-
)
2176-
{
2177-
PostMessage(PhMainWndHandle, WM_PH_NETWORK_ITEMS_UPDATED, 0, 0);
2178-
}
2179-
21802077
VOID PhMwpLoadSettings(
21812078
VOID
21822079
)

0 commit comments

Comments
 (0)