- Implement KeQueryBasePriorityThread to return the actual Base Priority Increment...
authorAlex Ionescu <aionescu@gmail.com>
Tue, 9 Aug 2005 06:23:16 +0000 (06:23 +0000)
committerAlex Ionescu <aionescu@gmail.com>
Tue, 9 Aug 2005 06:23:16 +0000 (06:23 +0000)
This fixes another WINE test.

svn path=/trunk/; revision=17231

reactos/ntoskrnl/include/internal/ke.h
reactos/ntoskrnl/ke/kthread.c
reactos/ntoskrnl/ps/query.c

index 77d5b51..ebef9d0 100644 (file)
@@ -222,6 +222,10 @@ KeRundownThread(VOID);
 
 NTSTATUS KeReleaseThread(PKTHREAD Thread);
 
+LONG
+STDCALL
+KeQueryBasePriorityThread(IN PKTHREAD Thread);
+
 VOID
 STDCALL
 KeStackAttachProcess (
index 64a9d70..2319661 100644 (file)
@@ -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
  */
index bdf17a8..3e0b252 100644 (file)
@@ -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: