Skip to content

Commit

Permalink
Add PhUiSetActivityModeration
Browse files Browse the repository at this point in the history
  • Loading branch information
dmex committed Feb 12, 2025
1 parent 65da47a commit f29f2c9
Show file tree
Hide file tree
Showing 5 changed files with 137 additions and 1 deletion.
114 changes: 114 additions & 0 deletions SystemInformer/actions.c
Original file line number Diff line number Diff line change
Expand Up @@ -2856,6 +2856,120 @@ BOOLEAN PhUiReduceWorkingSetProcesses(
return success;
}

BOOLEAN PhUiSetActivityModeration(
_In_ HWND WindowHandle,
_In_ PPH_PROCESS_ITEM Process
)
{
static TASKDIALOG_BUTTON TaskDialogRadioButtonArray[] =
{
{ SystemActivityModerationStateSystemManaged, L"System managed" },
{ SystemActivityModerationStateUserManagedAllowThrottling, L"Allow activity moderation throttling" },
{ SystemActivityModerationStateUserManagedDisableThrottling, L"Disable activity moderation throttling" },
};
static TASKDIALOG_BUTTON TaskDialogButtonArray[] =
{
{ IDYES, L"Save" },
{ IDCANCEL, L"Cancel" },
};
NTSTATUS status;
SYSTEM_ACTIVITY_MODERATION_APP_SETTINGS activityModerationInfo = { 0 };
TASKDIALOGCONFIG config;
ULONG buttonId;
ULONG moderationState;
LARGE_INTEGER startTime;
LARGE_INTEGER currentTime;
SYSTEMTIME startTimeFields;
PPH_STRING startTimeRelativeString = NULL;
PPH_STRING startTimeString = NULL;

memset(&config, 0, sizeof(TASKDIALOGCONFIG));
config.cbSize = sizeof(TASKDIALOGCONFIG);
config.dwFlags = TDF_USE_HICON_MAIN | TDF_ALLOW_DIALOG_CANCELLATION | TDF_CAN_BE_MINIMIZED | TDF_POSITION_RELATIVE_TO_WINDOW;
config.hMainIcon = PhGetApplicationIcon(FALSE);
config.pszWindowTitle = PhApplicationName;
config.pszMainInstruction = L"Select the process activity moderation throttling state.";
config.nDefaultButton = IDCANCEL;
config.pRadioButtons = TaskDialogRadioButtonArray;
config.cRadioButtons = RTL_NUMBER_OF(TaskDialogRadioButtonArray);
config.pButtons = TaskDialogButtonArray;
config.cButtons = RTL_NUMBER_OF(TaskDialogButtonArray);
config.hwndParent = WindowHandle;
config.cxWidth = 220;

if (PhIsNullOrEmptyString(Process->FileName))
return TRUE;

status = PhGetProcessActivityModerationState(
&Process->FileName->sr,
&activityModerationInfo
);

if (NT_SUCCESS(status))
{
config.nDefaultRadioButton = activityModerationInfo.ModerationState;

PhQuerySystemTime(&currentTime);

if (activityModerationInfo.LastUpdatedTime.QuadPart < currentTime.QuadPart)
{
startTime = activityModerationInfo.LastUpdatedTime;
startTimeRelativeString = PH_AUTO(PhFormatTimeSpanRelative(currentTime.QuadPart - startTime.QuadPart));

PhLargeIntegerToLocalSystemTime(&startTimeFields, &startTime);
startTimeString = PhaFormatDateTime(&startTimeFields);
}
}
else
{
config.nDefaultRadioButton = SystemActivityModerationStateSystemManaged;
}

config.pszContent = PhaFormatString(
L"System-managed activity moderation settings are automatically removed by Windows when the executable is deleted or was last executed more than 7 days ago.\r\n\r\n"
L"Image: %s\r\nUpdated: %s",
PH_AUTO_T(PH_STRING, PhGetBaseName(Process->FileName))->Buffer,
(startTimeRelativeString && startTimeString) ? PhaFormatString(L"%s ago (%s)", PhGetString(startTimeRelativeString), PhGetString(startTimeString))->Buffer : L"N/A"
)->Buffer;

if (PhShowTaskDialog(
&config,
&buttonId,
&moderationState,
NULL
) && buttonId == IDYES)
{
if (Process->IsPackagedProcess)
{
status = PhSetProcessActivityModerationState(
&Process->FileName->sr,
SystemActivityModerationAppTypePackaged,
moderationState
);
}
else
{
status = PhSetProcessActivityModerationState(
&Process->FileName->sr,
SystemActivityModerationAppTypeClassic,
moderationState
);
}
}
else
{
status = STATUS_SUCCESS;
}

if (!NT_SUCCESS(status))
{
PhpShowErrorProcess(WindowHandle, L"set background activity moderation for", Process, status, 0);
return FALSE;
}

return TRUE;
}

