/*++ 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