Skip to content

Commit

Permalink
Merge pull request #455 from processhacker/master
Browse files Browse the repository at this point in the history
[pull] master from processhacker:master
  • Loading branch information
pull[bot] authored Apr 17, 2022
2 parents ba48eb0 + 6ea0eeb commit 5d15951
Show file tree
Hide file tree
Showing 13 changed files with 99 additions and 41 deletions.
20 changes: 10 additions & 10 deletions ProcessHacker/affinity.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ typedef struct _PH_AFFINITY_DIALOG_CONTEXT
{
PPH_PROCESS_ITEM ProcessItem;
PPH_THREAD_ITEM ThreadItem;
ULONG_PTR NewAffinityMask;
KAFFINITY NewAffinityMask;

// Multiple selected items (dmex)
PPH_THREAD_ITEM* Threads;
Expand Down Expand Up @@ -78,7 +78,7 @@ _Success_(return)
BOOLEAN PhShowProcessAffinityDialog2(
_In_ HWND ParentWindowHandle,
_In_ PPH_PROCESS_ITEM ProcessItem,
_Out_ PULONG_PTR NewAffinityMask
_Out_ PKAFFINITY NewAffinityMask
)
{
PH_AFFINITY_DIALOG_CONTEXT context;
Expand Down Expand Up @@ -162,8 +162,8 @@ BOOLEAN PhpCheckThreadsHaveSameAffinity(
{
BOOLEAN result = TRUE;
THREAD_BASIC_INFORMATION basicInfo;
ULONG_PTR lastAffinityMask = 0;
ULONG_PTR affinityMask = 0;
KAFFINITY lastAffinityMask = 0;
KAFFINITY affinityMask = 0;

if (NT_SUCCESS(PhGetThreadBasicInformation(Context->ThreadHandles[0], &basicInfo)))
{
Expand Down Expand Up @@ -218,8 +218,8 @@ INT_PTR CALLBACK PhpProcessAffinityDlgProc(
{
NTSTATUS status = STATUS_UNSUCCESSFUL;
BOOLEAN differentAffinity = FALSE;
ULONG_PTR systemAffinityMask = 0;
ULONG_PTR affinityMask = 0;
KAFFINITY systemAffinityMask = 0;
KAFFINITY affinityMask = 0;
ULONG i;

PhCenterWindow(hwndDlg, GetParent(hwndDlg));
Expand Down Expand Up @@ -397,16 +397,16 @@ INT_PTR CALLBACK PhpProcessAffinityDlgProc(
{
NTSTATUS status = STATUS_UNSUCCESSFUL;
ULONG i;
ULONG_PTR affinityMask;
KAFFINITY affinityMask;

// Work out the affinity mask.

affinityMask = 0;

for (i = 0; i < sizeof(ULONG_PTR) * 8; i++)
for (i = 0; i < sizeof(KAFFINITY) * 8; i++)
{
if (Button_GetCheck(GetDlgItem(hwndDlg, IDC_CPU0 + i)) == BST_CHECKED)
affinityMask |= (ULONG_PTR)1 << i;
affinityMask |= (KAFFINITY)1 << i;
}

if (context->ProcessItem)
Expand Down Expand Up @@ -494,7 +494,7 @@ INT_PTR CALLBACK PhpProcessAffinityDlgProc(
// Note: Workaround for UserNotes plugin dialog overrides (dmex)
NTSTATUS PhSetProcessItemAffinityMask(
_In_ PPH_PROCESS_ITEM ProcessItem,
_In_ ULONG_PTR AffinityMask
_In_ KAFFINITY AffinityMask
)
{
NTSTATUS status;
Expand Down
4 changes: 2 additions & 2 deletions ProcessHacker/include/phapp.h
Original file line number Diff line number Diff line change
Expand Up @@ -302,15 +302,15 @@ NTAPI
PhShowProcessAffinityDialog2(
_In_ HWND ParentWindowHandle,
_In_ PPH_PROCESS_ITEM ProcessItem,
_Out_ PULONG_PTR NewAffinityMask
_Out_ PKAFFINITY NewAffinityMask
);

PHAPPAPI
NTSTATUS
NTAPI
PhSetProcessItemAffinityMask(
_In_ PPH_PROCESS_ITEM ProcessItem,
_In_ ULONG_PTR AffinityMask
_In_ KAFFINITY AffinityMask
);

PHAPPAPI
Expand Down
8 changes: 4 additions & 4 deletions ProcessHacker/include/thrdprv.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,12 @@ typedef struct _PH_THREAD_ITEM
FLOAT CpuKernelUsage;
FLOAT CpuUserUsage;

LONG Priority;
LONG BasePriority;
KPRIORITY Priority;
KPRIORITY BasePriority;
ULONG WaitTime;
KTHREAD_STATE State;
KWAIT_REASON WaitReason;
LONG BasePriorityIncrement;
KPRIORITY BasePriorityIncrement;

HANDLE ThreadHandle;

Expand Down Expand Up @@ -114,7 +114,7 @@ VOID PhDereferenceAllThreadItems(
);

PPH_STRING PhGetBasePriorityIncrementString(
_In_ LONG Increment
_In_ KPRIORITY Increment
);

VOID PhThreadProviderInitialUpdate(
Expand Down
4 changes: 2 additions & 2 deletions ProcessHacker/thrdprv.c
Original file line number Diff line number Diff line change
Expand Up @@ -696,7 +696,7 @@ static NTSTATUS PhpGetThreadCycleTime(
}

PPH_STRING PhGetBasePriorityIncrementString(
_In_ LONG Increment
_In_ KPRIORITY Increment
)
{
switch (Increment)
Expand Down Expand Up @@ -1142,7 +1142,7 @@ VOID PhpThreadProviderUpdate(

// Update the base priority increment.
{
LONG oldBasePriorityIncrement = threadItem->BasePriorityIncrement;
KPRIORITY oldBasePriorityIncrement = threadItem->BasePriorityIncrement;

if (threadItem->ThreadHandle && NT_SUCCESS(PhGetThreadBasicInformation(
threadItem->ThreadHandle,
Expand Down
70 changes: 63 additions & 7 deletions phlib/include/phnativeinl.h
Original file line number Diff line number Diff line change
Expand Up @@ -593,14 +593,14 @@ FORCEINLINE
NTSTATUS
PhSetProcessAffinityMask(
_In_ HANDLE ProcessHandle,
_In_ ULONG_PTR AffinityMask
_In_ KAFFINITY AffinityMask
)
{
return NtSetInformationProcess(
ProcessHandle,
ProcessAffinityMask,
&AffinityMask,
sizeof(ULONG_PTR)
sizeof(KAFFINITY)
);
}

Expand Down Expand Up @@ -831,7 +831,7 @@ FORCEINLINE
NTSTATUS
PhGetThreadBasePriority(
_In_ HANDLE ThreadHandle,
_Out_ PLONG Increment
_Out_ PKPRIORITY Increment
)
{
NTSTATUS status;
Expand Down Expand Up @@ -875,14 +875,14 @@ FORCEINLINE
NTSTATUS
PhSetThreadBasePriority(
_In_ HANDLE ThreadHandle,
_In_ LONG Increment
_In_ KPRIORITY Increment
)
{
return NtSetInformationThread(
ThreadHandle,
ThreadBasePriority,
&Increment,
sizeof(LONG)
sizeof(KPRIORITY)
);
}

Expand Down Expand Up @@ -1077,6 +1077,31 @@ PhGetThreadIdealProcessor(
);
}

FORCEINLINE
NTSTATUS
PhSetThreadIdealProcessor(
_In_ HANDLE ThreadHandle,
_In_ PPROCESSOR_NUMBER ProcessorNumber,
_Out_opt_ PPROCESSOR_NUMBER PreviousIdealProcessor
)
{
NTSTATUS status;
PROCESSOR_NUMBER processorNumber;

processorNumber = *ProcessorNumber;
status = NtSetInformationThread(
ThreadHandle,
ThreadIdealProcessorEx,
&processorNumber,
sizeof(PROCESSOR_NUMBER)
);

if (PreviousIdealProcessor)
*PreviousIdealProcessor = processorNumber;

return status;
}

FORCEINLINE
NTSTATUS
PhGetThreadSuspendCount(
Expand Down Expand Up @@ -1256,14 +1281,45 @@ FORCEINLINE
NTSTATUS
PhSetThreadAffinityMask(
_In_ HANDLE ThreadHandle,
_In_ ULONG_PTR AffinityMask
_In_ KAFFINITY AffinityMask
)
{
return NtSetInformationThread(
ThreadHandle,
ThreadAffinityMask,
&AffinityMask,
sizeof(ULONG_PTR)
sizeof(KAFFINITY)
);
}

FORCEINLINE
NTSTATUS
PhGetThreadGroupAffinity(
_In_ HANDLE ThreadHandle,
_Out_ PGROUP_AFFINITY GroupAffinity
)
{
return NtQueryInformationThread(
ThreadHandle,
ThreadGroupInformation,
GroupAffinity,
sizeof(GROUP_AFFINITY),
NULL
);
}

FORCEINLINE
NTSTATUS
PhSetThreadGroupAffinity(
_In_ HANDLE ThreadHandle,
_In_ GROUP_AFFINITY GroupAffinity
)
{
return NtSetInformationThread(
ThreadHandle,
ThreadGroupInformation,
&GroupAffinity,
sizeof(GROUP_AFFINITY)
);
}

Expand Down
2 changes: 1 addition & 1 deletion phnt/include/ntexapi.h
Original file line number Diff line number Diff line change
Expand Up @@ -1655,7 +1655,7 @@ typedef struct _SYSTEM_THREAD_INFORMATION
PVOID StartAddress;
CLIENT_ID ClientId;
KPRIORITY Priority;
LONG BasePriority;
KPRIORITY BasePriority;
ULONG ContextSwitches;
KTHREAD_STATE ThreadState;
KWAIT_REASON WaitReason;
Expand Down
6 changes: 3 additions & 3 deletions phnt/include/ntpsapi.h
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ typedef enum _THREADINFOCLASS
ThreadBasicInformation, // q: THREAD_BASIC_INFORMATION
ThreadTimes, // q: KERNEL_USER_TIMES
ThreadPriority, // s: KPRIORITY (requires SeIncreaseBasePriorityPrivilege)
ThreadBasePriority, // s: LONG
ThreadBasePriority, // s: KPRIORITY
ThreadAffinityMask, // s: KAFFINITY
ThreadImpersonationToken, // s: HANDLE
ThreadDescriptorTableEntry, // q: DESCRIPTOR_TABLE_ENTRY (or WOW64_DESCRIPTOR_TABLE_ENTRY)
Expand Down Expand Up @@ -274,7 +274,7 @@ typedef enum _THREADINFOCLASS
ThreadGroupInformation, // q: GROUP_AFFINITY // 30
ThreadUmsInformation, // q: THREAD_UMS_INFORMATION
ThreadCounterProfiling, // q: BOOLEAN; s: THREAD_PROFILING_INFORMATION?
ThreadIdealProcessorEx, // q: PROCESSOR_NUMBER
ThreadIdealProcessorEx, // qs: PROCESSOR_NUMBER; s: previous PROCESSOR_NUMBER on return
ThreadCpuAccountingInformation, // q: BOOLEAN; s: HANDLE (NtOpenSession) // NtCurrentThread // since WIN8
ThreadSuspendCount, // q: ULONG // since WINBLUE
ThreadHeterogeneousCpuPolicy, // q: KHETERO_CPU_POLICY // since THRESHOLD
Expand Down Expand Up @@ -1025,7 +1025,7 @@ typedef struct _THREAD_BASIC_INFORMATION
CLIENT_ID ClientId;
KAFFINITY AffinityMask;
KPRIORITY Priority;
LONG BasePriority;
KPRIORITY BasePriority;
} THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;

// private
Expand Down
2 changes: 1 addition & 1 deletion phnt/include/phnt_ntdef.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ typedef PCSTR PCSZ;
// Specific

typedef UCHAR KIRQL, *PKIRQL;
typedef LONG KPRIORITY;
typedef LONG KPRIORITY, *PKPRIORITY;
typedef USHORT RTL_ATOM, *PRTL_ATOM;

typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS;
Expand Down
2 changes: 1 addition & 1 deletion phnt/include/winsta.h
Original file line number Diff line number Diff line change
Expand Up @@ -752,7 +752,7 @@ typedef struct _TS_SYS_PROCESS_INFORMATION
LARGE_INTEGER UserTime;
LARGE_INTEGER KernelTime;
UNICODE_STRING ImageName;
LONG BasePriority;
KPRIORITY BasePriority;
ULONG UniqueProcessId;
ULONG InheritedFromUniqueProcessId;
ULONG HandleCount;
Expand Down
2 changes: 1 addition & 1 deletion plugins/UserNotes/db.c
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,7 @@ NTSTATUS LoadDb(

PhStringToInteger64(&affinityMask->sr, 10, &affinityInteger);

object->AffinityMask = (ULONG_PTR)affinityInteger;
object->AffinityMask = (KAFFINITY)affinityInteger;
}

if (object && pagePriorityPlusOne)
Expand Down
2 changes: 1 addition & 1 deletion plugins/UserNotes/db.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ typedef struct _DB_OBJECT
ULONG IoPriorityPlusOne;
COLORREF BackColor;
BOOLEAN Collapse;
ULONG_PTR AffinityMask;
KAFFINITY AffinityMask;
ULONG PagePriorityPlusOne;
} DB_OBJECT, *PDB_OBJECT;

Expand Down
14 changes: 7 additions & 7 deletions plugins/UserNotes/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -178,12 +178,12 @@ PPH_STRING SaveCustomColors(

NTSTATUS GetProcessAffinity(
_In_ HANDLE ProcessId,
_Out_ ULONG_PTR *Affinity
_Out_ PKAFFINITY Affinity
)
{
NTSTATUS status;
HANDLE processHandle;
ULONG_PTR affinityMask = 0;
KAFFINITY affinityMask = 0;
PROCESS_BASIC_INFORMATION basicInfo;

if (NT_SUCCESS(status = PhOpenProcess(
Expand Down Expand Up @@ -1260,7 +1260,7 @@ VOID NTAPI MenuItemCallback(
else
{
NTSTATUS status;
ULONG_PTR affinityMask;
KAFFINITY affinityMask;

if (NT_SUCCESS(status = GetProcessAffinity(processItem->ProcessId, &affinityMask)))
{
Expand Down Expand Up @@ -1291,7 +1291,7 @@ VOID NTAPI MenuItemCallback(
else
{
NTSTATUS status;
ULONG_PTR affinityMask;
KAFFINITY affinityMask;

if (NT_SUCCESS(status = GetProcessAffinity(processItem->ProcessId, &affinityMask)))
{
Expand Down Expand Up @@ -1489,8 +1489,8 @@ VOID NTAPI MenuHookCallback(
case PHAPP_ID_PROCESS_AFFINITY:
{
BOOLEAN changed = FALSE;
//ULONG_PTR affinityMask;
ULONG_PTR newAffinityMask;
//KAFFINITY affinityMask;
KAFFINITY newAffinityMask;
PPH_PROCESS_ITEM processItem = PhGetSelectedProcessItem();

if (!processItem)
Expand Down Expand Up @@ -2147,7 +2147,7 @@ VOID ProcessesUpdatedCallback(
{
if (object->AffinityMask != 0)
{
ULONG_PTR affinityMask;
KAFFINITY affinityMask;

if (NT_SUCCESS(GetProcessAffinity(processItem->ProcessId, &affinityMask)))
{
Expand Down
4 changes: 3 additions & 1 deletion tools/peview/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -151,11 +151,13 @@ INT WINAPI wWinMain(
{
PhMoveReference(&PvFileName, PhConcatStrings(3, L"\"", PvFileName->Buffer, L"\""));

AllowSetForegroundWindow(ASFW_ANY);

if (PhShellExecuteEx(
NULL,
PhGetString(applicationFileName),
PvFileName->Buffer,
SW_SHOWDEFAULT,
SW_SHOWNORMAL,
PH_SHELL_EXECUTE_NOZONECHECKS,
0,
NULL
Expand Down

0 comments on commit 5d15951

Please sign in to comment.