47 NextEntry = ListHead->
Flink;
48 while (NextEntry != ListHead)
52 NextEntry = NextEntry->
Flink;
55 if (
Timer->DueTime.QuadPart <= CurrentTime.QuadPart)
62 DPRINT1(
"Invalid timer state!\n");
136 while (ListHead != ListHead->
Flink)
140 NextEntry = ListHead->
Flink;
145 if ((NextEntry != ListHead) &&
155 Timer->Header.SignalState = 1;
158 TimerDpc =
Timer->Dpc;
211 DpcEntry[DpcCalls].
Dpc = TimerDpc;
220 if (!(ActiveTimers) || !(
Timers))
226 for (
i = 0; DpcCalls; DpcCalls--,
i++)
251 if (NextEntry != ListHead)
255 Timer->DueTime.QuadPart);
260 Timer->DueTime.QuadPart;
274 for (
i = 0; DpcCalls; DpcCalls--,
i++)
312 for (
i = 0; DpcCalls; DpcCalls--,
i++)
355 while (ExpiredListHead->Flink != ExpiredListHead)
367 Timer->Header.SignalState = 1;
370 TimerDpc =
Timer->Dpc;
423 DpcEntry[DpcCalls].
Dpc = TimerDpc;
439 for (
i = 0; DpcCalls; DpcCalls--,
i++)
488 (
Thread->ApcState.Process->DisableQuantum))
548 KxQueueReadyThread(
Thread, Prcb);
576 ListHead = &DpcData->DpcListHead;
582 Prcb->DpcRoutineActive =
TRUE;
585 if (Prcb->TimerRequest)
588 TimerHand = Prcb->TimerHand;
589 Prcb->TimerRequest = 0;
602 DpcEntry = ListHead->
Flink;
605 if (DpcEntry != ListHead)
613 DeferredRoutine =
Dpc->DeferredRoutine;
623 Prcb->DebugDpcTime = 0;
653 Prcb->DpcRoutineActive =
FALSE;
654 Prcb->DpcInterruptRequested =
FALSE;
658 if (Prcb->DeferredReadyListHead.Next)
687 Dpc->DeferredRoutine = DeferredRoutine;
755 ASSERT(Prcb == CurrentPrcb);
780 DpcConfigured =
TRUE;
810 if (Prcb != CurrentPrcb)
856 if (Prcb != CurrentPrcb)
870 return DpcConfigured;
888 DpcData =
Dpc->DpcData;
895 if (DpcData ==
Dpc->DpcData)
996 ReverseBarrier.
Barrier = Barrier;
#define KeQuerySystemTime(t)
#define KeGetCurrentIrql()
#define MAXIMUM_PROCESSORS
FORCEINLINE VOID KiReleaseThreadLock(IN PKTHREAD Thread)
ULONG KiAdjustDpcThreshold
_Must_inspect_result_ _In_ PWDF_DPC_CONFIG _In_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFDPC * Dpc
FORCEINLINE VOID KiReleasePrcbLock(IN PKPRCB Prcb)
VOID NTAPI KiTimerExpiration(IN PKDPC Dpc, IN PVOID DeferredContext, IN PVOID SystemArgument1, IN PVOID SystemArgument2)
#define UNREFERENCED_PARAMETER(P)
FORCEINLINE VOID InsertHeadList(_Inout_ PLIST_ENTRY ListHead, _Inout_ __drv_aliasesMem PLIST_ENTRY Entry)
FORCEINLINE VOID KxUnwaitThreadForEvent(IN PKEVENT Event, IN KPRIORITY Increment)
void __cdecl _enable(void)
FORCEINLINE PKSPIN_LOCK_QUEUE KiAcquireTimerLock(IN ULONG Hand)
VOID NTAPI KeAcquireSpinLockAtDpcLevel(IN PKSPIN_LOCK SpinLock)
BOOLEAN NTAPI KeInsertQueueDpc(IN PKDPC Dpc, IN PVOID SystemArgument1, IN PVOID SystemArgument2)
FORCEINLINE VOID KiSetThreadSwapBusy(IN PKTHREAD Thread)
_In_ ULONGLONG _In_ ULONGLONG _In_ BOOLEAN Enable
FORCEINLINE struct _KPRCB * KeGetCurrentPrcb(VOID)
VOID NTAPI KeSetImportanceDpc(IN PKDPC Dpc, IN KDPC_IMPORTANCE Importance)
BOOLEAN NTAPI KeRemoveQueueDpc(IN PKDPC Dpc)
_In_ LARGE_INTEGER _In_ ULONG Period
#define LOW_REALTIME_PRIORITY
VOID NTAPI KiQuantumEnd(VOID)
VOID NTAPI KiInitializeDpc(IN PKDPC Dpc, IN PKDEFERRED_ROUTINE DeferredRoutine, IN PVOID DeferredContext, IN KOBJECTS Type)
#define AFFINITY_MASK(Id)
#define InsertTailList(ListHead, Entry)
ULONG KiTimeLimitIsrMicroseconds
#define ASSERT_DPC(Object)
VOID NTAPI KiCheckTimerTable(IN ULARGE_INTEGER CurrentTime)
LONG NTAPI KeSetEvent(IN PKEVENT Event, IN KPRIORITY Increment, IN BOOLEAN Wait)
BOOLEAN NTAPI KeIsExecutingDpc(VOID)
struct _KTHREAD * NextThread
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
BOOLEAN FASTCALL KiSwapContext(IN KIRQL WaitIrql, IN PKTHREAD CurrentThread)
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
VOID NTAPI KeInitializeThreadedDpc(IN PKDPC Dpc, IN PKDEFERRED_ROUTINE DeferredRoutine, IN PVOID DeferredContext)
FORCEINLINE SCHAR KiComputeNewPriority(IN PKTHREAD Thread, IN SCHAR Adjustment)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
FAST_MUTEX KiGenericCallDpcMutex
VOID NTAPI DbgBreakPoint(VOID)
#define InterlockedCompareExchangePointer
struct _KTHREAD * CurrentThread
FORCEINLINE VOID KiAcquirePrcbLock(IN PKPRCB Prcb)
VOID FASTCALL KiTimerListExpire(IN PLIST_ENTRY ExpiredListHead, IN KIRQL OldIrql)
FORCEINLINE BOOLEAN KeDisableInterrupts(VOID)
BOOLEAN KeThreadDpcEnable
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)
_In_opt_ PVOID _In_opt_ PVOID SystemArgument1
FORCEINLINE VOID KiAcquireThreadLock(IN PKTHREAD Thread)
enum _KDPC_IMPORTANCE KDPC_IMPORTANCE
struct _LIST_ENTRY * Flink
_In_ WDFCOLLECTION _In_ ULONG Index
BOOLEAN FASTCALL KiInsertTreeTimer(IN PKTIMER Timer, IN LARGE_INTEGER Interval)
VOID NTAPI KeReleaseSpinLockFromDpcLevel(IN PKSPIN_LOCK SpinLock)
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
KTIMER_TABLE_ENTRY KiTimerTableListHead[TIMER_TABLE_SIZE]
#define InterlockedDecrement
NTKERNELAPI volatile KSYSTEM_TIME KeTickCount
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
KDEFERRED_ROUTINE * PKDEFERRED_ROUTINE
UCHAR DpcInterruptRequested
VOID FASTCALL KiIpiSend(KAFFINITY TargetSet, ULONG IpiRequest)
_In_opt_ PENTER_STATE_SYSTEM_HANDLER _In_opt_ PVOID _In_ LONG _In_opt_ LONG volatile * Number
KAFFINITY KeActiveProcessors
#define InterlockedExchange
_Must_inspect_result_ _In_ PWDF_TIMER_CONFIG _In_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFTIMER * Timer
_In_opt_ PVOID _In_opt_ PVOID _In_opt_ PVOID SystemArgument2
VOID FASTCALL HalRequestSoftwareInterrupt(IN KIRQL Irql)
volatile ULONG DpcQueueDepth
VOID FASTCALL KiReleaseSpinLock(IN PKSPIN_LOCK SpinLock)
FORCEINLINE VOID KiReleaseDispatcherLock(IN KIRQL OldIrql)
FORCEINLINE PKTHREAD KiSelectReadyThread(IN KPRIORITY Priority, IN PKPRCB Prcb)
VOID NTAPI KeSignalCallDpcDone(IN PVOID SystemArgument1)
VOID FASTCALL KiRetireDpcList(IN PKPRCB Prcb)
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)
PKDEFERRED_ROUTINE Routine
VOID NTAPI KeGenericCallDpc(IN PKDEFERRED_ROUTINE Routine, IN PVOID Context)
PKPRCB KiProcessorBlock[]
VOID FASTCALL KiAcquireSpinLock(IN PKSPIN_LOCK SpinLock)
FORCEINLINE VOID KiRemoveEntryTimer(IN PKTIMER Timer)
VOID NTAPI KeRaiseIrql(KIRQL NewIrql, PKIRQL OldIrql)
ULONG KiMaximumDpcQueueDepth
_Requires_lock_not_held_(Prcb->PrcbLock) VOID NTAPI KiQuantumEnd(VOID)
_In_ KDPC_IMPORTANCE Importance
VOID NTAPI KeSetTargetProcessorDpc(IN PKDPC Dpc, IN CCHAR Number)
#define UNIMPLEMENTED_FATAL(...)
void __cdecl _disable(void)
FORCEINLINE VOID KxUnwaitThread(IN DISPATCHER_HEADER *Object, IN KPRIORITY Increment)
VOID NTAPI KeLowerIrql(KIRQL NewIrql)
VOID NTAPI KeInitializeDpc(IN PKDPC Dpc, IN PKDEFERRED_ROUTINE DeferredRoutine, IN PVOID DeferredContext)
LONG MaximumDpcQueueDepth
PKDEFERRED_ROUTINE DeferredRoutine
VOID NTAPI KeFlushQueuedDpcs(VOID)
_In_ LONG _In_ LONG Limit
ULONGLONG NTAPI KeQueryInterruptTime(VOID)
static PLARGE_INTEGER Time
#define Int32x32To64(a, b)
FORCEINLINE VOID KiReleaseTimerLock(IN PKSPIN_LOCK_QUEUE LockQueue)
BOOLEAN NTAPI KeSignalCallDpcSynchronize(IN PVOID SystemArgument2)
KIRQL NTAPI KeRaiseIrqlToSynchLevel(VOID)
VOID FASTCALL KiProcessDeferredReadyList(IN PKPRCB Prcb)
_In_opt_ PVOID DeferredContext