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 SystemBootTime;
-extern ULONG_PTR KERNEL_BASE;
+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 UCHAR KiDebugRegisterTrapOffsets[9];
+extern UCHAR KiDebugRegisterContextOffsets[9];
+extern ULONG KeTimeIncrement;
+extern ULONG_PTR KiBugCheckData[5];
/* MACROS *************************************************************************/
-/*
- * On UP machines, we don't actually have a spinlock, we merely raise
- * IRQL to DPC level.
- */
-#ifndef CONFIG_SMP
-#define KeInitializeDispatcher()
-#define KeAcquireDispatcherDatabaseLock() KeRaiseIrqlToDpcLevel();
-#define KeReleaseDispatcherDatabaseLock(OldIrql) KiExitDispatcher(OldIrql);
-#define KeAcquireDispatcherDatabaseLockAtDpcLevel()
-#define KeReleaseDispatcherDatabaseLockFromDpcLevel()
-#else
-#define KeInitializeDispatcher() KeInitializeSpinLock(&DispatcherDatabaseLock);
-#define KeAcquireDispatcherDatabaseLock() KfAcquireSpinLock(&DispatcherDatabaseLock);
-#define KeAcquireDispatcherDatabaseLockAtDpcLevel() \
- KeAcquireSpinLockAtDpcLevel (&DispatcherDatabaseLock);
-#define KeReleaseDispatcherDatabaseLockFromDpcLevel() \
- KeReleaseSpinLockFromDpcLevel(&DispatcherDatabaseLock);
-#define KeReleaseDispatcherDatabaseLock(OldIrql) \
- KeReleaseSpinLockFromDpcLevel(&DispatcherDatabaseLock); \
- KiExitDispatcher(OldIrql);
-#endif
+#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) \
InitializeListHead(&((Header)->WaitListHead)); \
}
-/* The following macro satisfies the wait of any dispatcher object */
-#define KiSatisfyObjectWait(Object, Thread) \
-{ \
- /* Special case for Mutants */ \
- if ((Object)->Header.Type == MutantObject) \
- { \
- /* Decrease the Signal State */ \
- (Object)->Header.SignalState--; \
- \
- /* Check if it's now non-signaled */ \
- if (!(Object)->Header.SignalState) \
- { \
- /* Set the Owner Thread */ \
- (Object)->OwnerThread = Thread; \
- \
- /* Disable APCs if needed */ \
- Thread->KernelApcDisable -= (Object)->ApcDisable; \
- \
- /* Check if it's abandoned */ \
- if ((Object)->Abandoned) \
- { \
- /* Unabandon it */ \
- (Object)->Abandoned = FALSE; \
- \
- /* Return Status */ \
- Thread->WaitStatus = STATUS_ABANDONED; \
- } \
- \
- /* Insert it into the Mutant List */ \
- InsertHeadList(&Thread->MutantListHead, \
- &(Object)->MutantListEntry); \
- } \
- } \
- else if (((Object)->Header.Type & TIMER_OR_EVENT_TYPE) == \
- EventSynchronizationObject) \
- { \
- /* Synchronization Timers and Events just get un-signaled */ \
- (Object)->Header.SignalState = 0; \
- } \
- else if ((Object)->Header.Type == SemaphoreObject) \
- { \
- /* These ones can have multiple states, so we only decrease it */ \
- (Object)->Header.SignalState--; \
- } \
-}
+#define KEBUGCHECKWITHTF(a,b,c,d,e,f) \
+ DbgPrint("KeBugCheckWithTf at %s:%i\n",__FILE__,__LINE__), \
+ KeBugCheckWithTf(a,b,c,d,e,f)
-/* The following macro satisfies the wait of a mutant dispatcher object */
-#define KiSatisfyMutantWait(Object, Thread) \
-{ \
- /* Decrease the Signal State */ \
- (Object)->Header.SignalState--; \
- \
- /* Check if it's now non-signaled */ \
- if (!(Object)->Header.SignalState) \
- { \
- /* Set the Owner Thread */ \
- (Object)->OwnerThread = Thread; \
- \
- /* Disable APCs if needed */ \
- Thread->KernelApcDisable -= (Object)->ApcDisable; \
- \
- /* Check if it's abandoned */ \
- if ((Object)->Abandoned) \
- { \
- /* Unabandon it */ \
- (Object)->Abandoned = FALSE; \
- \
- /* Return Status */ \
- Thread->WaitStatus = STATUS_ABANDONED; \
- } \
- \
- /* Insert it into the Mutant List */ \
- InsertHeadList(&Thread->MutantListHead, \
- &(Object)->MutantListEntry); \
- } \
-}
+/* Tells us if the Timer or Event is a Syncronization or Notification Object */
+#define TIMER_OR_EVENT_TYPE 0x7L
-/* The following macro satisfies the wait of any nonmutant dispatcher object */
-#define KiSatisfyNonMutantWait(Object, Thread) \
-{ \
- if (((Object)->Header.Type & TIMER_OR_EVENT_TYPE) == \
- EventSynchronizationObject) \
- { \
- /* Synchronization Timers and Events just get un-signaled */ \
- (Object)->Header.SignalState = 0; \
- } \
- else if ((Object)->Header.Type == SemaphoreObject) \
- { \
- /* These ones can have multiple states, so we only decrease it */ \
- (Object)->Header.SignalState--; \
- } \
-}
+/* One of the Reserved Wait Blocks, this one is for the Thread's Timer */
+#define TIMER_WAIT_BLOCK 0x3L
-/* The following macro satisfies multiple objects in a wait state */
-#define KiSatisifyMultipleObjectWaits(FirstBlock) \
-{ \
- PKWAIT_BLOCK WaitBlock = FirstBlock; \
- PKTHREAD WaitThread = WaitBlock->Thread; \
- \
- /* Loop through all the Wait Blocks, and wake each Object */ \
- do \
- { \
- /* Make sure it hasn't timed out */ \
- if (WaitBlock->WaitKey != STATUS_TIMEOUT) \
- { \
- /* Wake the Object */ \
- KiSatisfyObjectWait((PKMUTANT)WaitBlock->Object, WaitThread); \
- } \
- \
- /* Move to the next block */ \
- WaitBlock = WaitBlock->NextWaitBlock; \
- } while (WaitBlock != FirstBlock); \
-}
+/* 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))
-extern KSPIN_LOCK DispatcherDatabaseLock;
+#define SIZE_OF_FX_REGISTERS 32
-#define KeEnterCriticalRegion() \
-{ \
- PKTHREAD _Thread = KeGetCurrentThread(); \
- if (_Thread) _Thread->KernelApcDisable--; \
-}
+/* INTERNAL KERNEL FUNCTIONS ************************************************/
-#define KeLeaveCriticalRegion() \
-{ \
- PKTHREAD _Thread = KeGetCurrentThread(); \
- if((_Thread) && (++_Thread->KernelApcDisable == 0)) \
- { \
- if (!IsListEmpty(&_Thread->ApcState.ApcListHead[KernelMode]) && \
- (_Thread->SpecialApcDisable == 0)) \
- { \
- KiCheckForKernelApcDelivery(); \
- } \
- } \
-}
+/* Finds a new thread to run */
+NTSTATUS
+FASTCALL
+KiSwapThread(
+ IN PKTHREAD Thread,
+ IN PKPRCB Prcb
+);
-#define KEBUGCHECKWITHTF(a,b,c,d,e,f) \
- DbgPrint("KeBugCheckWithTf at %s:%i\n",__FILE__,__LINE__), \
- KeBugCheckWithTf(a,b,c,d,e,f)
+VOID
+NTAPI
+KeReadyThread(
+ IN PKTHREAD Thread
+);
-/* INTERNAL KERNEL FUNCTIONS ************************************************/
+BOOLEAN
+NTAPI
+KeSetDisableBoostThread(
+ IN OUT PKTHREAD Thread,
+ IN BOOLEAN Disable
+);
-/* threadsch.c ********************************************************************/
+VOID
+NTAPI
+KeBalanceSetManager(IN PVOID Context);
+
+VOID
+NTAPI
+KiReadyThread(IN PKTHREAD Thread);
+
+ULONG
+NTAPI
+KeSuspendThread(PKTHREAD Thread);
+
+BOOLEAN
+NTAPI
+KeReadStateThread(IN PKTHREAD Thread);
-/* Thread Scheduler Functions */
+BOOLEAN
+FASTCALL
+KiSwapContext(
+ IN PKTHREAD CurrentThread,
+ IN PKTHREAD NewThread
+);
-/* Readies a Thread for Execution. */
VOID
-STDCALL
-KiDispatchThreadNoLock(ULONG NewThreadStatus);
+NTAPI
+KiAdjustQuantumThread(IN PKTHREAD Thread);
-/* Readies a Thread for Execution. */
VOID
-STDCALL
-KiDispatchThread(ULONG NewThreadStatus);
+FASTCALL
+KiExitDispatcher(KIRQL OldIrql);
-/* Puts a Thread into a block state. */
VOID
-STDCALL
-KiBlockThread(
- PNTSTATUS Status,
- UCHAR Alertable,
- ULONG WaitMode,
- UCHAR WaitReason
+NTAPI
+KiDeferredReadyThread(IN PKTHREAD Thread);
+
+KAFFINITY
+FASTCALL
+KiSetAffinityThread(
+ IN PKTHREAD Thread,
+ IN KAFFINITY Affinity
);
-/* Removes a thread out of a block state. */
-VOID
-STDCALL
-KiUnblockThread(
- PKTHREAD Thread,
- PNTSTATUS WaitStatus,
- KPRIORITY Increment
+PKTHREAD
+FASTCALL
+KiSelectNextThread(
+ IN PKPRCB Prcb
);
-NTSTATUS
-STDCALL
-KeSuspendThread(PKTHREAD Thread);
+VOID
+NTAPI
+CPUID(
+ OUT ULONG CpuInfo[4],
+ IN ULONG InfoType
+);
-NTSTATUS
+BOOLEAN
FASTCALL
-KiSwapContext(PKTHREAD NewThread);
+KiInsertTimerTable(
+ IN PKTIMER Timer,
+ IN ULONG Hand
+);
-VOID
-STDCALL
-KiAdjustQuantumThread(IN PKTHREAD Thread);
+BOOLEAN
+FASTCALL
+KiInsertTreeTimer(
+ IN PKTIMER Timer,
+ IN LARGE_INTEGER Interval
+);
VOID
FASTCALL
-KiExitDispatcher(KIRQL OldIrql);
+KiCompleteTimer(
+ IN PKTIMER Timer,
+ IN PKSPIN_LOCK_QUEUE LockQueue
+);
/* gmutex.c ********************************************************************/
/* ipi.c ********************************************************************/
-BOOLEAN
-STDCALL
-KiIpiServiceRoutine(
- IN PKTRAP_FRAME TrapFrame,
- IN struct _KEXCEPTION_FRAME* ExceptionFrame
-);
-
VOID
NTAPI
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,
);
VOID
-STDCALL
+NTAPI
KeStartProfile(
struct _KPROFILE* Profile,
PVOID Buffer
);
BOOLEAN
-STDCALL
+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,
);
VOID
-STDCALL
+NTAPI
KeInitializeThread(
- struct _KPROCESS* Process,
- PKTHREAD Thread,
- PKSYSTEM_ROUTINE SystemRoutine,
- PKSTART_ROUTINE StartRoutine,
- PVOID StartContext,
- PCONTEXT Context,
- PVOID Teb,
- PVOID KernelStack
+ 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
-STDCALL
+NTAPI
+KeUninitThread(
+ IN PKTHREAD Thread
+);
+
+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
+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
+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
+KiSuspendThread(
+ IN PVOID NormalContext,
+ IN PVOID SystemArgument1,
+ IN PVOID SystemArgument2
+);
+
+LONG
NTAPI
-KiDispatcherObjectWake(
- DISPATCHER_HEADER* hdr,
- KPRIORITY increment
+KeQueryBasePriorityThread(IN PKTHREAD Thread);
+
+VOID
+FASTCALL
+KiSetPriorityThread(
+ IN PKTHREAD Thread,
+ IN KPRIORITY Priority
);
VOID
-STDCALL
-KeExpireTimers(
- PKDPC Apc,
- PVOID Arg1,
- PVOID Arg2,
- PVOID Arg3
+FASTCALL
+KiUnlinkThread(
+ IN PKTHREAD Thread,
+ IN NTSTATUS WaitStatus
);
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);
+VOID
+NTAPI
+KeThawAllThreads(
+ VOID
+);
-BOOLEAN
-STDCALL
-KiInsertTimer(
- PKTIMER Timer,
- LARGE_INTEGER DueTime
+VOID
+NTAPI
+KeFreezeAllThreads(
+ VOID
);
BOOLEAN
-__inline
-FASTCALL
-KiIsObjectSignaled(
- PDISPATCHER_HEADER Object,
- PKTHREAD Thread
-);
+NTAPI
+KeDisableThreadApcQueueing(IN PKTHREAD Thread);
VOID
FASTCALL
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
+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
-STDCALL
+NTAPI
+KiComputeTimerTableIndex(
+ IN LONGLONG TimeValue
+);
+
+ULONG
+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,
);
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);
+KeInitExceptions(VOID);
VOID
NTAPI
-KiInitializeSystemClock(VOID);
+KeInitInterrupts(VOID);
VOID
NTAPI
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
VOID
NTAPI
-KeApplicationProcessorInit(VOID);
+KeBugCheckWithTf(
+ ULONG BugCheckCode,
+ ULONG BugCheckParameter1,
+ ULONG BugCheckParameter2,
+ ULONG BugCheckParameter3,
+ ULONG BugCheckParameter4,
+ PKTRAP_FRAME Tf
+);
+
+VOID
+NTAPI
+KeFlushCurrentTb(VOID);
+
+VOID
+NTAPI
+KeRosDumpStackFrames(
+ PULONG Frame,
+ ULONG FrameCount
+);
VOID
NTAPI
-KePrepareForApplicationProcessorInit(ULONG id);
+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 */