/* DATA **********************************************************************/
/* Number of worker threads for each Queue */
-#define EX_HYPERCRITICAL_WORK_THREADS 1
-#define EX_DELAYED_WORK_THREADS 3
-#define EX_CRITICAL_WORK_THREADS 5
+#define EX_HYPERCRITICAL_WORK_THREADS 1
+#define EX_DELAYED_WORK_THREADS 3
+#define EX_CRITICAL_WORK_THREADS 5
/* Magic flag for dynamic worker threads */
-#define EX_DYNAMIC_WORK_THREAD 0x80000000
+#define EX_DYNAMIC_WORK_THREAD 0x80000000
-/* Worker thread priorities */
-#define EX_HYPERCRITICAL_QUEUE_PRIORITY 7
-#define EX_CRITICAL_QUEUE_PRIORITY 5
-#define EX_DELAYED_QUEUE_PRIORITY 4
+/* Worker thread priority increments (added to base priority) */
+#define EX_HYPERCRITICAL_QUEUE_PRIORITY_INCREMENT 7
+#define EX_CRITICAL_QUEUE_PRIORITY_INCREMENT 5
+#define EX_DELAYED_QUEUE_PRIORITY_INCREMENT 4
/* The actual worker queue array */
EX_WORK_QUEUE ExWorkerQueue[MaximumWorkQueue];
if (WorkQueueType == DelayedWorkQueue)
{
/* Priority == 4 */
- Priority = EX_DELAYED_QUEUE_PRIORITY;
+ Priority = EX_DELAYED_QUEUE_PRIORITY_INCREMENT;
}
else if (WorkQueueType == CriticalWorkQueue)
{
/* Priority == 5 */
- Priority = EX_CRITICAL_QUEUE_PRIORITY;
+ Priority = EX_CRITICAL_QUEUE_PRIORITY_INCREMENT;
}
else
{
/* Priority == 7 */
- Priority = EX_HYPERCRITICAL_QUEUE_PRIORITY;
+ Priority = EX_HYPERCRITICAL_QUEUE_PRIORITY_INCREMENT;
}
/* Get the Thread */
NULL);
/* Set the Priority */
- KeSetPriorityThread(&Thread->Tcb, Priority);
+ KeSetBasePriorityThread(&Thread->Tcb, Priority);
/* Dereference and close handle */
ObDereferenceObject(Thread);
/* Raise our priority above all other worker threads */
KeSetBasePriorityThread(KeGetCurrentThread(),
- EX_CRITICAL_QUEUE_PRIORITY + 1);
+ EX_CRITICAL_QUEUE_PRIORITY_INCREMENT + 1);
/* Setup the timer */
KeInitializeTimer(&Timer);