Windows2003-3790/windows/appcompat/shims/general/lowerthreadpriority.cpp
2020-09-30 16:53:55 +02:00

99 lines
2.4 KiB
C++

/*++
Copyright (c) 2001 Microsoft Corporation
Module Name:
LowerThreadPriority.cpp
Abstract:
Includes the following hooks:
SetThreadPriority: if the thread priority is THREAD_PRIORITY_TIME_CRITICAL,
change it to THREAD_PRIORITY_HIGHEST.
SetPriorityClass: if the process priority is HIGH_PRIORITY_CLASS or
REALTIME_PRIORITY_CLASS, change it to
NORMAL_PRIORITY_CLASS.
Notes:
This is a general purpose shim.
History:
05/23/2001 qzheng Created
--*/
#include "precomp.h"
IMPLEMENT_SHIM_BEGIN(LowerThreadPriority)
#include "ShimHookMacro.h"
APIHOOK_ENUM_BEGIN
APIHOOK_ENUM_ENTRY(SetThreadPriority)
APIHOOK_ENUM_ENTRY(SetPriorityClass)
APIHOOK_ENUM_END
BOOL
APIHOOK(SetThreadPriority)(
HANDLE hThread,
int nPriority
)
{
BOOL bReturnValue;
int nNewPriority;
LOGN( eDbgLevelInfo,
"Original SetThreadPriority(hThread: 0x%08lx, nPriority: %d).", hThread, nPriority );
nNewPriority = (nPriority == THREAD_PRIORITY_TIME_CRITICAL) ? THREAD_PRIORITY_HIGHEST : nPriority;
bReturnValue = ORIGINAL_API(SetThreadPriority)(hThread, nNewPriority);
if( bReturnValue && (nNewPriority != nPriority) ) {
LOGN( eDbgLevelInfo,
"New SetThreadPriority(hThread: 0x%08lx, nPriority: %d).", hThread, nNewPriority );
}
return bReturnValue;
}
BOOL
APIHOOK(SetPriorityClass)(
HANDLE hProcess,
DWORD dwPriorityClass
)
{
BOOL bReturnValue;
DWORD dwNewPriorityClass;
LOGN( eDbgLevelInfo,
"Original SetPriorityClass(hProcess: 0x%08lx, dwPriorityClass: %d).", hProcess, dwPriorityClass );
dwNewPriorityClass = ( (dwPriorityClass == HIGH_PRIORITY_CLASS) || (dwPriorityClass == REALTIME_PRIORITY_CLASS) ) ?
NORMAL_PRIORITY_CLASS : dwPriorityClass;
bReturnValue = ORIGINAL_API(SetPriorityClass)(hProcess, dwNewPriorityClass);
if( bReturnValue && (dwNewPriorityClass != dwPriorityClass) ) {
LOGN( eDbgLevelInfo,
"New SetPriorityClass (hProcess: 0x%08lx, dwPriorityClass: %d).", hProcess, dwNewPriorityClass );
}
return bReturnValue;
}
/*++
Register hooked functions
--*/
HOOK_BEGIN
APIHOOK_ENTRY(KERNEL32.DLL, SetThreadPriority)
APIHOOK_ENTRY(KERNEL32.DLL, SetPriorityClass)
HOOK_END
IMPLEMENT_SHIM_END