20 0x1, 0x2, 0x4, 0x8, 0x10, 0x20,
21 0x40, 0x80, 0x100, 0x200, 0x400, 0x800,
22 0x1000, 0x2000, 0x4000, 0x8000, 0x10000, 0x20000,
23 0x40000, 0x80000, 0x100000, 0x200000, 0x400000, 0x800000,
24 0x1000000, 0x2000000, 0x4000000, 0x8000000, 0x10000000, 0x20000000,
25 0x40000000, 0x80000000
161 PreviousCount =
Thread->SuspendCount;
171 Thread->SuspendSemaphore.Header.SignalState++;
180 return PreviousCount;
206 (AlertMode <= Thread->WaitMode))
247 !(
Thread->PriorityDecrement))
287 PreviousCount =
Thread->SuspendCount +
Thread->FreezeCount;
300 Thread->SuspendSemaphore.Header.SignalState++;
310 return PreviousCount;
339 ListHead = &
Process->ThreadListHead;
340 NextEntry = ListHead->
Flink;
350 if ((Current != CurrentThread) && (Current->
ApcQueueable))
363 if (!Current->SuspendApc.Inserted)
366 Current->SuspendApc.Inserted =
TRUE;
387 NextEntry = NextEntry->
Flink;
388 }
while (NextEntry != ListHead);
408 PreviousCount =
Thread->SuspendCount;
423 Thread->SuspendSemaphore.Header.SignalState++;
434 return PreviousCount;
454 ListHead = &
Thread->MutantListHead;
455 NextEntry = ListHead->
Flink;
456 while (NextEntry != ListHead)
489 NextEntry =
Thread->MutantListHead.Flink;
506 UCHAR IdealProcessor = 0;
545 Process->ThreadSeed = IdealProcessor;
552 Thread->IdealProcessor = IdealProcessor;
553 Thread->UserIdealProcessor = IdealProcessor;
621 PreviousCount =
Thread->SuspendCount;
638 if (!(PreviousCount) && !(
Thread->FreezeCount))
641 if (!
Thread->SuspendApc.Inserted)
653 Thread->SuspendSemaphore.Header.SignalState--;
664 return PreviousCount;
682 ListHead = &
Process->ThreadListHead;
683 NextEntry = ListHead->
Flink;
718 NextEntry = NextEntry->
Flink;
719 }
while (NextEntry != ListHead);
743 OldState =
Thread->Alerted[AlertMode];
782 Thread->Header.ThreadControlFlags = 0;
784 Thread->Header.SignalState = 0;
799 Thread->IdealProcessor = 1;
840 TimerWaitBlock->NextWaitBlock =
NULL;
858 AllocatedStack =
TRUE;
862 Thread->InitialStack = KernelStack;
863 Thread->StackBase = KernelStack;
954 #undef KeGetCurrentThread 966 #undef KeGetPreviousMode 989 return Thread->KernelTime;
1078 CCHAR OldIdealProcessor;
1086 OldIdealProcessor =
Thread->UserIdealProcessor;
1098 if (!
Thread->SystemAffinityActive)
1108 return OldIdealProcessor;
1135 ULONG AffinitySet, NodeMask;
1142 NodeMask = Prcb->
ParentNode->ProcessorMask & AffinitySet;
1146 AffinitySet = NodeMask;
1204 OldBasePriority =
Thread->BasePriority;
1205 OldIncrement = OldBasePriority -
Process->BasePriority;
1260 Priority += (BasePriority - OldBasePriority);
1280 Thread->PriorityDecrement = 0;
1295 return OldIncrement;
1344 OldPriority =
Thread->Priority;
1345 Thread->PriorityDecrement = 0;
1406 *ThreadAddr =
Entry;
1415 }
while (
Entry != SavedEntry);
VOID NTAPI KeInitializeApc(IN PKAPC Apc, IN PKTHREAD Thread, IN KAPC_ENVIRONMENT TargetEnvironment, IN PKKERNEL_ROUTINE KernelRoutine, IN PKRUNDOWN_ROUTINE RundownRoutine OPTIONAL, IN PKNORMAL_ROUTINE NormalRoutine, IN KPROCESSOR_MODE Mode, IN PVOID Context)
#define MAXIMUM_PROCESSORS
FORCEINLINE VOID KiReleaseThreadLock(IN PKTHREAD Thread)
ULONG NTAPI KeQueryRuntimeThread(IN PKTHREAD Thread, OUT PULONG UserTime)
KAFFINITY FASTCALL KiSetAffinityThread(IN PKTHREAD Thread, IN KAFFINITY Affinity)
#define ASSERT_IRQL_LESS_OR_EQUAL(x)
DECLSPEC_NORETURN NTSYSAPI VOID NTAPI RtlRaiseStatus(_In_ NTSTATUS Status)
VOID FASTCALL KiUnwaitThread(IN PKTHREAD Thread, IN LONG_PTR WaitStatus, IN KPRIORITY Increment)
ULONG NTAPI KeForceResumeThread(IN PKTHREAD Thread)
LIST_ENTRY ThreadListEntry
#define STATUS_INSUFFICIENT_RESOURCES
FORCEINLINE VOID KiAcquireProcessLockRaiseToSynch(IN PKPROCESS Process, IN PKLOCK_QUEUE_HANDLE Handle)
VOID NTAPI KeStartThread(IN OUT PKTHREAD Thread)
UCHAR NTAPI KeFindNextRightSetAffinity(IN UCHAR Number, IN ULONG Set)
FORCEINLINE VOID KiReleasePrcbLock(IN PKPRCB Prcb)
KAFFINITY NTAPI KeSetAffinityThread(IN PKTHREAD Thread, IN KAFFINITY Affinity)
_In_ ULONG _In_opt_ POBJECT_ATTRIBUTES _In_opt_ HANDLE _Out_opt_ PCLIENT_ID _In_ PKSTART_ROUTINE StartRoutine
#define UNREFERENCED_PARAMETER(P)
struct _LIST_ENTRY * Blink
VOID NTAPI KeRevertToUserAffinityThread(VOID)
VOID NTAPI MmDeleteKernelStack(PVOID Stack, BOOLEAN GuiStack)
#define _KeGetPreviousMode()
FORCEINLINE VOID KiSetThreadSwapBusy(IN PKTHREAD Thread)
_In_ ULONGLONG _In_ ULONGLONG _In_ BOOLEAN Enable
FORCEINLINE struct _KPRCB * KeGetCurrentPrcb(VOID)
VOID NTAPI KeThawAllThreads(VOID)
VOID NTAPI KeReadyThread(IN PKTHREAD Thread)
PKTHREAD FASTCALL KiSelectNextThread(IN PKPRCB Prcb)
#define LOW_REALTIME_PRIORITY
VOID FASTCALL KiWaitTest(PVOID Object, KPRIORITY Increment)
LONG NTAPI KeSetBasePriorityThread(IN PKTHREAD Thread, IN LONG Increment)
#define AFFINITY_MASK(Id)
KPRIORITY NTAPI KeQueryPriorityThread(IN PKTHREAD Thread)
VOID FASTCALL KiInsertQueueApc(IN PKAPC Apc, IN KPRIORITY PriorityBoost)
#define InsertTailList(ListHead, Entry)
FORCEINLINE VOID KiReleaseApcLock(IN PKLOCK_QUEUE_HANDLE Handle)
NTSTATUS NTAPI KeWaitForSingleObject(IN PVOID Object, IN KWAIT_REASON WaitReason, IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Timeout OPTIONAL)
BOOLEAN NTAPI KeIsExecutingDpc(VOID)
struct _KTHREAD * NextThread
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
VOID NTAPI KeUninitThread(IN PKTHREAD Thread)
VOID NTAPI KeSetSystemAffinityThread(IN KAFFINITY Affinity)
#define ASSERT_THREAD(object)
BOOLEAN NTAPI KeTestAlertThread(IN KPROCESSOR_MODE AlertMode)
BOOLEAN NTAPI KeAlertThread(IN PKTHREAD Thread, IN KPROCESSOR_MODE AlertMode)
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
FORCEINLINE SCHAR KiComputeNewPriority(IN PKTHREAD Thread, IN SCHAR Adjustment)
LIST_ENTRY PspReaperListHead
WORK_QUEUE_ITEM PspReaperWorkItem
EX_WORK_QUEUE ExWorkerQueue[MaximumWorkQueue]
KPRIORITY NTAPI KeQueryBasePriorityThread(IN PKTHREAD Thread)
VOID NTAPI KeInitializeThread(IN PKPROCESS Process, IN OUT PKTHREAD Thread, IN PKSYSTEM_ROUTINE SystemRoutine, IN PKSTART_ROUTINE StartRoutine, IN PVOID StartContext, IN PCONTEXT Context, IN PVOID Teb, IN PVOID KernelStack)
VOID NTAPI KiInitializeContextThread(PKTHREAD Thread, PKSYSTEM_ROUTINE SystemRoutine, PKSTART_ROUTINE StartRoutine, PVOID StartContext, PCONTEXT Context)
VOID NTAPI KeFreezeAllThreads(VOID)
VOID(NTAPI * PKSYSTEM_ROUTINE)(PKSTART_ROUTINE StartRoutine, PVOID StartContext)
FORCEINLINE VOID KiAcquireApcLockAtSynchLevel(IN PKTHREAD Thread, IN PKLOCK_QUEUE_HANDLE Handle)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
KSTART_ROUTINE * PKSTART_ROUTINE
VOID NTAPI DbgBreakPoint(VOID)
VOID NTAPI KiSuspendThread(IN PVOID NormalContext, IN PVOID SystemArgument1, IN PVOID SystemArgument2)
#define _KeGetCurrentThread()
ULONG SystemAffinityActive
VOID FASTCALL KiSetPriorityThread(IN PKTHREAD Thread, IN KPRIORITY Priority)
#define InterlockedCompareExchangePointer
BOOLEAN NTAPI KeSetDisableBoostThread(IN OUT PKTHREAD Thread, IN BOOLEAN Disable)
#define InterlockedBitTestAndReset
FORCEINLINE VOID KeInitializeSpinLock(_Out_ PKSPIN_LOCK SpinLock)
FORCEINLINE VOID KiAcquirePrcbLock(IN PKPRCB Prcb)
LIST_ENTRY MutantListEntry
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
VOID NTAPI KeInitializeTimer(OUT PKTIMER Timer)
NTSTATUS NTAPI KeInitThread(IN OUT PKTHREAD Thread, IN PVOID KernelStack, IN PKSYSTEM_ROUTINE SystemRoutine, IN PKSTART_ROUTINE StartRoutine, IN PVOID StartContext, IN PCONTEXT Context, IN PVOID Teb, IN PKPROCESS Process)
VOID NTAPI KeBoostPriorityThread(IN PKTHREAD Thread, IN KPRIORITY Increment)
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)
VOID NTAPI KiReadyThread(IN PKTHREAD Thread)
VOID NTAPI KeTerminateThread(IN KPRIORITY Increment)
#define InterlockedBitTestAndSet
_In_opt_ PVOID _In_opt_ PVOID SystemArgument1
FORCEINLINE VOID KiAcquireThreadLock(IN PKTHREAD Thread)
struct _LIST_ENTRY * Flink
VOID NTAPI KeInitializeSemaphore(IN PKSEMAPHORE Semaphore, IN LONG Count, IN LONG Limit)
struct _KNODE * ParentNode
#define NT_SUCCESS(StatCode)
#define EXCEPTION_EXECUTE_HANDLER
_In_ ULONG _In_ ULONG _In_ ULONG _Out_ PKIRQL _Out_ PKAFFINITY Affinity
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
#define KERNEL_STACK_SIZE
#define STATUS_UNSUCCESSFUL
FORCEINLINE VOID KiReleaseProcessLock(IN PKLOCK_QUEUE_HANDLE Handle)
ULONG NTAPI KeAlertResumeThread(IN PKTHREAD Thread)
_In_ WDFINTERRUPT _In_ WDF_INTERRUPT_POLICY _In_ WDF_INTERRUPT_PRIORITY Priority
#define ASSERT_MUTANT(Object)
#define MAXIMUM_SUSPEND_COUNT
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
#define KeEnterCriticalRegion()
FORCEINLINE VOID KiReleaseDispatcherLockFromSynchLevel(VOID)
FORCEINLINE VOID KiAcquireApcLockRaiseToSynch(IN PKTHREAD Thread, IN PKLOCK_QUEUE_HANDLE Handle)
_In_opt_ PENTER_STATE_SYSTEM_HANDLER _In_opt_ PVOID _In_ LONG _In_opt_ LONG volatile * Number
KAFFINITY KeActiveProcessors
_Must_inspect_result_ _In_ PWDF_TIMER_CONFIG _In_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFTIMER * Timer
FORCEINLINE VOID KiReleaseProcessLockFromSynchLevel(IN PKLOCK_QUEUE_HANDLE Handle)
_In_opt_ PVOID _In_opt_ PVOID _In_opt_ PVOID SystemArgument2
VOID NTAPI KeCapturePersistentThreadState(IN PVOID CurrentThread, IN ULONG Setting1, IN ULONG Setting2, IN ULONG Setting3, IN ULONG Setting4, IN ULONG Setting5, IN PVOID ThreadState)
FORCEINLINE VOID KiReleaseApcLockFromSynchLevel(IN PKLOCK_QUEUE_HANDLE Handle)
#define KeLeaveCriticalRegion()
FORCEINLINE VOID KiReleaseDispatcherLock(IN KIRQL OldIrql)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
FORCEINLINE KIRQL KiAcquireDispatcherLock(VOID)
KPRIORITY NTAPI KeSetPriorityThread(IN PKTHREAD Thread, IN KPRIORITY Priority)
LONG_PTR FASTCALL KiSwapThread(IN PKTHREAD Thread, IN PKPRCB Prcb)
UINT64 MultiThreadProcessorSet
PKPRCB KiProcessorBlock[]
#define InitializeListHead(ListHead)
LONG NTAPI KiInsertQueue(IN PKQUEUE Queue, IN PLIST_ENTRY Entry, BOOLEAN Head)
VOID NTAPI KeRundownThread(VOID)
FORCEINLINE VOID KiRundownThread(IN PKTHREAD Thread)
ULONG NTAPI KeResumeThread(IN PKTHREAD Thread)
UCHAR NTAPI KeGetPreviousMode(VOID)
VOID FASTCALL KiActivateWaiterQueue(IN PKQUEUE Queue)
struct _KTHREAD *RESTRICTED_POINTER OwnerThread
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
ULONG KiMask32Array[MAXIMUM_PRIORITY]
KSERVICE_TABLE_DESCRIPTOR KeServiceDescriptorTable[SSDT_MAX_ENTRIES]
PKTHREAD NTAPI KeGetCurrentThread(VOID)
BOOLEAN NTAPI KeReadStateThread(IN PKTHREAD Thread)
struct _ETHREAD * PETHREAD
*LockHandle LockHandle _Out_ PKLOCK_QUEUE_HANDLE LockHandle
VOID NTAPI KiSuspendRundown(IN PKAPC Apc)
#define _SEH2_EXCEPT(...)
VOID(NTAPI * PKNORMAL_ROUTINE)(IN PVOID NormalContext OPTIONAL, IN PVOID SystemArgument1 OPTIONAL, IN PVOID SystemArgument2 OPTIONAL)
UCHAR NTAPI KeSetIdealProcessorThread(IN PKTHREAD Thread, IN UCHAR Processor)
PVOID NTAPI MmCreateKernelStack(BOOLEAN GuiStack, UCHAR Node)
FORCEINLINE VOID KxUnwaitThread(IN DISPATCHER_HEADER *Object, IN KPRIORITY Increment)
VOID NTAPI KeLowerIrql(KIRQL NewIrql)
IN OUT PLONG IN OUT PLONG Addend IN OUT PLONG IN LONG Increment
#define STATUS_SUSPEND_COUNT_EXCEEDED
GROUP_AFFINITY UserAffinity
#define THREAD_ALERT_INCREMENT
base of all file and directory entries
VOID NTAPI KeBugCheckEx(_In_ ULONG BugCheckCode, _In_ ULONG_PTR BugCheckParameter1, _In_ ULONG_PTR BugCheckParameter2, _In_ ULONG_PTR BugCheckParameter3, _In_ ULONG_PTR BugCheckParameter4)
VOID NTAPI KiSuspendNop(IN PKAPC Apc, IN PKNORMAL_ROUTINE *NormalRoutine, IN PVOID *NormalContext, IN PVOID *SystemArgument1, IN PVOID *SystemArgument2)
#define THREAD_WAIT_OBJECTS
BOOLEAN NTAPI KeSetKernelStackSwapEnable(IN BOOLEAN Enable)
_In_ WDF_POWER_DEVICE_STATE PreviousState
ULONG NTAPI KeSuspendThread(PKTHREAD Thread)
FORCEINLINE VOID KiAcquireDispatcherLockAtSynchLevel(VOID)
KIRQL NTAPI KeRaiseIrqlToSynchLevel(VOID)