1 #ifndef __NTOSKRNL_INCLUDE_INTERNAL_KE_H
2 #define __NTOSKRNL_INCLUDE_INTERNAL_KE_H
4 /* INCLUDES *****************************************************************/
8 /* INTERNAL KERNEL TYPES ****************************************************/
10 typedef struct _WOW64_PROCESS
13 } WOW64_PROCESS
, *PWOW64_PROCESS
;
15 typedef struct _KPROFILE_SOURCE_OBJECT
17 KPROFILE_SOURCE Source
;
19 } KPROFILE_SOURCE_OBJECT
, *PKPROFILE_SOURCE_OBJECT
;
21 /* Cached modules from the loader block */
22 typedef enum _CACHED_MODULE_TYPE
29 MaximumCachedModuleType
,
30 } CACHED_MODULE_TYPE
, *PCACHED_MODULE_TYPE
;
31 extern PLOADER_MODULE CachedModules
[MaximumCachedModuleType
];
33 struct _KIRQ_TRAPFRAME
;
36 struct _KEXCEPTION_FRAME
;
38 extern PVOID KeUserApcDispatcher
;
39 extern PVOID KeUserCallbackDispatcher
;
40 extern PVOID KeUserExceptionDispatcher
;
41 extern PVOID KeRaiseUserExceptionDispatcher
;
42 extern LARGE_INTEGER SystemBootTime
;
43 extern ULONG_PTR KERNEL_BASE
;
45 /* MACROS *************************************************************************/
47 #define KeEnterCriticalRegion() \
49 PKTHREAD _Thread = KeGetCurrentThread(); \
50 if (_Thread) _Thread->KernelApcDisable--; \
53 #define KeLeaveCriticalRegion() \
55 PKTHREAD _Thread = KeGetCurrentThread(); \
56 if((_Thread) && (++_Thread->KernelApcDisable == 0)) \
58 if (!IsListEmpty(&_Thread->ApcState.ApcListHead[KernelMode]) && \
59 (_Thread->SpecialApcDisable == 0)) \
61 KiKernelApcDeliveryCheck(); \
66 #define KEBUGCHECKWITHTF(a,b,c,d,e,f) \
67 DbgPrint("KeBugCheckWithTf at %s:%i\n",__FILE__,__LINE__), KeBugCheckWithTf(a,b,c,d,e,f)
69 #define MAXIMUM_PROCESSORS 32
72 /* INTERNAL KERNEL FUNCTIONS ************************************************/
74 /* threadsch.c ********************************************************************/
76 /* Thread Scheduler Functions */
78 /* Readies a Thread for Execution. */
81 KiDispatchThreadNoLock(ULONG NewThreadStatus
);
83 /* Readies a Thread for Execution. */
86 KiDispatchThread(ULONG NewThreadStatus
);
88 /* Puts a Thread into a block state. */
98 /* Removes a thread out of a block state. */
103 PNTSTATUS WaitStatus
,
109 KeSuspendThread(PKTHREAD Thread
);
113 KiSwapContext(PKTHREAD NewThread
);
117 KiAdjustQuantumThread(IN PKTHREAD Thread
);
119 /* gmutex.c ********************************************************************/
123 KiAcquireGuardedMutexContented(PKGUARDED_MUTEX GuardedMutex
);
125 /* gate.c **********************************************************************/
129 KeInitializeGate(PKGATE Gate
);
133 KeSignalGateBoostPriority(PKGATE Gate
);
139 KWAIT_REASON WaitReason
,
140 KPROCESSOR_MODE WaitMode
143 /* ipi.c ********************************************************************/
148 IN PKTRAP_FRAME TrapFrame
,
149 IN
struct _KEXCEPTION_FRAME
* ExceptionFrame
162 VOID (STDCALL
*WorkerRoutine
)(PVOID
),
166 /* next file ***************************************************************/
170 DbgBreakPointNoBugCheck(VOID
);
175 struct _KPROFILE
* Profile
,
176 struct _KPROCESS
* Process
,
180 KPROFILE_SOURCE ProfileSource
,
187 struct _KPROFILE
* Profile
,
193 KeStopProfile(struct _KPROFILE
* Profile
);
197 KeQueryIntervalProfile(KPROFILE_SOURCE ProfileSource
);
201 KeSetIntervalProfile(
202 KPROFILE_SOURCE ProfileSource
,
209 PKTRAP_FRAME TrapFrame
214 KeProfileInterruptWithSource(
215 IN PKTRAP_FRAME TrapFrame
,
216 IN KPROFILE_SOURCE Source
221 KiRosPrintAddress(PVOID Address
);
226 PKTRAP_FRAME TrapFrame
,
233 PKTRAP_FRAME TrapFrame
,
241 PVOID DeferredContext
,
242 PVOID SystemArgument1
,
243 PVOID SystemArgument2
249 KeAcquireDispatcherDatabaseLock(VOID
);
254 KeAcquireDispatcherDatabaseLockAtDpcLevel(VOID
);
259 KeReleaseDispatcherDatabaseLock(KIRQL Irql
);
264 KeReleaseDispatcherDatabaseLockFromDpcLevel(VOID
);
269 struct _KPROCESS
* Process
,
271 PKSYSTEM_ROUTINE SystemRoutine
,
272 PKSTART_ROUTINE StartRoutine
,
281 KeRundownThread(VOID
);
285 KeReleaseThread(PKTHREAD Thread
);
289 KeQueryBasePriorityThread(IN PKTHREAD Thread
);
301 KiDispatcherObjectWake(
302 DISPATCHER_HEADER
* hdr
,
318 KeInitializeDispatcherHeader(
319 DISPATCHER_HEADER
* Header
,
327 KeDumpStackFrames(PULONG Frame
);
344 struct _KPROCESS
*Process
,
347 LARGE_INTEGER DirectoryTableBase
352 KeForceResumeThread(IN PKTHREAD Thread
);
356 KeDisableThreadApcQueueing(IN PKTHREAD Thread
);
362 LARGE_INTEGER DueTime
369 PDISPATCHER_HEADER Object
,
377 PDISPATCHER_HEADER Object
,
384 KiSatisifyMultipleObjectWaits(PKWAIT_BLOCK WaitBlock
);
389 PDISPATCHER_HEADER Object
,
395 KeGetStackTopThread(struct _ETHREAD
* Thread
);
399 KeContextToTrapFrame(
401 PKEXCEPTION_FRAME ExeptionFrame
,
402 PKTRAP_FRAME TrapFrame
,
403 KPROCESSOR_MODE PreviousMode
409 KPROCESSOR_MODE PreviousMode
,
411 PKTRAP_FRAME TrapFrame
416 KiKernelApcDeliveryCheck(VOID
);
422 IN PLIST_ENTRY Entry
,
429 struct _KPROCESS
* Process
,
435 KeInitializeEventPair(PKEVENT_PAIR EventPair
);
440 IN PKEXCEPTION_FRAME Reserved
,
441 IN PKTRAP_FRAME TrapFrame
,
442 IN PKNORMAL_ROUTINE NormalRoutine
,
443 IN PVOID NormalContext
,
444 IN PVOID SystemArgument1
,
445 IN PVOID SystemArgument2
452 IN KPROCESSOR_MODE PreviousMode
458 struct _KTHREAD
*Thread
,
459 struct _KPROCESS
*Process
,
461 struct _KAPC_STATE
*SavedApcState
467 struct _KPROCESS
*NewProcess
,
468 struct _KPROCESS
*OldProcess
473 KeTestAlertThread(IN KPROCESSOR_MODE AlertMode
);
477 KeRemoveQueueApc(PKAPC Apc
);
481 KiWakeQueue(IN PKQUEUE Queue
);
485 KeRundownQueue(IN PKQUEUE Queue
);
487 /* INITIALIZATION FUNCTIONS *************************************************/
491 KeInitExceptions(VOID
);
495 KeInitInterrupts(VOID
);
503 KeInitDpc(struct _KPRCB
* Prcb
);
507 KeInitDispatcher(VOID
);
512 KeInitializeDispatcher(VOID
);
516 KiInitializeSystemClock(VOID
);
520 KiInitializeBugCheck(VOID
);
524 Phase1Initialization(PVOID Context
);
530 PULONG LastKernelAddress
539 KiDeliverUserApc(PKTRAP_FRAME TrapFrame
);
544 PKAPC_STATE OldState
,
551 KPROFILE_SOURCE Source
,
558 PEXCEPTION_RECORD ExceptionRecord
,
559 PKEXCEPTION_FRAME ExceptionFrame
,
561 KPROCESSOR_MODE PreviousMode
,
567 KeTrapFrameToContext(
568 IN PKTRAP_FRAME TrapFrame
,
569 IN PKEXCEPTION_FRAME ExceptionFrame
,
570 IN OUT PCONTEXT Context
575 KeApplicationProcessorInit(VOID
);
579 KePrepareForApplicationProcessorInit(ULONG id
);
591 KePushAndStackSwitchAndSysRet(
598 KeStackSwitchAndRet(PVOID NewStack
);
604 ULONG BugCheckParameter1
,
605 ULONG BugCheckParameter2
,
606 ULONG BugCheckParameter3
,
607 ULONG BugCheckParameter4
,
621 KeFlushCurrentTb(VOID
);
625 KeRosDumpStackFrames(
639 KiSetSystemTime(PLARGE_INTEGER NewSystemTime
);
645 PKV86M_REGISTERS Regs
656 #endif /* __NTOSKRNL_INCLUDE_INTERNAL_KE_H */