BOOLEAN PhUiSetVirtualizationProcess(
_In_ HWND WindowHandle,
_In_ PPH_PROCESS_ITEM Process,
Expand Down
8 changes: 8 additions & 0 deletions SystemInformer/include/actions.h
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,14 @@ PhUiReduceWorkingSetProcesses(
_In_ ULONG NumberOfProcesses
);

PHAPPAPI
BOOLEAN
NTAPI
PhUiSetActivityModeration(
_In_ HWND WindowHandle,
_In_ PPH_PROCESS_ITEM Process
);

PHAPPAPI
BOOLEAN
NTAPI
Expand Down
12 changes: 12 additions & 0 deletions SystemInformer/mainwnd.c
Original file line number Diff line number Diff line change
Expand Up @@ -1659,6 +1659,18 @@ VOID PhMwpOnCommand(
}
}
break;
case ID_MISCELLANEOUS_ACTIVITY:
{
PPH_PROCESS_ITEM processItem = PhGetSelectedProcessItem();

if (processItem)
{
PhReferenceObject(processItem);
PhUiSetActivityModeration(WindowHandle, processItem);
PhDereferenceObject(processItem);
}
}
break;
case ID_MISCELLANEOUS_SETCRITICAL:
{
PPH_PROCESS_ITEM processItem = PhGetSelectedProcessItem();
Expand Down
1 change: 1 addition & 0 deletions SystemInformer/mwpgproc.c
Original file line number Diff line number Diff line change
Expand Up @@ -935,6 +935,7 @@ PPH_EMENU PhpCreateProcessMenu(
PhInsertEMenuItem(menu, menuItem, ULONG_MAX);

menuItem = PhCreateEMenuItem(0, ID_PROCESS_MISCELLANEOUS, L"&Miscellaneous", NULL, NULL);
PhInsertEMenuItem(menuItem, PhCreateEMenuItem(0, ID_MISCELLANEOUS_ACTIVITY, L"Activity moderation", NULL, NULL), ULONG_MAX);
PhInsertEMenuItem(menuItem, PhCreateEMenuItem(0, ID_MISCELLANEOUS_SETCRITICAL, L"&Critical", NULL, NULL), ULONG_MAX);
PhInsertEMenuItem(menuItem, PhCreateEMenuItem(0, ID_MISCELLANEOUS_DETACHFROMDEBUGGER, L"&Detach from debugger", NULL, NULL), ULONG_MAX);
PhInsertEMenuItem(menuItem, PhCreateEMenuItem(0, ID_MISCELLANEOUS_ECOMODE, L"Efficiency mode", NULL, NULL), ULONG_MAX);
Expand Down
3 changes: 2 additions & 1 deletion SystemInformer/resource.h
Original file line number Diff line number Diff line change
Expand Up @@ -647,7 +647,8 @@
#define ID_PROCESS_PAGEPRIORITY 40043
#define ID_PRIORITY_REALTIME 40048
#define ID_PRIORITY_HIGH 40049
#define ID_MISCELLANEOUS_ECOMODE 40050
#define ID_MISCELLANEOUS_ACTIVITY 40050
#define ID_MISCELLANEOUS_ECOMODE 40051
#define ID_WINDOW_BRINGTOFRONT 40055
#define ID_WINDOW_RESTORE 40056
#define ID_WINDOW_MINIMIZE 40057
Expand Down

0 comments on commit f29f2c9

Please sign in to comment.