From c2a85cd27374aa99607109dd7f2a6019226e69c8 Mon Sep 17 00:00:00 2001 From: Alex Ionescu Date: Tue, 9 Aug 2005 06:23:16 +0000 Subject: [PATCH] - Implement KeQueryBasePriorityThread to return the actual Base Priority Increment (or Saturation Increment) to NtQueryInformationThread. The value win32 works with is actually (usually) the difference between process and thread Base Priorities. This fixes another WINE test. svn path=/trunk/; revision=17231 --- reactos/ntoskrnl/include/internal/ke.h | 4 ++++ reactos/ntoskrnl/ke/kthread.c | 28 ++++++++++++++++++++++++++ reactos/ntoskrnl/ps/query.c | 2 +- 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/include/internal/ke.h b/reactos/ntoskrnl/include/internal/ke.h index 77d5b51dc8f..ebef9d0a241 100644 --- a/reactos/ntoskrnl/include/internal/ke.h +++ b/reactos/ntoskrnl/include/internal/ke.h @@ -222,6 +222,10 @@ KeRundownThread(VOID); NTSTATUS KeReleaseThread(PKTHREAD Thread); +LONG +STDCALL +KeQueryBasePriorityThread(IN PKTHREAD Thread); + VOID STDCALL KeStackAttachProcess ( diff --git a/reactos/ntoskrnl/ke/kthread.c b/reactos/ntoskrnl/ke/kthread.c index 64a9d70560b..2319661e762 100644 --- a/reactos/ntoskrnl/ke/kthread.c +++ b/reactos/ntoskrnl/ke/kthread.c @@ -1026,6 +1026,34 @@ KeSetSystemAffinityThread(IN KAFFINITY Affinity) } } +LONG +STDCALL +KeQueryBasePriorityThread(IN PKTHREAD Thread) +{ + LONG BasePriorityIncrement; + KIRQL OldIrql; + PKPROCESS Process; + + /* Lock the Dispatcher Database */ + OldIrql = KeAcquireDispatcherDatabaseLock(); + + /* Get the Process */ + Process = Thread->ApcStatePointer[0]->Process; + + /* Calculate the BPI */ + BasePriorityIncrement = Thread->BasePriority - Process->BasePriority; + + /* If saturation occured, return the SI instead */ + if (Thread->Saturation) BasePriorityIncrement = (HIGH_PRIORITY + 1) / 2 * + Thread->Saturation; + + /* Release Lock */ + KeReleaseDispatcherDatabaseLock(OldIrql); + + /* Return Increment */ + return BasePriorityIncrement; +} + /* * @implemented */ diff --git a/reactos/ntoskrnl/ps/query.c b/reactos/ntoskrnl/ps/query.c index bdf17a8ece8..3e0b25202fb 100644 --- a/reactos/ntoskrnl/ps/query.c +++ b/reactos/ntoskrnl/ps/query.c @@ -1329,7 +1329,7 @@ NtQueryInformationThread (IN HANDLE ThreadHandle, u.TBI.ClientId = Thread->Cid; u.TBI.AffinityMask = Thread->Tcb.Affinity; u.TBI.Priority = Thread->Tcb.Priority; - u.TBI.BasePriority = Thread->Tcb.BasePriority; + u.TBI.BasePriority = KeQueryBasePriorityThread(&Thread->Tcb); break; case ThreadTimes: