- Fix KiDispatchException to unmask KI_EXCEPTION_INTERNAL when setting the exception...
[reactos.git] / reactos / ntoskrnl / include / internal / ke.h
index 373c46c..fcabe24 100644 (file)
@@ -18,103 +18,274 @@ typedef struct _KPROFILE_SOURCE_OBJECT
     LIST_ENTRY ListEntry;
 } KPROFILE_SOURCE_OBJECT, *PKPROFILE_SOURCE_OBJECT;
 
-/* Cached modules from the loader block */
-typedef enum _CACHED_MODULE_TYPE
+typedef enum _CONNECT_TYPE
 {
-    AnsiCodepage,
-    OemCodepage,
-    UnicodeCasemap,
-    SystemRegistry,
-    HardwareRegistry,
-    MaximumCachedModuleType,
-} CACHED_MODULE_TYPE, *PCACHED_MODULE_TYPE;
-extern PLOADER_MODULE CachedModules[MaximumCachedModuleType];
-
-struct _KIRQ_TRAPFRAME;
-struct _KPCR;
-struct _KPRCB;
-struct _KEXCEPTION_FRAME;
+    NoConnect,
+    NormalConnect,
+    ChainConnect,
+    UnknownConnect
+} CONNECT_TYPE, *PCONNECT_TYPE;
 
+typedef struct _DISPATCH_INFO
+{
+    CONNECT_TYPE Type;
+    PKINTERRUPT Interrupt;
+    PKINTERRUPT_ROUTINE NoDispatch;
+    PKINTERRUPT_ROUTINE InterruptDispatch;
+    PKINTERRUPT_ROUTINE FloatingDispatch;
+    PKINTERRUPT_ROUTINE ChainedDispatch;
+    PKINTERRUPT_ROUTINE *FlatDispatch;
+} DISPATCH_INFO, *PDISPATCH_INFO;
+
+typedef struct _KI_SAMPLE_MAP
+{
+    LARGE_INTEGER PerfStart;
+    LARGE_INTEGER PerfEnd;
+    LONGLONG PerfDelta;
+    LARGE_INTEGER PerfFreq;
+    LONGLONG TSCStart;
+    LONGLONG TSCEnd;
+    LONGLONG TSCDelta;
+    ULONG MHz;
+} KI_SAMPLE_MAP, *PKI_SAMPLE_MAP;
+
+typedef struct _KTIMER_TABLE_ENTRY
+{
+    LIST_ENTRY Entry;
+    ULARGE_INTEGER Time;
+} KTIMER_TABLE_ENTRY, *PKTIMER_TABLE_ENTRY;
+
+#define MAX_TIMER_DPCS                      16
+
+typedef struct _DPC_QUEUE_ENTRY
+{
+    PKDPC Dpc;
+    PKDEFERRED_ROUTINE Routine;
+    PVOID Context;
+} DPC_QUEUE_ENTRY, *PDPC_QUEUE_ENTRY;
+
+typedef PCHAR
+(NTAPI *PKE_BUGCHECK_UNICODE_TO_ANSI)(
+    IN PUNICODE_STRING Unicode,
+    IN PCHAR Ansi,
+    IN ULONG Length
+);
+
+extern ULONG_PTR MmFreeLdrFirstKrnlPhysAddr;
+extern ULONG_PTR MmFreeLdrLastKrnlPhysAddr;
+extern ULONG_PTR MmFreeLdrLastKernelAddress;
+
+extern PVOID KeUserApcDispatcher;
+extern PVOID KeUserCallbackDispatcher;
+extern PVOID KeUserExceptionDispatcher;
+extern PVOID KeRaiseUserExceptionDispatcher;
+extern LARGE_INTEGER KeBootTime;
+extern ULONGLONG KeBootTimeBias;
+extern BOOLEAN ExCmosClockIsSane;
+extern ULONG KeI386NpxPresent;
+extern ULONG KeI386XMMIPresent;
+extern ULONG KeI386FxsrPresent;
+extern ULONG KiMXCsrMask;
+extern ULONG KeI386CpuType;
+extern ULONG KeI386CpuStep;
+extern ULONG KeProcessorArchitecture;
+extern ULONG KeProcessorLevel;
+extern ULONG KeProcessorRevision;
+extern ULONG KeFeatureBits;
+extern ULONG Ke386GlobalPagesEnabled;
+extern BOOLEAN KiI386PentiumLockErrataPresent;
+extern KNODE KiNode0;
+extern PKNODE KeNodeBlock[1];
+extern UCHAR KeNumberNodes;
+extern UCHAR KeProcessNodeSeed;
+extern ETHREAD KiInitialThread;
+extern EPROCESS KiInitialProcess;
+extern ULONG KiInterruptTemplate[KINTERRUPT_DISPATCH_CODES];
+extern PULONG KiInterruptTemplateObject;
+extern PULONG KiInterruptTemplateDispatch;
+extern PULONG KiInterruptTemplate2ndDispatch;
+extern ULONG KiUnexpectedEntrySize;
+extern PVOID Ki386IopmSaveArea;
+extern ULONG KeI386EFlagsAndMaskV86;
+extern ULONG KeI386EFlagsOrMaskV86;
+extern BOOLEAN KeI386VirtualIntExtensions;
+extern KIDTENTRY KiIdt[];
+extern KGDTENTRY KiBootGdt[];
+extern KDESCRIPTOR KiGdtDescriptor;
+extern KDESCRIPTOR KiIdtDescriptor;
+extern KTSS KiBootTss;
+extern UCHAR P0BootStack[];
+extern UCHAR KiDoubleFaultStack[];
+extern FAST_MUTEX KernelAddressSpaceLock;
+extern ULONG KiMaximumDpcQueueDepth;
+extern ULONG KiMinimumDpcRate;
+extern ULONG KiAdjustDpcThreshold;
+extern ULONG KiIdealDpcRate;
+extern BOOLEAN KeThreadDpcEnable;
+extern LARGE_INTEGER KiTimeIncrementReciprocal;
+extern UCHAR KiTimeIncrementShiftCount;
+extern ULONG KiTimeLimitIsrMicroseconds;
+extern ULONG KiServiceLimit;
+extern LIST_ENTRY KeBugcheckCallbackListHead, KeBugcheckReasonCallbackListHead;
+extern KSPIN_LOCK BugCheckCallbackLock;
+extern KDPC KiTimerExpireDpc;
+extern KTIMER_TABLE_ENTRY KiTimerTableListHead[TIMER_TABLE_SIZE];
+extern FAST_MUTEX KiGenericCallDpcMutex;
+extern LIST_ENTRY KiProfileListHead, KiProfileSourceListHead;
+extern KSPIN_LOCK KiProfileLock;
+extern LIST_ENTRY KiProcessListHead;
+extern LIST_ENTRY KiProcessInSwapListHead, KiProcessOutSwapListHead;
+extern LIST_ENTRY KiStackInSwapListHead;
+extern KEVENT KiSwapEvent;
+extern PKPRCB KiProcessorBlock[];
+extern ULONG KiMask32Array[MAXIMUM_PRIORITY];
+extern ULONG KiIdleSummary;
+extern VOID KiTrap8(VOID);
+extern VOID KiTrap2(VOID);
+extern VOID KiFastCallEntry(VOID);
 extern PVOID KeUserApcDispatcher;
 extern PVOID KeUserCallbackDispatcher;
 extern PVOID KeUserExceptionDispatcher;
 extern PVOID KeRaiseUserExceptionDispatcher;
-extern LARGE_INTEGER SystemBootTime;
-extern ULONG_PTR KERNEL_BASE;
+extern UCHAR KiDebugRegisterTrapOffsets[9];
+extern UCHAR KiDebugRegisterContextOffsets[9];
+extern ULONG KeTimeIncrement;
+extern ULONG_PTR KiBugCheckData[5];
 
 /* MACROS *************************************************************************/
 
