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++)
487 (
Thread->ApcState.Process->DisableQuantum))
575 ListHead = &DpcData->DpcListHead;
581 Prcb->DpcRoutineActive =
TRUE;
584 if (Prcb->TimerRequest)
587 TimerHand = Prcb->TimerHand;
588 Prcb->TimerRequest = 0;
601 DpcEntry = ListHead->
Flink;
604 if (DpcEntry != ListHead)
612 DeferredRoutine =
Dpc->DeferredRoutine;
622 Prcb->DebugDpcTime = 0;
652 Prcb->DpcRoutineActive =
FALSE;
653 Prcb->DpcInterruptRequested =
FALSE;
657 if (Prcb->DeferredReadyListHead.Next)
686 Dpc->DeferredRoutine = DeferredRoutine;
754 ASSERT(Prcb == CurrentPrcb);
779 DpcConfigured =
TRUE;
809 if (Prcb != CurrentPrcb)
855 if (Prcb != CurrentPrcb)
869 return DpcConfigured;
887 DpcData =
Dpc->DpcData;
894 if (DpcData ==
Dpc->DpcData)
995 ReverseBarrier.
Barrier = Barrier;
#define KeQuerySystemTime(t)
#define KeGetCurrentIrql()
#define MAXIMUM_PROCESSORS
FORCEINLINE VOID KiReleaseThreadLock(IN PKTHREAD Thread)
ULONG KiAdjustDpcThreshold
#define KeRaiseIrql(irql, oldIrql)
#define KeLowerIrql(oldIrql)
_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 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)
FORCEINLINE VOID KxQueueReadyThread(IN PKTHREAD Thread, IN PKPRCB Prcb)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
FAST_MUTEX KiGenericCallDpcMutex
VOID FASTCALL KiReleaseSpinLock(IN PKSPIN_LOCK SpinLock)
#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
VOID NTAPI KiQuantumEnd(VOID)
_In_opt_ PVOID _In_opt_ PVOID _In_opt_ PVOID SystemArgument2
VOID FASTCALL HalRequestSoftwareInterrupt(IN KIRQL Irql)
volatile ULONG DpcQueueDepth
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)
ULONG KiMaximumDpcQueueDepth
_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 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