3 * Copyright (C) 2000 David Welch <welch@cwcom.net>
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 #ifndef __NTOSKRNL_INCLUDE_INTERNAL_KE_H
21 #define __NTOSKRNL_INCLUDE_INTERNAL_KE_H
23 /* INCLUDES *****************************************************************/
26 #include <ddk/ntifs.h>
28 #endif /* not __ASM__ */
32 /* INTERNAL KERNEL FUNCTIONS ************************************************/
35 struct _KPROCESS
* KeGetCurrentProcess(VOID
);
36 VOID
KeSetGdtSelector(ULONG Entry
, ULONG Value1
, ULONG Value2
);
42 struct _KIRQ_TRAPFRAME
;
44 struct _KEXCEPTION_FRAME
;
46 #define IPI_REQUEST_FUNCTIONCALL 1
47 #define IPI_REQUEST_APC 2
48 #define IPI_REQUEST_DPC 4
50 /* ipi.c ********************************************************************/
53 KiIpiServiceRoutine(IN PKTRAP_FRAME TrapFrame
,
54 IN
struct _KEXCEPTION_FRAME
* ExceptionFrame
);
57 KiIpiSendRequest(ULONG TargetSet
,
61 KeIpiGenericCall(VOID
STDCALL (*WorkerRoutine
)(PVOID
),
64 /* next file ***************************************************************/
69 DbgBreakPointNoBugCheck(VOID
);
74 PKTRAP_FRAME TrapFrame
79 KeProfileInterruptWithSource(
80 IN PKTRAP_FRAME TrapFrame
,
81 IN KPROFILE_SOURCE Source
84 VOID STDCALL
KeUpdateSystemTime(PKTRAP_FRAME TrapFrame
, KIRQL Irql
);
85 VOID STDCALL
KeUpdateRunTime(PKTRAP_FRAME TrapFrame
, KIRQL Irql
);
87 KIRQL
KeAcquireDispatcherDatabaseLock(VOID
);
88 VOID
KeAcquireDispatcherDatabaseLockAtDpcLevel(VOID
);
89 VOID
KeReleaseDispatcherDatabaseLock(KIRQL Irql
);
90 VOID
KeReleaseDispatcherDatabaseLockFromDpcLevel(VOID
);
92 BOOLEAN
KiDispatcherObjectWake(DISPATCHER_HEADER
* hdr
);
93 VOID STDCALL
KeExpireTimers(PKDPC Apc
,
97 VOID
KeInitializeDispatcherHeader(DISPATCHER_HEADER
* Header
, ULONG Type
,
98 ULONG Size
, ULONG SignalState
);
99 VOID
KeDumpStackFrames(PULONG Frame
);
100 BOOLEAN
KiTestAlert(VOID
);
102 BOOLEAN
KiAbortWaitThread(struct _KTHREAD
* Thread
, NTSTATUS WaitStatus
);
104 PULONG
KeGetStackTopThread(struct _ETHREAD
* Thread
);
105 VOID
KeContextToTrapFrame(PCONTEXT Context
, PKTRAP_FRAME TrapFrame
);
106 VOID STDCALL
KiDeliverApc(KPROCESSOR_MODE PreviousMode
,
108 PKTRAP_FRAME TrapFrame
);
110 VOID
KiInitializeUserApc(IN PVOID Reserved
,
111 IN PKTRAP_FRAME TrapFrame
,
112 IN PKNORMAL_ROUTINE NormalRoutine
,
113 IN PVOID NormalContext
,
114 IN PVOID SystemArgument1
,
115 IN PVOID SystemArgument2
);
117 VOID STDCALL
KiAttachProcess(struct _KTHREAD
*Thread
, struct _KPROCESS
*Process
, KIRQL ApcLock
, struct _KAPC_STATE
*SavedApcState
);
119 VOID STDCALL
KiSwapProcess(struct _KPROCESS
*NewProcess
, struct _KPROCESS
*OldProcess
);
123 KeTestAlertThread(IN KPROCESSOR_MODE AlertMode
);
125 BOOLEAN STDCALL
KeRemoveQueueApc (PKAPC Apc
);
126 PLIST_ENTRY STDCALL
KeRundownQueue(IN PKQUEUE Queue
);
128 extern LARGE_INTEGER SystemBootTime
;
130 /* INITIALIZATION FUNCTIONS *************************************************/
132 VOID
KeInitExceptions(VOID
);
133 VOID
KeInitInterrupts(VOID
);
134 VOID
KeInitTimer(VOID
);
135 VOID
KeInitDpc(struct _KPCR
* Pcr
);
136 VOID
KeInitDispatcher(VOID
);
137 VOID
KeInitializeDispatcher(VOID
);
138 VOID
KeInitializeTimerImpl(VOID
);
139 VOID
KeInitializeBugCheck(VOID
);
140 VOID
Phase1Initialization(PVOID Context
);
142 VOID
KeInit1(PCHAR CommandLine
, PULONG LastKernelAddress
);
145 BOOLEAN
KiDeliverUserApc(PKTRAP_FRAME TrapFrame
);
149 KiMoveApcState (PKAPC_STATE OldState
,
150 PKAPC_STATE NewState
);
153 KiAddProfileEvent(KPROFILE_SOURCE Source
, ULONG Pc
);
155 KiDispatchException(PEXCEPTION_RECORD ExceptionRecord
,
158 KPROCESSOR_MODE PreviousMode
,
159 BOOLEAN SearchFrames
);
160 VOID
KeTrapFrameToContext(PKTRAP_FRAME TrapFrame
,
163 KeApplicationProcessorInit(VOID
);
165 KePrepareForApplicationProcessorInit(ULONG id
);
167 KiUserTrapHandler(PKTRAP_FRAME Tf
, ULONG ExceptionNr
, PVOID Cr2
);
169 KePushAndStackSwitchAndSysRet(ULONG Push
, PVOID NewStack
);
171 KeStackSwitchAndRet(PVOID NewStack
);
173 KeBugCheckWithTf(ULONG BugCheckCode
,
174 ULONG BugCheckParameter1
,
175 ULONG BugCheckParameter2
,
176 ULONG BugCheckParameter3
,
177 ULONG BugCheckParameter4
,
179 #define KEBUGCHECKWITHTF(a,b,c,d,e,f) DbgPrint("KeBugCheckWithTf at %s:%i\n",__FILE__,__LINE__), KeBugCheckWithTf(a,b,c,d,e,f)
181 KiDumpTrapFrame(PKTRAP_FRAME Tf
, ULONG ExceptionNr
, ULONG cr2
);
185 KeFlushCurrentTb(VOID
);
187 #endif /* not __ASM__ */
189 #define MAXIMUM_PROCESSORS 32
191 #endif /* __NTOSKRNL_INCLUDE_INTERNAL_KE_H */