diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec index ca339181e32..cbba3abdba0 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec @@ -1470,6 +1470,7 @@ @ stdcall -import SetThreadGroupAffinity(long ptr ptr) @ stdcall -import SetThreadIdealProcessor(long long) @ stdcall -import SetThreadIdealProcessorEx(long ptr ptr) +@ stdcall -import SetThreadInformation(long long ptr long) @ stdcall -import SetThreadLocale(long) @ stdcall -import SetThreadPreferredUILanguages(long ptr ptr) @ stdcall -import SetThreadPriority(long long) diff --git a/dlls/kernelbase/kernelbase.spec b/dlls/kernelbase/kernelbase.spec index 791c3603918..fd9701dd20b 100644 --- a/dlls/kernelbase/kernelbase.spec +++ b/dlls/kernelbase/kernelbase.spec @@ -1520,7 +1520,7 @@ @ stdcall SetThreadGroupAffinity(long ptr ptr) @ stdcall SetThreadIdealProcessor(long long) @ stdcall SetThreadIdealProcessorEx(long ptr ptr) -# @ stub SetThreadInformation +@ stdcall SetThreadInformation(long long ptr long) @ stdcall SetThreadLocale(long) @ stdcall SetThreadPreferredUILanguages(long ptr ptr) @ stdcall SetThreadPriority(long long) diff --git a/dlls/kernelbase/thread.c b/dlls/kernelbase/thread.c index 6ba58cf0a67..f11d17748fe 100644 --- a/dlls/kernelbase/thread.c +++ b/dlls/kernelbase/thread.c @@ -606,6 +606,25 @@ LANGID WINAPI DECLSPEC_HOTPATCH SetThreadUILanguage( LANGID langid ) } +/********************************************************************** + * SetThreadInformation (kernelbase.@) + */ +BOOL WINAPI DECLSPEC_HOTPATCH SetThreadInformation( HANDLE thread, THREAD_INFORMATION_CLASS info_class, + VOID *info, DWORD size ) +{ + switch (info_class) + { + case ThreadMemoryPriority: + return set_ntstatus( NtSetInformationThread( thread, ThreadPagePriority, info, size )); + case ThreadPowerThrottling: + return set_ntstatus( NtSetInformationThread( thread, ThreadPowerThrottlingState, info, size )); + default: + FIXME("Unsupported class %u.\n", info_class); + return FALSE; + } +} + + /********************************************************************** * SuspendThread (kernelbase.@) */ diff --git a/include/processthreadsapi.h b/include/processthreadsapi.h index 8cdaff4796a..d266b7a727b 100644 --- a/include/processthreadsapi.h +++ b/include/processthreadsapi.h @@ -23,8 +23,23 @@ extern "C" { #endif +typedef enum _THREAD_INFORMATION_CLASS +{ + ThreadMemoryPriority, + ThreadAbsoluteCpuPriority, + ThreadDynamicCodePolicy, + ThreadPowerThrottling, + ThreadInformationClassMax +} THREAD_INFORMATION_CLASS; + +typedef struct _MEMORY_PRIORITY_INFORMATION +{ + ULONG MemoryPriority; +} MEMORY_PRIORITY_INFORMATION, *PMEMORY_PRIORITY_INFORMATION; + WINBASEAPI HRESULT WINAPI GetThreadDescription(HANDLE,PWSTR *); WINBASEAPI HRESULT WINAPI SetThreadDescription(HANDLE,PCWSTR); +WINBASEAPI BOOL WINAPI SetThreadInformation(HANDLE,THREAD_INFORMATION_CLASS,LPVOID,DWORD); #ifdef __cplusplus }