-#define KeEnterCriticalRegion() \
-{ \
-    PKTHREAD _Thread = KeGetCurrentThread(); \
-    if (_Thread) _Thread->KernelApcDisable--; \
-}
-
-#define KeLeaveCriticalRegion() \
-{ \
-    PKTHREAD _Thread = KeGetCurrentThread(); \
-    if((_Thread) && (++_Thread->KernelApcDisable == 0)) \
-    { \
-        if (!IsListEmpty(&_Thread->ApcState.ApcListHead[KernelMode]) && \
-            (_Thread->SpecialApcDisable == 0)) \
-        { \
-            KiKernelApcDeliveryCheck(); \
-        } \
-    } \
+#define AFFINITY_MASK(Id) KiMask32Array[Id]
+#define PRIORITY_MASK(Id) KiMask32Array[Id]
+
+/* The following macro initializes a dispatcher object's header */
+#define KeInitializeDispatcherHeader(Header, t, s, State)                   \
+{                                                                           \
+    (Header)->Type = t;                                                     \
+    (Header)->Absolute = 0;                                                 \
+    (Header)->Inserted = 0;                                                 \
+    (Header)->Size = s;                                                     \
+    (Header)->SignalState = State;                                          \
+    InitializeListHead(&((Header)->WaitListHead));                          \
 }
 
 #define KEBUGCHECKWITHTF(a,b,c,d,e,f) \
-    DbgPrint("KeBugCheckWithTf at %s:%i\n",__FILE__,__LINE__), KeBugCheckWithTf(a,b,c,d,e,f)
+    DbgPrint("KeBugCheckWithTf at %s:%i\n",__FILE__,__LINE__), \
+             KeBugCheckWithTf(a,b,c,d,e,f)
+
+/* Tells us if the Timer or Event is a Syncronization or Notification Object */
+#define TIMER_OR_EVENT_TYPE 0x7L
 
-#define MAXIMUM_PROCESSORS      32
+/* One of the Reserved Wait Blocks, this one is for the Thread's Timer */
+#define TIMER_WAIT_BLOCK 0x3L
 
+/* IOPM Definitions */
+#define IO_ACCESS_MAP_NONE 0
+#define IOPM_OFFSET FIELD_OFFSET(KTSS, IoMaps[0].IoMap)
+#define KiComputeIopmOffset(MapNumber)              \
+    (MapNumber == IO_ACCESS_MAP_NONE) ?             \
+        (USHORT)(sizeof(KTSS)) :                    \
+        (USHORT)(FIELD_OFFSET(KTSS, IoMaps[MapNumber-1].IoMap))
+
+#define SIZE_OF_FX_REGISTERS 32
 
 /* INTERNAL KERNEL FUNCTIONS ************************************************/
 
-/* threadsch.c ********************************************************************/
+/* Finds a new thread to run */
+NTSTATUS
+FASTCALL
+KiSwapThread(
+    IN PKTHREAD Thread,
+    IN PKPRCB Prcb
+);
+
+VOID
+NTAPI
+KeReadyThread(
+    IN PKTHREAD Thread
+);
 
-/* Thread Scheduler Functions */
+BOOLEAN
+NTAPI
+KeSetDisableBoostThread(
+    IN OUT PKTHREAD Thread,
+    IN BOOLEAN Disable
+);
 
-/* Readies a Thread for Execution. */
 VOID
-STDCALL
-KiDispatchThreadNoLock(ULONG NewThreadStatus);
+NTAPI
+KeBalanceSetManager(IN PVOID Context);
 
-/* Readies a Thread for Execution. */
 VOID
-STDCALL
-KiDispatchThread(ULONG NewThreadStatus);
+NTAPI
+KiReadyThread(IN PKTHREAD Thread);
+
+ULONG
+NTAPI
+KeSuspendThread(PKTHREAD Thread);
+
+BOOLEAN
+NTAPI
+KeReadStateThread(IN PKTHREAD Thread);
+
+BOOLEAN
+FASTCALL
+KiSwapContext(
+    IN PKTHREAD CurrentThread,
+    IN PKTHREAD NewThread
+);
 
-/* Puts a Thread into a block state. */
 VOID
-STDCALL
-KiBlockThread(
-    PNTSTATUS Status,
-    UCHAR Alertable,
-    ULONG WaitMode,
-    UCHAR WaitReason
+NTAPI
+KiAdjustQuantumThread(IN PKTHREAD Thread);
+
+VOID
+FASTCALL
+KiExitDispatcher(KIRQL OldIrql);
+
+VOID
+NTAPI
+KiDeferredReadyThread(IN PKTHREAD Thread);
+
+KAFFINITY
+FASTCALL
+KiSetAffinityThread(
+    IN PKTHREAD Thread,
+    IN KAFFINITY Affinity
+);
+
+PKTHREAD
+FASTCALL
+KiSelectNextThread(
+    IN PKPRCB Prcb
 );
 
-/* Removes a thread out of a block state. */
 VOID
-STDCALL
-KiUnblockThread(
-    PKTHREAD Thread,
-    PNTSTATUS WaitStatus,
-    KPRIORITY Increment
+NTAPI
+CPUID(
+    OUT ULONG CpuInfo[4],
+    IN ULONG InfoType
 );
 
-NTSTATUS
-STDCALL
-KeSuspendThread(PKTHREAD Thread);
+BOOLEAN
+FASTCALL
+KiInsertTimerTable(
+    IN PKTIMER Timer,
+    IN ULONG Hand
+);
 
-NTSTATUS
+BOOLEAN
 FASTCALL
-KiSwapContext(PKTHREAD NewThread);
+KiInsertTreeTimer(
+    IN PKTIMER Timer,
+    IN LARGE_INTEGER Interval
+);
 
 VOID
-STDCALL
-KiAdjustQuantumThread(IN PKTHREAD Thread);
+FASTCALL
+KiCompleteTimer(
+    IN PKTIMER Timer,
+    IN PKSPIN_LOCK_QUEUE LockQueue
+);
 
 /* gmutex.c ********************************************************************/
 
@@ -142,13 +313,6 @@ KeWaitForGate(
 
 /* ipi.c ********************************************************************/
 
-BOOLEAN
-STDCALL
-KiIpiServiceRoutine(
-    IN PKTRAP_FRAME TrapFrame,
-    IN struct _KEXCEPTION_FRAME* ExceptionFrame
-);
-
 VOID
 NTAPI
 KiIpiSendRequest(
@@ -156,21 +320,21 @@ KiIpiSendRequest(
     ULONG IpiRequest
 );
 
-VOID
+/* next file ***************************************************************/
+
+UCHAR
 NTAPI
-KeIpiGenericCall(
-    VOID (STDCALL *WorkerRoutine)(PVOID),
-    PVOID Argument
+KeFindNextRightSetAffinity(
+    IN UCHAR Number,
+    IN ULONG Set
 );
 
-/* next file ***************************************************************/
-
 VOID 
-STDCALL
+NTAPI
 DbgBreakPointNoBugCheck(VOID);
 
 VOID
-STDCALL
+NTAPI
 KeInitializeProfile(
     struct _KPROFILE* Profile,
     struct _KPROCESS* Process,
@@ -182,60 +346,49 @@ KeInitializeProfile(
 );
 
 VOID
-STDCALL
+NTAPI
 KeStartProfile(
     struct _KPROFILE* Profile,
     PVOID Buffer
 );
 
-VOID
-STDCALL
+BOOLEAN
+NTAPI
 KeStopProfile(struct _KPROFILE* Profile);
 
 ULONG
-STDCALL
+NTAPI
 KeQueryIntervalProfile(KPROFILE_SOURCE ProfileSource);
 
 VOID
-STDCALL
+NTAPI
 KeSetIntervalProfile(
     KPROFILE_SOURCE ProfileSource,
     ULONG Interval
 );
 
 VOID
-STDCALL
+NTAPI
 KeProfileInterrupt(
     PKTRAP_FRAME TrapFrame
 );
 
 VOID
-STDCALL
+NTAPI
 KeProfileInterruptWithSource(
     IN PKTRAP_FRAME TrapFrame,
     IN KPROFILE_SOURCE Source
 );
 
-BOOLEAN
-STDCALL
-KiRosPrintAddress(PVOID Address);
-
 VOID
-STDCALL
-KeUpdateSystemTime(
-    PKTRAP_FRAME TrapFrame,
-    KIRQL Irql
-);
-
-VOID
-STDCALL
+NTAPI
 KeUpdateRunTime(
     PKTRAP_FRAME TrapFrame,
     KIRQL Irql
 );
 
 VOID
-STDCALL
+NTAPI
 KiExpireTimers(
     PKDPC Dpc,
     PVOID DeferredContext,
@@ -243,83 +396,118 @@ KiExpireTimers(
     PVOID SystemArgument2
 );
 
-KIRQL
-inline
-FASTCALL
-KeAcquireDispatcherDatabaseLock(VOID);
-
 VOID
-__inline
-FASTCALL
-KeAcquireDispatcherDatabaseLockAtDpcLevel(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
-__inline
-FASTCALL
-KeReleaseDispatcherDatabaseLock(KIRQL Irql);
+NTAPI
+KeUninitThread(
+    IN PKTHREAD Thread
+);
 
-VOID
-__inline
-FASTCALL
-KeReleaseDispatcherDatabaseLockFromDpcLevel(VOID);
+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
-STDCALL
-KeInitializeThread(
-    struct _KPROCESS* Process,
-    PKTHREAD Thread,
-    PKSYSTEM_ROUTINE SystemRoutine,
-    PKSTART_ROUTINE StartRoutine,
-    PVOID StartContext,
-    PCONTEXT Context,
-    PVOID Teb,
-    PVOID KernelStack
+NTAPI
+KeStartThread(
+    IN OUT PKTHREAD Thread
+);
+
+BOOLEAN
+NTAPI
+KeAlertThread(
+    IN PKTHREAD Thread,
+    IN KPROCESSOR_MODE AlertMode
+);
+
+ULONG
+NTAPI
+KeAlertResumeThread(
+    IN PKTHREAD Thread
+);
+
+ULONG
+NTAPI
+KeResumeThread(
+    IN PKTHREAD Thread
+);
+
+PVOID
+NTAPI
+KeSwitchKernelStack(
+    IN PVOID StackBase,
+    IN PVOID StackLimit
 );
 
 VOID
-STDCALL
+NTAPI
 KeRundownThread(VOID);
 
 NTSTATUS
 NTAPI
 KeReleaseThread(PKTHREAD Thread);
 
-LONG
-STDCALL
-KeQueryBasePriorityThread(IN PKTHREAD Thread);
+VOID
+NTAPI
+KiSuspendRundown(
+    IN PKAPC Apc
+);
 
 VOID
-STDCALL
-KiSetPriorityThread(
-    PKTHREAD Thread,
-    KPRIORITY Priority,
-    PBOOLEAN Released
+NTAPI
+KiSuspendNop(
+    IN PKAPC Apc,
+    IN PKNORMAL_ROUTINE *NormalRoutine,
+    IN PVOID *NormalContext,
+    IN PVOID *SystemArgument1,
+    IN PVOID *SystemArgument2
 );
 
-BOOLEAN
+VOID
 NTAPI
-KiDispatcherObjectWake(
-    DISPATCHER_HEADER* hdr,
-    KPRIORITY increment
+KiSuspendThread(
+    IN PVOID NormalContext,
+    IN PVOID SystemArgument1,
+    IN PVOID SystemArgument2
 );
 
+LONG
+NTAPI
+KeQueryBasePriorityThread(IN PKTHREAD Thread);
+
 VOID
-STDCALL
-KeExpireTimers(
-    PKDPC Apc,
-    PVOID Arg1,
-    PVOID Arg2,
-    PVOID Arg3
+FASTCALL
+KiSetPriorityThread(
+    IN PKTHREAD Thread,
+    IN KPRIORITY Priority
 );
 
 VOID
-__inline
 FASTCALL
-KeInitializeDispatcherHeader(
-    DISPATCHER_HEADER* Header,
-    ULONG Type,
-    ULONG Size,
-    ULONG SignalState
+KiUnlinkThread(
+    IN PKTHREAD Thread,
+    IN NTSTATUS WaitStatus
 );
 
 VOID
@@ -332,110 +520,115 @@ KiTestAlert(VOID);
 
 VOID
 FASTCALL
-KiAbortWaitThread(
-    PKTHREAD Thread,
-    NTSTATUS WaitStatus,
-    KPRIORITY Increment
+KiUnwaitThread(
+    IN PKTHREAD Thread,
+    IN NTSTATUS WaitStatus,
+    IN KPRIORITY Increment
 );
 
 VOID
-STDCALL
+NTAPI
 KeInitializeProcess(
     struct _KPROCESS *Process,
     KPRIORITY Priority,
     KAFFINITY Affinity,
-    LARGE_INTEGER DirectoryTableBase
+    PLARGE_INTEGER DirectoryTableBase,
+    IN BOOLEAN Enable
+);
+
+VOID
+NTAPI
+KeSetQuantumProcess(
+    IN PKPROCESS Process,
+    IN UCHAR Quantum
+);
+
+KPRIORITY
+NTAPI
+KeSetPriorityAndQuantumProcess(
+    IN PKPROCESS Process,
+    IN KPRIORITY Priority,
+    IN UCHAR Quantum OPTIONAL
 );
 
 ULONG
-STDCALL
+NTAPI
 KeForceResumeThread(IN PKTHREAD Thread);
 
-BOOLEAN
-STDCALL
-KeDisableThreadApcQueueing(IN PKTHREAD Thread);
-
-BOOLEAN
-STDCALL
-KiInsertTimer(
-    PKTIMER Timer,
-    LARGE_INTEGER DueTime
+VOID
+NTAPI
+KeThawAllThreads(
+    VOID
 );
 
 VOID
-inline
-FASTCALL
-KiSatisfyObjectWait(
-    PDISPATCHER_HEADER Object,
-    PKTHREAD Thread
+NTAPI
+KeFreezeAllThreads(
+    VOID
 );
 
 BOOLEAN
-inline
-FASTCALL
-KiIsObjectSignaled(
-    PDISPATCHER_HEADER Object,
-    PKTHREAD Thread
-);
-
-VOID
-inline
-FASTCALL
-KiSatisifyMultipleObjectWaits(PKWAIT_BLOCK WaitBlock);
+NTAPI
+KeDisableThreadApcQueueing(IN PKTHREAD Thread);
 
 VOID
 FASTCALL
 KiWaitTest(
-    PDISPATCHER_HEADER Object,
+    PVOID Object,
     KPRIORITY Increment
 );
 
-PULONG 
+VOID
 NTAPI
-KeGetStackTopThread(struct _ETHREAD* Thread);
-
-BOOLEAN
-STDCALL
 KeContextToTrapFrame(
     PCONTEXT Context,
     PKEXCEPTION_FRAME ExeptionFrame,
     PKTRAP_FRAME TrapFrame,
+    ULONG ContextFlags,
     KPROCESSOR_MODE PreviousMode
 );
 
 VOID
-STDCALL
-KiDeliverApc(
-    KPROCESSOR_MODE PreviousMode,
-    PVOID Reserved,
-    PKTRAP_FRAME TrapFrame
-);
-
-VOID
-STDCALL
-KiKernelApcDeliveryCheck(VOID);
+NTAPI
+KiCheckForKernelApcDelivery(VOID);
 
 LONG
-STDCALL
+NTAPI
 KiInsertQueue(
     IN PKQUEUE Queue,
     IN PLIST_ENTRY Entry,
     BOOLEAN Head
 );
 
+VOID
+NTAPI
+KiTimerExpiration(
+    IN PKDPC Dpc,
+    IN PVOID DeferredContext,
+    IN PVOID SystemArgument1,
+    IN PVOID SystemArgument2
+);
+
+ULONG
+NTAPI
+KiComputeTimerTableIndex(
+    IN LONGLONG TimeValue
+);
+
 ULONG
-STDCALL
+NTAPI
 KeSetProcess(
     struct _KPROCESS* Process,
-    KPRIORITY Increment
+    KPRIORITY Increment,
+    BOOLEAN InWait
 );
 
 VOID
-STDCALL
+NTAPI
 KeInitializeEventPair(PKEVENT_PAIR EventPair);
 
 VOID
-STDCALL
+NTAPI
 KiInitializeUserApc(
     IN PKEXCEPTION_FRAME Reserved,
     IN PKTRAP_FRAME TrapFrame,
@@ -446,74 +639,53 @@ KiInitializeUserApc(
 );
 
 PLIST_ENTRY
-STDCALL
+NTAPI
 KeFlushQueueApc(
     IN PKTHREAD Thread,
     IN KPROCESSOR_MODE PreviousMode
 );
 
 VOID
-STDCALL
+NTAPI
 KiAttachProcess(
     struct _KTHREAD *Thread,
     struct _KPROCESS *Process,
-    KIRQL ApcLock,
+    PKLOCK_QUEUE_HANDLE ApcLock,
     struct _KAPC_STATE *SavedApcState
 );
 
 VOID
-STDCALL
+NTAPI
 KiSwapProcess(
     struct _KPROCESS *NewProcess,
     struct _KPROCESS *OldProcess
 );
 
 BOOLEAN
-STDCALL
+NTAPI
 KeTestAlertThread(IN KPROCESSOR_MODE AlertMode);
 
 BOOLEAN
-STDCALL
+NTAPI
 KeRemoveQueueApc(PKAPC Apc);
 
 VOID
 FASTCALL
-KiWakeQueue(IN PKQUEUE Queue);
-
-PLIST_ENTRY
-STDCALL
-KeRundownQueue(IN PKQUEUE Queue);
+KiActivateWaiterQueue(IN PKQUEUE Queue);
 
 /* INITIALIZATION FUNCTIONS *************************************************/
 
-VOID
-NTAPI
-KeInitExceptions(VOID);
-
-VOID
-NTAPI
-KeInitInterrupts(VOID);
-
-VOID
-NTAPI
-KeInitTimer(VOID);
-
-VOID
+BOOLEAN
 NTAPI
-KeInitDpc(struct _KPRCB* Prcb);
+KeInitSystem(VOID);
 
 VOID
 NTAPI
-KeInitDispatcher(VOID);
-
-VOID
-__inline
-FASTCALL
-KeInitializeDispatcher(VOID);
+KeInitExceptions(VOID);
 
 VOID
 NTAPI
-KiInitializeSystemClock(VOID);
+KeInitInterrupts(VOID);
 
 VOID
 NTAPI
@@ -521,25 +693,16 @@ KiInitializeBugCheck(VOID);
 
 VOID
 NTAPI
-Phase1Initialization(PVOID Context);
-
-VOID
-NTAPI
-KeInit1(
-    PCHAR CommandLine,
-    PULONG LastKernelAddress
+KiSystemStartup(
+    IN PLOADER_PARAMETER_BLOCK LoaderBlock
 );
 
-VOID
-NTAPI
-KeInit2(VOID);
-
 BOOLEAN
 NTAPI
 KiDeliverUserApc(PKTRAP_FRAME TrapFrame);
 
 VOID
-STDCALL
+NTAPI
 KiMoveApcState(
     PKAPC_STATE OldState,
     PKAPC_STATE NewState
@@ -572,85 +735,192 @@ KeTrapFrameToContext(
 
 VOID
 NTAPI
-KeApplicationProcessorInit(VOID);
+KeBugCheckWithTf(
+    ULONG BugCheckCode,
+    ULONG BugCheckParameter1,
+    ULONG BugCheckParameter2,
+    ULONG BugCheckParameter3,
+    ULONG BugCheckParameter4,
+    PKTRAP_FRAME Tf
+);
 
 VOID
 NTAPI
-KePrepareForApplicationProcessorInit(ULONG id);
+KeFlushCurrentTb(VOID);
+
+VOID
+NTAPI
+KeRosDumpStackFrames(
+    PULONG Frame,
+    ULONG FrameCount
+);
+
+VOID
+NTAPI
+KeSetSystemTime(
+    IN PLARGE_INTEGER NewSystemTime,
+    OUT PLARGE_INTEGER OldSystemTime,
+    IN BOOLEAN FixInterruptTime,
+    IN PLARGE_INTEGER HalTime
+);
 
 ULONG
 NTAPI
-KiUserTrapHandler(
-    PKTRAP_FRAME Tf,
+KeV86Exception(
     ULONG ExceptionNr,
-    PVOID Cr2
+    PKTRAP_FRAME Tf,
+    ULONG address
 );
 
 VOID
-STDCALL
-KePushAndStackSwitchAndSysRet(
-    ULONG Push,
-    PVOID NewStack
+NTAPI
+KiStartUnexpectedRange(
+    VOID
 );
 
 VOID
-STDCALL
-KeStackSwitchAndRet(PVOID NewStack);
+NTAPI
+KiEndUnexpectedRange(
+    VOID
+);
 
 VOID
-STDCALL
-KeBugCheckWithTf(
-    ULONG BugCheckCode,
-    ULONG BugCheckParameter1,
-    ULONG BugCheckParameter2,
-    ULONG BugCheckParameter3,
-    ULONG BugCheckParameter4,
-    PKTRAP_FRAME Tf
+NTAPI
+KiInterruptDispatch(
+    VOID
 );
 
 VOID
-STDCALL
-KiDumpTrapFrame(
-    PKTRAP_FRAME Tf,
-    ULONG ExceptionNr,
-    ULONG cr2
+NTAPI
+KiChainedDispatch(
+    VOID
 );
 
 VOID
-STDCALL
-KeFlushCurrentTb(VOID);
+NTAPI
+Ki386AdjustEsp0(
+    IN PKTRAP_FRAME TrapFrame
+);
 
 VOID
-STDCALL
-KeRosDumpStackFrames(
-    PULONG Frame,
-    ULONG FrameCount
+NTAPI
+Ki386SetupAndExitToV86Mode(
+    OUT PTEB VdmTeb
 );
 
-ULONG
-STDCALL
-KeRosGetStackFrames(
-    PULONG Frames,
-    ULONG FrameCount
+VOID
+NTAPI
+KeI386VdmInitialize(
+    VOID
 );
 
 VOID
 NTAPI
-KiSetSystemTime(PLARGE_INTEGER NewSystemTime);
+KiInitializeMachineType(
+    VOID
+);
 
-NTSTATUS 
-STDCALL
-Ke386CallBios(
-    UCHAR Int,
-    PKV86M_REGISTERS Regs
+VOID
+NTAPI
+KiFlushNPXState(
+    IN FLOATING_SAVE_AREA *SaveArea
 );
 
-ULONG
+VOID
 NTAPI
-KeV86Exception(
-    ULONG ExceptionNr,
-    PKTRAP_FRAME Tf,
-    ULONG address
+KiInitSpinLocks(
+    IN PKPRCB Prcb,
+    IN CCHAR Number
+);
+
+LARGE_INTEGER
+NTAPI
+KiComputeReciprocal(
+    IN LONG Divisor,
+    OUT PUCHAR Shift
+);
+
+VOID
+NTAPI
+KiInitSystem(
+    VOID
+);
+
+VOID
+FASTCALL
+KiInsertQueueApc(
+    IN PKAPC Apc,
+    IN KPRIORITY PriorityBoost
 );
 
+NTSTATUS
+NTAPI
+KiCallUserMode(
+    IN PVOID *OutputBuffer,
+    IN PULONG OutputLength
+);
+
+PULONG
+NTAPI
+KiGetUserModeStackAddress(
+    VOID
+);
+
+ULONG_PTR
+NTAPI
+Ki386EnableGlobalPage(IN volatile ULONG_PTR Context);
+
+VOID
+NTAPI
+KiInitializePAT(VOID);
+
+VOID
+NTAPI
+KiInitializeMTRR(IN BOOLEAN FinalCpu);
+
+VOID
+NTAPI
+KiAmdK6InitializeMTRR(VOID);
+
+VOID
+NTAPI
+KiRestoreFastSyscallReturnState(VOID);
+
+ULONG_PTR
+NTAPI
+Ki386EnableDE(IN ULONG_PTR Context);
+
+ULONG_PTR
+NTAPI
+Ki386EnableFxsr(IN ULONG_PTR Context);
+
+ULONG_PTR
+NTAPI
+Ki386EnableXMMIExceptions(IN ULONG_PTR Context);
+
+VOID
+NTAPI
+KiInitMachineDependent(VOID);
+
+VOID
+NTAPI
+KiI386PentiumLockErrataFixup(VOID);
+
+VOID
+WRMSR(
+    IN ULONG Register,
+    IN LONGLONG Value
+);
+
+BOOLEAN
+NTAPI
+KeFreezeExecution(IN PKTRAP_FRAME TrapFrame,
+                  IN PKEXCEPTION_FRAME ExceptionFrame);
+
+VOID
+NTAPI
+KeThawExecution(IN BOOLEAN Enable);
+
+#include "ke_x.h"
+
 #endif /* __NTOSKRNL_INCLUDE_INTERNAL_KE_H */