- INITIAL_STALL_COUNT makes more sense in decimal (100) than hex (0x64) so define...
[reactos.git] / reactos / ntoskrnl / include / internal / ke.h
1 #ifndef __NTOSKRNL_INCLUDE_INTERNAL_KE_H
2 #define __NTOSKRNL_INCLUDE_INTERNAL_KE_H
3
4 /* INCLUDES *****************************************************************/
5
6 #include "arch/ke.h"
7
8 /* INTERNAL KERNEL TYPES ****************************************************/
9
10 typedef struct _WOW64_PROCESS
11 {
12 PVOID Wow64;
13 } WOW64_PROCESS, *PWOW64_PROCESS;
14
15 typedef struct _KPROFILE_SOURCE_OBJECT
16 {
17 KPROFILE_SOURCE Source;
18 LIST_ENTRY ListEntry;
19 } KPROFILE_SOURCE_OBJECT, *PKPROFILE_SOURCE_OBJECT;
20
21 typedef enum _CONNECT_TYPE
22 {
23 NoConnect,
24 NormalConnect,
25 ChainConnect,
26 UnknownConnect
27 } CONNECT_TYPE, *PCONNECT_TYPE;
28
29 typedef struct _DISPATCH_INFO
30 {
31 CONNECT_TYPE Type;
32 PKINTERRUPT Interrupt;
33 PKINTERRUPT_ROUTINE NoDispatch;
34 PKINTERRUPT_ROUTINE InterruptDispatch;
35 PKINTERRUPT_ROUTINE FloatingDispatch;
36 PKINTERRUPT_ROUTINE ChainedDispatch;
37 PKINTERRUPT_ROUTINE *FlatDispatch;
38 } DISPATCH_INFO, *PDISPATCH_INFO;
39
40 typedef struct _KI_SAMPLE_MAP
41 {
42 LARGE_INTEGER PerfStart;
43 LARGE_INTEGER PerfEnd;
44 LONGLONG PerfDelta;
45 LARGE_INTEGER PerfFreq;
46 LONGLONG TSCStart;
47 LONGLONG TSCEnd;
48 LONGLONG TSCDelta;
49 ULONG MHz;
50 } KI_SAMPLE_MAP, *PKI_SAMPLE_MAP;
51
52 typedef struct _KTIMER_TABLE_ENTRY
53 {
54 LIST_ENTRY Entry;
55 ULARGE_INTEGER Time;
56 } KTIMER_TABLE_ENTRY, *PKTIMER_TABLE_ENTRY;
57
58 #define MAX_TIMER_DPCS 16
59
60 typedef struct _DPC_QUEUE_ENTRY
61 {
62 PKDPC Dpc;
63 PKDEFERRED_ROUTINE Routine;
64 PVOID Context;
65 } DPC_QUEUE_ENTRY, *PDPC_QUEUE_ENTRY;
66
67 typedef PCHAR
68 (NTAPI *PKE_BUGCHECK_UNICODE_TO_ANSI)(
69 IN PUNICODE_STRING Unicode,
70 IN PCHAR Ansi,
71 IN ULONG Length
72 );
73
74 extern ULONG_PTR MmFreeLdrFirstKrnlPhysAddr;
75 extern ULONG_PTR MmFreeLdrLastKrnlPhysAddr;
76 extern ULONG_PTR MmFreeLdrLastKernelAddress;
77
78 extern PVOID KeUserApcDispatcher;
79 extern PVOID KeUserCallbackDispatcher;
80 extern PVOID KeUserExceptionDispatcher;
81 extern PVOID KeRaiseUserExceptionDispatcher;
82 extern LARGE_INTEGER KeBootTime;
83 extern ULONGLONG KeBootTimeBias;
84 extern BOOLEAN ExCmosClockIsSane;
85 extern ULONG KeI386NpxPresent;
86 extern ULONG KeI386XMMIPresent;
87 extern ULONG KeI386FxsrPresent;
88 extern ULONG KiMXCsrMask;
89 extern ULONG KeI386CpuType;
90 extern ULONG KeI386CpuStep;
91 extern ULONG KeProcessorArchitecture;
92 extern ULONG KeProcessorLevel;
93 extern ULONG KeProcessorRevision;
94 extern ULONG KeFeatureBits;
95 extern ULONG Ke386GlobalPagesEnabled;
96 extern BOOLEAN KiI386PentiumLockErrataPresent;
97 extern KNODE KiNode0;
98 extern PKNODE KeNodeBlock[1];
99 extern UCHAR KeNumberNodes;
100 extern UCHAR KeProcessNodeSeed;
101 extern ETHREAD KiInitialThread;
102 extern EPROCESS KiInitialProcess;
103 extern ULONG KiInterruptTemplate[KINTERRUPT_DISPATCH_CODES];
104 extern PULONG KiInterruptTemplateObject;
105 extern PULONG KiInterruptTemplateDispatch;
106 extern PULONG KiInterruptTemplate2ndDispatch;
107 extern ULONG KiUnexpectedEntrySize;
108 #ifdef _M_IX86
109 extern PVOID Ki386IopmSaveArea;
110 extern ULONG KeI386EFlagsAndMaskV86;
111 extern ULONG KeI386EFlagsOrMaskV86;
112 extern BOOLEAN KeI386VirtualIntExtensions;
113 extern KIDTENTRY KiIdt[];
114 extern KGDTENTRY KiBootGdt[];
115 extern KDESCRIPTOR KiGdtDescriptor;
116 extern KDESCRIPTOR KiIdtDescriptor;
117 extern KTSS KiBootTss;
118 #endif
119 extern UCHAR P0BootStack[];
120 extern UCHAR KiDoubleFaultStack[];
121 extern EX_PUSH_LOCK KernelAddressSpaceLock;
122 extern ULONG KiMaximumDpcQueueDepth;
123 extern ULONG KiMinimumDpcRate;
124 extern ULONG KiAdjustDpcThreshold;
125 extern ULONG KiIdealDpcRate;
126 extern BOOLEAN KeThreadDpcEnable;
127 extern LARGE_INTEGER KiTimeIncrementReciprocal;
128 extern UCHAR KiTimeIncrementShiftCount;
129 extern ULONG KiTimeLimitIsrMicroseconds;
130 extern ULONG KiServiceLimit;
131 extern LIST_ENTRY KeBugcheckCallbackListHead, KeBugcheckReasonCallbackListHead;
132 extern KSPIN_LOCK BugCheckCallbackLock;
133 extern KDPC KiTimerExpireDpc;
134 extern KTIMER_TABLE_ENTRY KiTimerTableListHead[TIMER_TABLE_SIZE];
135 extern FAST_MUTEX KiGenericCallDpcMutex;
136 extern LIST_ENTRY KiProfileListHead, KiProfileSourceListHead;
137 extern KSPIN_LOCK KiProfileLock;
138 extern LIST_ENTRY KiProcessListHead;
139 extern LIST_ENTRY KiProcessInSwapListHead, KiProcessOutSwapListHead;
140 extern LIST_ENTRY KiStackInSwapListHead;
141 extern KEVENT KiSwapEvent;
142 extern PKPRCB KiProcessorBlock[];
143 extern ULONG KiMask32Array[MAXIMUM_PRIORITY];
144 extern ULONG KiIdleSummary;
145 extern VOID __cdecl KiTrap19(VOID);
146 extern VOID __cdecl KiTrap8(VOID);
147 extern VOID __cdecl KiTrap2(VOID);
148 extern VOID __cdecl KiFastCallEntry(VOID);
149 extern PVOID KeUserApcDispatcher;
150 extern PVOID KeUserCallbackDispatcher;
151 extern PVOID KeUserExceptionDispatcher;
152 extern PVOID KeRaiseUserExceptionDispatcher;
153 extern UCHAR KiDebugRegisterTrapOffsets[9];
154 extern UCHAR KiDebugRegisterContextOffsets[9];
155 extern ULONG KeTimeIncrement;
156 extern ULONG KeTimeAdjustment;
157 extern ULONG_PTR KiBugCheckData[5];
158 extern ULONG KiFreezeFlag;
159 extern ULONG KiDPCTimeout;
160
161 /* MACROS *************************************************************************/
162
163 #define AFFINITY_MASK(Id) KiMask32Array[Id]
164 #define PRIORITY_MASK(Id) KiMask32Array[Id]
165
166 /* The following macro initializes a dispatcher object's header */
167 #define KeInitializeDispatcherHeader(Header, t, s, State) \
168 { \
169 (Header)->Type = t; \
170 (Header)->Absolute = 0; \
171 (Header)->Size = s; \
172 (Header)->Inserted = 0; \
173 (Header)->SignalState = State; \
174 InitializeListHead(&((Header)->WaitListHead)); \
175 }
176
177 /* Tells us if the Timer or Event is a Syncronization or Notification Object */
178 #define TIMER_OR_EVENT_TYPE 0x7L
179
180 /* One of the Reserved Wait Blocks, this one is for the Thread's Timer */
181 #define TIMER_WAIT_BLOCK 0x3L
182
183 /* INTERNAL KERNEL FUNCTIONS ************************************************/
184
185 VOID
186 NTAPI
187 CPUID(
188 IN ULONG InfoType,
189 OUT PULONG CpuInfoEax,
190 OUT PULONG CpuInfoEbx,
191 OUT PULONG CpuInfoEcx,
192 OUT PULONG CpuInfoEdx
193 );
194
195 LONGLONG
196 FASTCALL
197 RDMSR(
198 IN ULONG Register
199 );
200
201 VOID
202 NTAPI
203 WRMSR(
204 IN ULONG Register,
205 IN LONGLONG Value
206 );
207
208 /* Finds a new thread to run */
209 NTSTATUS
210 FASTCALL
211 KiSwapThread(
212 IN PKTHREAD Thread,
213 IN PKPRCB Prcb
214 );
215
216 VOID
217 NTAPI
218 KeReadyThread(
219 IN PKTHREAD Thread
220 );
221
222 BOOLEAN
223 NTAPI
224 KeSetDisableBoostThread(
225 IN OUT PKTHREAD Thread,
226 IN BOOLEAN Disable
227 );
228
229 VOID
230 NTAPI
231 KeBalanceSetManager(IN PVOID Context);
232
233 VOID
234 NTAPI
235 KiReadyThread(IN PKTHREAD Thread);
236
237 ULONG
238 NTAPI
239 KeSuspendThread(PKTHREAD Thread);
240
241 BOOLEAN
242 NTAPI
243 KeReadStateThread(IN PKTHREAD Thread);
244
245 BOOLEAN
246 FASTCALL
247 KiSwapContext(
248 IN PKTHREAD CurrentThread,
249 IN PKTHREAD NewThread
250 );
251
252 VOID
253 NTAPI
254 KiAdjustQuantumThread(IN PKTHREAD Thread);
255
256 VOID
257 FASTCALL
258 KiExitDispatcher(KIRQL OldIrql);
259
260 VOID
261 FASTCALL
262 KiDeferredReadyThread(IN PKTHREAD Thread);
263
264 PKTHREAD
265 FASTCALL
266 KiIdleSchedule(
267 IN PKPRCB Prcb
268 );
269
270 VOID
271 FASTCALL
272 KiProcessDeferredReadyList(
273 IN PKPRCB Prcb
274 );
275
276 KAFFINITY
277 FASTCALL
278 KiSetAffinityThread(
279 IN PKTHREAD Thread,
280 IN KAFFINITY Affinity
281 );
282
283 PKTHREAD
284 FASTCALL
285 KiSelectNextThread(
286 IN PKPRCB Prcb
287 );
288
289 BOOLEAN
290 FASTCALL
291 KiInsertTimerTable(
292 IN PKTIMER Timer,
293 IN ULONG Hand
294 );
295
296 VOID
297 FASTCALL
298 KiTimerListExpire(
299 IN PLIST_ENTRY ExpiredListHead,
300 IN KIRQL OldIrql
301 );
302
303 BOOLEAN
304 FASTCALL
305 KiInsertTreeTimer(
306 IN PKTIMER Timer,
307 IN LARGE_INTEGER Interval
308 );
309
310 VOID
311 FASTCALL
312 KiCompleteTimer(
313 IN PKTIMER Timer,
314 IN PKSPIN_LOCK_QUEUE LockQueue
315 );
316
317 /* gmutex.c ********************************************************************/
318
319 VOID
320 FASTCALL
321 KiAcquireGuardedMutex(
322 IN OUT PKGUARDED_MUTEX GuardedMutex
323 );
324
325 VOID
326 FASTCALL
327 KiAcquireFastMutex(
328 IN PFAST_MUTEX FastMutex
329 );
330
331 /* gate.c **********************************************************************/
332
333 VOID
334 FASTCALL
335 KeInitializeGate(PKGATE Gate);
336
337 VOID
338 FASTCALL
339 KeSignalGateBoostPriority(PKGATE Gate);
340
341 VOID
342 FASTCALL
343 KeWaitForGate(
344 PKGATE Gate,
345 KWAIT_REASON WaitReason,
346 KPROCESSOR_MODE WaitMode
347 );
348
349 /* ipi.c ********************************************************************/
350
351 VOID
352 FASTCALL
353 KiIpiSend(
354 KAFFINITY TargetSet,
355 ULONG IpiRequest
356 );
357
358 VOID
359 NTAPI
360 KiIpiSendPacket(
361 IN KAFFINITY TargetProcessors,
362 IN PKIPI_WORKER WorkerFunction,
363 IN PKIPI_BROADCAST_WORKER BroadcastFunction,
364 IN ULONG_PTR Context,
365 IN PULONG Count
366 );
367
368 VOID
369 FASTCALL
370 KiIpiSignalPacketDone(
371 IN PKIPI_CONTEXT PacketContext
372 );
373
374 VOID
375 FASTCALL
376 KiIpiSignalPacketDoneAndStall(
377 IN PKIPI_CONTEXT PacketContext,
378 IN volatile PULONG ReverseStall
379 );
380
381 /* next file ***************************************************************/
382
383 UCHAR
384 NTAPI
385 KeFindNextRightSetAffinity(
386 IN UCHAR Number,
387 IN ULONG Set
388 );
389
390 VOID
391 NTAPI
392 DbgBreakPointNoBugCheck(VOID);
393
394 VOID
395 NTAPI
396 KeInitializeProfile(
397 struct _KPROFILE* Profile,
398 struct _KPROCESS* Process,
399 PVOID ImageBase,
400 ULONG ImageSize,
401 ULONG BucketSize,
402 KPROFILE_SOURCE ProfileSource,
403 KAFFINITY Affinity
404 );
405
406 BOOLEAN
407 NTAPI
408 KeStartProfile(
409 struct _KPROFILE* Profile,
410 PVOID Buffer
411 );
412
413 BOOLEAN
414 NTAPI
415 KeStopProfile(struct _KPROFILE* Profile);
416
417 ULONG
418 NTAPI
419 KeQueryIntervalProfile(KPROFILE_SOURCE ProfileSource);
420
421 VOID
422 NTAPI
423 KeSetIntervalProfile(
424 KPROFILE_SOURCE ProfileSource,
425 ULONG Interval
426 );
427
428 VOID
429 NTAPI
430 KeProfileInterrupt(
431 PKTRAP_FRAME TrapFrame
432 );
433
434 VOID
435 NTAPI
436 KeProfileInterruptWithSource(
437 IN PKTRAP_FRAME TrapFrame,
438 IN KPROFILE_SOURCE Source
439 );
440
441 VOID
442 NTAPI
443 KeUpdateRunTime(
444 PKTRAP_FRAME TrapFrame,
445 KIRQL Irql
446 );
447
448 VOID
449 NTAPI
450 KiExpireTimers(
451 PKDPC Dpc,
452 PVOID DeferredContext,
453 PVOID SystemArgument1,
454 PVOID SystemArgument2
455 );
456
457 VOID
458 NTAPI
459 KeInitializeThread(
460 IN PKPROCESS Process,
461 IN OUT PKTHREAD Thread,
462 IN PKSYSTEM_ROUTINE SystemRoutine,
463 IN PKSTART_ROUTINE StartRoutine,
464 IN PVOID StartContext,
465 IN PCONTEXT Context,
466 IN PVOID Teb,
467 IN PVOID KernelStack
468 );
469
470 VOID
471 NTAPI
472 KeUninitThread(
473 IN PKTHREAD Thread
474 );
475
476 NTSTATUS
477 NTAPI
478 KeInitThread(
479 IN OUT PKTHREAD Thread,
480 IN PVOID KernelStack,
481 IN PKSYSTEM_ROUTINE SystemRoutine,
482 IN PKSTART_ROUTINE StartRoutine,
483 IN PVOID StartContext,
484 IN PCONTEXT Context,
485 IN PVOID Teb,
486 IN PKPROCESS Process
487 );
488
489 VOID
490 NTAPI
491 KiInitializeContextThread(
492 PKTHREAD Thread,
493 PKSYSTEM_ROUTINE SystemRoutine,
494 PKSTART_ROUTINE StartRoutine,
495 PVOID StartContext,
496 PCONTEXT Context
497 );
498
499 VOID
500 NTAPI
501 KeStartThread(
502 IN OUT PKTHREAD Thread
503 );
504
505 BOOLEAN
506 NTAPI
507 KeAlertThread(
508 IN PKTHREAD Thread,
509 IN KPROCESSOR_MODE AlertMode
510 );
511
512 ULONG
513 NTAPI
514 KeAlertResumeThread(
515 IN PKTHREAD Thread
516 );
517
518 ULONG
519 NTAPI
520 KeResumeThread(
521 IN PKTHREAD Thread
522 );
523
524 PVOID
525 NTAPI
526 KeSwitchKernelStack(
527 IN PVOID StackBase,
528 IN PVOID StackLimit
529 );
530
531 VOID
532 NTAPI
533 KeRundownThread(VOID);
534
535 NTSTATUS
536 NTAPI
537 KeReleaseThread(PKTHREAD Thread);
538
539 VOID
540 NTAPI
541 KiSuspendRundown(
542 IN PKAPC Apc
543 );
544
545 VOID
546 NTAPI
547 KiSuspendNop(
548 IN PKAPC Apc,
549 IN PKNORMAL_ROUTINE *NormalRoutine,
550 IN PVOID *NormalContext,
551 IN PVOID *SystemArgument1,
552 IN PVOID *SystemArgument2
553 );
554
555 VOID
556 NTAPI
557 KiSuspendThread(
558 IN PVOID NormalContext,
559 IN PVOID SystemArgument1,
560 IN PVOID SystemArgument2
561 );
562
563 LONG
564 NTAPI
565 KeQueryBasePriorityThread(IN PKTHREAD Thread);
566
567 VOID
568 FASTCALL
569 KiSetPriorityThread(
570 IN PKTHREAD Thread,
571 IN KPRIORITY Priority
572 );
573
574 VOID
575 FASTCALL
576 KiUnlinkThread(
577 IN PKTHREAD Thread,
578 IN NTSTATUS WaitStatus
579 );
580
581 VOID
582 NTAPI
583 KeDumpStackFrames(PULONG Frame);
584
585 BOOLEAN
586 NTAPI
587 KiTestAlert(VOID);
588
589 VOID
590 FASTCALL
591 KiUnwaitThread(
592 IN PKTHREAD Thread,
593 IN NTSTATUS WaitStatus,
594 IN KPRIORITY Increment
595 );
596
597 VOID
598 NTAPI
599 KeInitializeProcess(
600 struct _KPROCESS *Process,
601 KPRIORITY Priority,
602 KAFFINITY Affinity,
603 PULONG DirectoryTableBase,
604 IN BOOLEAN Enable
605 );
606
607 VOID
608 NTAPI
609 KeSetQuantumProcess(
610 IN PKPROCESS Process,
611 IN UCHAR Quantum
612 );
613
614 KPRIORITY
615 NTAPI
616 KeSetPriorityAndQuantumProcess(
617 IN PKPROCESS Process,
618 IN KPRIORITY Priority,
619 IN UCHAR Quantum OPTIONAL
620 );
621
622 ULONG
623 NTAPI
624 KeForceResumeThread(IN PKTHREAD Thread);
625
626 VOID
627 NTAPI
628 KeThawAllThreads(
629 VOID
630 );
631
632 VOID
633 NTAPI
634 KeFreezeAllThreads(
635 VOID
636 );
637
638 BOOLEAN
639 NTAPI
640 KeDisableThreadApcQueueing(IN PKTHREAD Thread);
641
642 VOID
643 FASTCALL
644 KiWaitTest(
645 PVOID Object,
646 KPRIORITY Increment
647 );
648
649 VOID
650 NTAPI
651 KeContextToTrapFrame(
652 PCONTEXT Context,
653 PKEXCEPTION_FRAME ExeptionFrame,
654 PKTRAP_FRAME TrapFrame,
655 ULONG ContextFlags,
656 KPROCESSOR_MODE PreviousMode
657 );
658
659 VOID
660 NTAPI
661 KiCheckForKernelApcDelivery(VOID);
662
663 LONG
664 NTAPI
665 KiInsertQueue(
666 IN PKQUEUE Queue,
667 IN PLIST_ENTRY Entry,
668 BOOLEAN Head
669 );
670
671 VOID
672 NTAPI
673 KiTimerExpiration(
674 IN PKDPC Dpc,
675 IN PVOID DeferredContext,
676 IN PVOID SystemArgument1,
677 IN PVOID SystemArgument2
678 );
679
680 ULONG
681 NTAPI
682 KiComputeTimerTableIndex(
683 IN LONGLONG TimeValue
684 );
685
686 ULONG
687 NTAPI
688 KeSetProcess(
689 struct _KPROCESS* Process,
690 KPRIORITY Increment,
691 BOOLEAN InWait
692 );
693
694 VOID
695 NTAPI
696 KeInitializeEventPair(PKEVENT_PAIR EventPair);
697
698 VOID
699 NTAPI
700 KiInitializeUserApc(
701 IN PKEXCEPTION_FRAME Reserved,
702 IN PKTRAP_FRAME TrapFrame,
703 IN PKNORMAL_ROUTINE NormalRoutine,
704 IN PVOID NormalContext,
705 IN PVOID SystemArgument1,
706 IN PVOID SystemArgument2
707 );
708
709 PLIST_ENTRY
710 NTAPI
711 KeFlushQueueApc(
712 IN PKTHREAD Thread,
713 IN KPROCESSOR_MODE PreviousMode
714 );
715
716 VOID
717 NTAPI
718 KiAttachProcess(
719 struct _KTHREAD *Thread,
720 struct _KPROCESS *Process,
721 PKLOCK_QUEUE_HANDLE ApcLock,
722 struct _KAPC_STATE *SavedApcState
723 );
724
725 VOID
726 NTAPI
727 KiSwapProcess(
728 struct _KPROCESS *NewProcess,
729 struct _KPROCESS *OldProcess
730 );
731
732 BOOLEAN
733 NTAPI
734 KeTestAlertThread(IN KPROCESSOR_MODE AlertMode);
735
736 BOOLEAN
737 NTAPI
738 KeRemoveQueueApc(PKAPC Apc);
739
740 VOID
741 FASTCALL
742 KiActivateWaiterQueue(IN PKQUEUE Queue);
743
744 ULONG
745 NTAPI
746 KeQueryRuntimeProcess(IN PKPROCESS Process,
747 OUT PULONG UserTime);
748
749 /* INITIALIZATION FUNCTIONS *************************************************/
750
751 BOOLEAN
752 NTAPI
753 KeInitSystem(VOID);
754
755 VOID
756 NTAPI
757 KeInitExceptions(VOID);
758
759 VOID
760 NTAPI
761 KeInitInterrupts(VOID);
762
763 VOID
764 NTAPI
765 KiInitializeBugCheck(VOID);
766
767 VOID
768 NTAPI
769 KiSystemStartupReal(
770 IN PLOADER_PARAMETER_BLOCK LoaderBlock
771 );
772
773 BOOLEAN
774 NTAPI
775 KiDeliverUserApc(PKTRAP_FRAME TrapFrame);
776
777 VOID
778 NTAPI
779 KiMoveApcState(
780 PKAPC_STATE OldState,
781 PKAPC_STATE NewState
782 );
783
784 VOID
785 NTAPI
786 KiAddProfileEvent(
787 KPROFILE_SOURCE Source,
788 ULONG Pc
789 );
790
791 VOID
792 NTAPI
793 KiDispatchException(
794 PEXCEPTION_RECORD ExceptionRecord,
795 PKEXCEPTION_FRAME ExceptionFrame,
796 PKTRAP_FRAME Tf,
797 KPROCESSOR_MODE PreviousMode,
798 BOOLEAN SearchFrames
799 );
800
801 VOID
802 NTAPI
803 KeTrapFrameToContext(
804 IN PKTRAP_FRAME TrapFrame,
805 IN PKEXCEPTION_FRAME ExceptionFrame,
806 IN OUT PCONTEXT Context
807 );
808
809 DECLSPEC_NORETURN
810 VOID
811 NTAPI
812 KeBugCheckWithTf(
813 ULONG BugCheckCode,
814 ULONG_PTR BugCheckParameter1,
815 ULONG_PTR BugCheckParameter2,
816 ULONG_PTR BugCheckParameter3,
817 ULONG_PTR BugCheckParameter4,
818 PKTRAP_FRAME Tf
819 );
820
821 VOID
822 NTAPI
823 KeFlushCurrentTb(VOID);
824
825 BOOLEAN
826 NTAPI
827 KeInvalidateAllCaches(VOID);
828
829 VOID
830 FASTCALL
831 KeZeroPages(IN PVOID Address,
832 IN ULONG Size);
833
834 BOOLEAN
835 FASTCALL
836 KeInvalidAccessAllowed(IN PVOID TrapInformation OPTIONAL);
837
838 VOID
839 NTAPI
840 KeRosDumpStackFrames(
841 PULONG Frame,
842 ULONG FrameCount
843 );
844
845 VOID
846 NTAPI
847 KeSetSystemTime(
848 IN PLARGE_INTEGER NewSystemTime,
849 OUT PLARGE_INTEGER OldSystemTime,
850 IN BOOLEAN FixInterruptTime,
851 IN PLARGE_INTEGER HalTime
852 );
853
854 ULONG
855 NTAPI
856 KeV86Exception(
857 ULONG ExceptionNr,
858 PKTRAP_FRAME Tf,
859 ULONG address
860 );
861
862 VOID
863 NTAPI
864 KiStartUnexpectedRange(
865 VOID
866 );
867
868 VOID
869 NTAPI
870 KiEndUnexpectedRange(
871 VOID
872 );
873
874 VOID
875 NTAPI
876 KiInterruptDispatch(
877 VOID
878 );
879
880 VOID
881 NTAPI
882 KiChainedDispatch(
883 VOID
884 );
885
886 VOID
887 NTAPI
888 Ki386AdjustEsp0(
889 IN PKTRAP_FRAME TrapFrame
890 );
891
892 VOID
893 NTAPI
894 Ki386SetupAndExitToV86Mode(
895 OUT PTEB VdmTeb
896 );
897
898 VOID
899 NTAPI
900 KeI386VdmInitialize(
901 VOID
902 );
903
904 VOID
905 NTAPI
906 KiInitializeMachineType(
907 VOID
908 );
909
910 //
911 // We need to do major portability work
912 //
913 #ifdef _M_IX86
914 VOID
915 NTAPI
916 KiFlushNPXState(
917 IN FLOATING_SAVE_AREA *SaveArea
918 );
919 #endif
920
921 VOID
922 NTAPI
923 KiSetupStackAndInitializeKernel(
924 IN PKPROCESS InitProcess,
925 IN PKTHREAD InitThread,
926 IN PVOID IdleStack,
927 IN PKPRCB Prcb,
928 IN CCHAR Number,
929 IN PLOADER_PARAMETER_BLOCK LoaderBlock
930 );
931
932 VOID
933 NTAPI
934 KiInitSpinLocks(
935 IN PKPRCB Prcb,
936 IN CCHAR Number
937 );
938
939 LARGE_INTEGER
940 NTAPI
941 KiComputeReciprocal(
942 IN LONG Divisor,
943 OUT PUCHAR Shift
944 );
945
946 VOID
947 NTAPI
948 KiInitSystem(
949 VOID
950 );
951
952 VOID
953 FASTCALL
954 KiInsertQueueApc(
955 IN PKAPC Apc,
956 IN KPRIORITY PriorityBoost
957 );
958
959 NTSTATUS
960 NTAPI
961 KiCallUserMode(
962 IN PVOID *OutputBuffer,
963 IN PULONG OutputLength
964 );
965
966 PULONG
967 NTAPI
968 KiGetUserModeStackAddress(
969 VOID
970 );
971
972 ULONG_PTR
973 NTAPI
974 Ki386EnableGlobalPage(IN volatile ULONG_PTR Context);
975
976 VOID
977 NTAPI
978 KiInitializePAT(VOID);
979
980 VOID
981 NTAPI
982 KiInitializeMTRR(IN BOOLEAN FinalCpu);
983
984 VOID
985 NTAPI
986 KiAmdK6InitializeMTRR(VOID);
987
988 VOID
989 NTAPI
990 KiRestoreFastSyscallReturnState(VOID);
991
992 ULONG_PTR
993 NTAPI
994 Ki386EnableDE(IN ULONG_PTR Context);
995
996 ULONG_PTR
997 NTAPI
998 Ki386EnableFxsr(IN ULONG_PTR Context);
999
1000 ULONG_PTR
1001 NTAPI
1002 Ki386EnableXMMIExceptions(IN ULONG_PTR Context);
1003
1004 VOID
1005 NTAPI
1006 KiInitMachineDependent(VOID);
1007
1008 VOID
1009 NTAPI
1010 KiI386PentiumLockErrataFixup(VOID);
1011
1012 BOOLEAN
1013 NTAPI
1014 KeFreezeExecution(IN PKTRAP_FRAME TrapFrame,
1015 IN PKEXCEPTION_FRAME ExceptionFrame);
1016
1017 VOID
1018 NTAPI
1019 KeThawExecution(IN BOOLEAN Enable);
1020
1021 BOOLEAN
1022 NTAPI
1023 KeDisableInterrupts(
1024 VOID
1025 );
1026
1027 VOID
1028 FASTCALL
1029 KeAcquireQueuedSpinLockAtDpcLevel(
1030 IN OUT PKSPIN_LOCK_QUEUE LockQueue
1031 );
1032
1033 VOID
1034 FASTCALL
1035 KeReleaseQueuedSpinLockFromDpcLevel(
1036 IN OUT PKSPIN_LOCK_QUEUE LockQueue
1037 );
1038
1039 VOID
1040 NTAPI
1041 KiRestoreProcessorControlState(
1042 IN PKPROCESSOR_STATE ProcessorState
1043 );
1044
1045 VOID
1046 NTAPI
1047 KiSaveProcessorControlState(
1048 OUT PKPROCESSOR_STATE ProcessorState
1049 );
1050
1051 VOID
1052 FASTCALL
1053 KiRetireDpcList(
1054 IN PKPRCB Prcb
1055 );
1056
1057 VOID
1058 NTAPI
1059 KiQuantumEnd(
1060 VOID
1061 );
1062
1063 VOID
1064 KiSystemService(
1065 IN PKTHREAD Thread,
1066 IN PKTRAP_FRAME TrapFrame,
1067 IN ULONG Instruction
1068 );
1069
1070 VOID
1071 KiIdleLoop(
1072 VOID
1073 );
1074
1075 #include "ke_x.h"
1076
1077 #endif /* __NTOSKRNL_INCLUDE_INTERNAL_KE_H */