Module: wine Branch: master Commit: cf6705a8caba2cf7fc21d35b7593b291c26b1fd9 URL: https://gitlab.winehq.org/wine/wine/-/commit/cf6705a8caba2cf7fc21d35b7593b29...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Mon Nov 21 07:19:24 2022 +0300
kernelbase: Forward thread priority boost functions to ntdll.
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com
---
dlls/kernelbase/thread.c | 5 ++--- dlls/ntdll/unix/thread.c | 16 ++++++++++++++-- dlls/wow64/process.c | 2 ++ 3 files changed, 18 insertions(+), 5 deletions(-)
diff --git a/dlls/kernelbase/thread.c b/dlls/kernelbase/thread.c index a817609a385..be3d38c04ff 100644 --- a/dlls/kernelbase/thread.c +++ b/dlls/kernelbase/thread.c @@ -286,8 +286,7 @@ INT WINAPI DECLSPEC_HOTPATCH GetThreadPriority( HANDLE thread ) */ BOOL WINAPI DECLSPEC_HOTPATCH GetThreadPriorityBoost( HANDLE thread, BOOL *state ) { - if (state) *state = FALSE; - return TRUE; + return set_ntstatus( NtQueryInformationThread( thread, ThreadPriorityBoost, state, sizeof(*state), NULL )); }
@@ -568,7 +567,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH SetThreadPriority( HANDLE thread, INT priority ) */ BOOL WINAPI DECLSPEC_HOTPATCH SetThreadPriorityBoost( HANDLE thread, BOOL disable ) { - return TRUE; + return set_ntstatus( NtSetInformationThread( thread, ThreadPriorityBoost, &disable, sizeof(disable) )); }
diff --git a/dlls/ntdll/unix/thread.c b/dlls/ntdll/unix/thread.c index 05c575cfdaa..d56962e1721 100644 --- a/dlls/ntdll/unix/thread.c +++ b/dlls/ntdll/unix/thread.c @@ -2177,6 +2177,16 @@ NTSTATUS WINAPI NtQueryInformationThread( HANDLE handle, THREADINFOCLASS class, if (ret_len) *ret_len = sizeof(BOOLEAN); return STATUS_SUCCESS;
+ case ThreadPriorityBoost: + { + DWORD *value = data; + + if (length != sizeof(ULONG)) return STATUS_INFO_LENGTH_MISMATCH; + if (ret_len) *ret_len = sizeof(ULONG); + *value = 0; + return STATUS_SUCCESS; + } + case ThreadIdealProcessor: case ThreadEnableAlignmentFaultFixup: return STATUS_INVALID_INFO_CLASS; @@ -2187,7 +2197,6 @@ NTSTATUS WINAPI NtQueryInformationThread( HANDLE handle, THREADINFOCLASS class, case ThreadEventPair_Reusable: case ThreadZeroTlsCell: case ThreadPerformanceCount: - case ThreadPriorityBoost: case ThreadSetTlsArrayAddress: default: FIXME( "info class %d not supported yet\n", class ); @@ -2389,6 +2398,10 @@ NTSTATUS WINAPI NtSetInformationThread( HANDLE handle, THREADINFOCLASS class, return STATUS_SUCCESS; }
+ case ThreadPriorityBoost: + WARN("Unimplemented class ThreadPriorityBoost.\n"); + return STATUS_SUCCESS; + case ThreadBasicInformation: case ThreadTimes: case ThreadPriority: @@ -2396,7 +2409,6 @@ NTSTATUS WINAPI NtSetInformationThread( HANDLE handle, THREADINFOCLASS class, case ThreadEventPair_Reusable: case ThreadPerformanceCount: case ThreadAmILastThread: - case ThreadPriorityBoost: case ThreadSetTlsArrayAddress: case ThreadIsIoPending: default: diff --git a/dlls/wow64/process.c b/dlls/wow64/process.c index 61ecc68724c..97dbfdef761 100644 --- a/dlls/wow64/process.c +++ b/dlls/wow64/process.c @@ -899,6 +899,7 @@ NTSTATUS WINAPI wow64_NtQueryInformationThread( UINT *args ) case ThreadIsIoPending: /* ULONG */ case ThreadHideFromDebugger: /* BOOLEAN */ case ThreadSuspendCount: /* ULONG */ + case ThreadPriorityBoost: /* ULONG */ /* FIXME: check buffer alignment */ return NtQueryInformationThread( handle, class, ptr, len, retlen );
@@ -1163,6 +1164,7 @@ NTSTATUS WINAPI wow64_NtSetInformationThread( UINT *args ) case ThreadEnableAlignmentFaultFixup: /* BOOLEAN */ case ThreadPowerThrottlingState: /* THREAD_POWER_THROTTLING_STATE */ case ThreadIdealProcessor: /* ULONG */ + case ThreadPriorityBoost: /* ULONG */ return NtSetInformationThread( handle, class, ptr, len );
case ThreadImpersonationToken: /* HANDLE */