16 # define InterlockedOrSetMember(Destination, SetMember) \ 17 InterlockedOr64((PLONG64)Destination, SetMember); 19 # define InterlockedOrSetMember(Destination, SetMember) \ 20 InterlockedOr((PLONG)Destination, SetMember); 47 ASSERT(Prcb->DeferredReadyListHead.Next !=
NULL);
50 ListEntry = Prcb->DeferredReadyListHead.
Next;
51 Prcb->DeferredReadyListHead.
Next =
NULL;
58 ListEntry = ListEntry->
Next;
62 }
while (ListEntry !=
NULL);
65 ASSERT(Prcb->DeferredReadyListHead.Next ==
NULL);
74 KxQueueReadyThread(
Thread, Prcb);
103 OldPriority =
min(
Thread->AdjustIncrement + 1,
115 (
Thread->PriorityDecrement <= OldPriority));
147 if (!(
Thread->PriorityDecrement) && (
Thread->AdjustIncrement))
157 if (--
Thread->Quantum <= 0)
167 if (!(
Thread->PriorityDecrement) && !(
Thread->DisableBoost))
173 OldPriority =
Thread->BasePriority +
Thread->AdjustIncrement;
184 if (OldPriority >
Thread->Priority)
194 if (OldPriority > (
Thread->BasePriority +
205 (
Thread->PriorityDecrement <= OldPriority));
227 Preempted =
Thread->Preempted;
228 OldPriority =
Thread->Priority;
232 Thread->NextProcessor = 0;
260 if (OldPriority > NextThread->
Priority)
281 if (OldPriority > NextThread->
Priority)
337 Thread = Prcb->IdleThread;
341 Prcb->IdleSchedule =
TRUE;
368 NextThread = Prcb->NextThread;
372 Prcb->NextThread =
NULL;
373 Prcb->CurrentThread = NextThread;
383 Prcb->CurrentThread = NextThread;
392 NextThread = Prcb->IdleThread;
393 Prcb->CurrentThread = NextThread;
399 ASSERT(CurrentThread != Prcb->IdleThread);
403 WaitIrql = CurrentThread->WaitIrql;
409 WaitStatus = CurrentThread->WaitStatus;
439 else if (!
Thread->KernelStackResident)
475 if (--
Thread->Quantum <= 0)
531 if (!
Thread->ProcessReadyQueue)
587 OldPriority =
Thread->Priority;
627 OldPriority =
Thread->Priority;
642 RequestInterrupt =
TRUE;
648 if (RequestInterrupt)
668 DPRINT1(
"Deferred state not yet supported\n");
691 OldAffinity =
Thread->UserAffinity;
705 if (!
Thread->SystemAffinityActive)
709 DPRINT1(
"Affinity support disabled!\n");
732 #define KiGetCurrentReadySummary() __readfsdword(FIELD_OFFSET(KIPCR, PrcbData.ReadySummary)) 734 #define KiGetCurrentReadySummary() __readgsdword(FIELD_OFFSET(KIPCR, Prcb.ReadySummary)) 736 #define KiGetCurrentReadySummary() KeGetCurrentPrcb()->ReadySummary 795 KxQueueReadyThread(
Thread, Prcb);
#define KeGetCurrentIrql()
FORCEINLINE VOID KiReleaseThreadLock(IN PKTHREAD Thread)
KAFFINITY FASTCALL KiSetAffinityThread(IN PKTHREAD Thread, IN KAFFINITY Affinity)
#define PRIORITY_MASK(Id)
PKTHREAD FASTCALL KiSelectNextThread(IN PKPRCB Prcb)
FORCEINLINE VOID KiReleasePrcbLock(IN PKPRCB Prcb)
#define STATUS_NO_YIELD_PERFORMED
FORCEINLINE VOID InsertHeadList(_Inout_ PLIST_ENTRY ListHead, _Inout_ __drv_aliasesMem PLIST_ENTRY Entry)
VOID FASTCALL KiSetPriorityThread(IN PKTHREAD Thread, IN KPRIORITY Priority)
FORCEINLINE VOID KiInsertDeferredReadyList(IN PKTHREAD Thread)
FORCEINLINE VOID KiSetThreadSwapBusy(IN PKTHREAD Thread)
FORCEINLINE struct _KPRCB * KeGetCurrentPrcb(VOID)
#define LOW_REALTIME_PRIORITY
#define AFFINITY_MASK(Id)
#define InsertTailList(ListHead, Entry)
struct _KTHREAD * NextThread
BOOLEAN FASTCALL KiSwapContext(IN KIRQL WaitIrql, IN PKTHREAD CurrentThread)
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
FORCEINLINE ULONG KeGetCurrentProcessorNumber(VOID)
FORCEINLINE SCHAR KiComputeNewPriority(IN PKTHREAD Thread, IN SCHAR Adjustment)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
#define KiGetCurrentReadySummary()
DECLSPEC_NORETURN VOID NTAPI KeBugCheck(ULONG BugCheckCode)
#define ASSERTMSG(msg, exp)
LONG_PTR FASTCALL KiSwapThread(IN PKTHREAD CurrentThread, IN PKPRCB Prcb)
struct _KTHREAD * CurrentThread
FORCEINLINE VOID KiAcquirePrcbLock(IN PKPRCB Prcb)
VOID FASTCALL KiDeferredReadyThread(IN PKTHREAD Thread)
#define STATUS_KERNEL_APC
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
VOID FASTCALL KiExitDispatcher(KIRQL OldIrql)
FORCEINLINE VOID KiAcquireThreadLock(IN PKTHREAD Thread)
NTSTATUS NTAPI NtYieldExecution(VOID)
_In_ ULONG _In_ ULONG _In_ ULONG _Out_ PKIRQL _Out_ PKAFFINITY Affinity
HRESULT Next([in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] STATPROPSETSTG *rgelt, [out] ULONG *pceltFetched)
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
_In_ WDFINTERRUPT _In_ WDF_INTERRUPT_POLICY _In_ WDF_INTERRUPT_PRIORITY Priority
struct _SINGLE_LIST_ENTRY * Next
NTKERNELAPI volatile KSYSTEM_TIME KeTickCount
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
#define InterlockedOrSetMember(Destination, SetMember)
VOID NTAPI KiReadyThread(IN PKTHREAD Thread)
VOID FASTCALL KiIpiSend(KAFFINITY TargetSet, ULONG IpiRequest)
#define MEMORY_PRIORITY_FOREGROUND
FORCEINLINE PKTHREAD KiSelectReadyThread(IN KPRIORITY Priority, IN PKPRCB Prcb)
ULONG_PTR KiIdleSMTSummary
PKPRCB KiProcessorBlock[]
_Out_ PKAPC_STATE ApcState
ULONG PsPrioritySeparation
VOID FASTCALL KiProcessDeferredReadyList(IN PKPRCB Prcb)
LIST_ENTRY DispatcherReadyListHead[32]
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
#define KeGetCurrentThread
VOID NTAPI KeLowerIrql(KIRQL NewIrql)
VOID NTAPI KiAdjustQuantumThread(IN PKTHREAD Thread)
VOID NTAPI KiDeliverApc(IN KPROCESSOR_MODE DeliveryMode, IN PKEXCEPTION_FRAME ExceptionFrame, IN PKTRAP_FRAME TrapFrame)
PKTHREAD FASTCALL KiIdleSchedule(IN PKPRCB Prcb)
VOID FASTCALL KiQueueReadyThread(IN PKTHREAD Thread, IN PKPRCB Prcb)
KIRQL NTAPI KeRaiseIrqlToSynchLevel(VOID)