Merging r37048, r37051, r37052, r37055 from the-real-msvc branch
[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_PTR KiBugCheckData[5];
157 extern ULONG KiFreezeFlag;
158 extern ULONG KiDPCTimeout;
159
160 /* MACROS *************************************************************************/
161
162 #define AFFINITY_MASK(Id) KiMask32Array[Id]
163 #define PRIORITY_MASK(Id) KiMask32Array[Id]
164
165 /* The following macro initializes a dispatcher object's header */
166 #define KeInitializeDispatcherHeader(Header, t, s, State) \
167 { \
168 (Header)->Type = t; \
169 (Header)->Absolute = 0; \
170 (Header)->Inserted = 0; \
171 (Header)->Size = s; \
172 (Header)->SignalState = State; \
173 InitializeListHead(&((Header)->WaitListHead)); \
174 }
175
176 /* Tells us if the Timer or Event is a Syncronization or Notification Object */
177 #define TIMER_OR_EVENT_TYPE 0x7L
178
179 /* One of the Reserved Wait Blocks, this one is for the Thread's Timer */
180 #define TIMER_WAIT_BLOCK 0x3L
181
182 /* IOPM Definitions */
183 #define IO_ACCESS_MAP_NONE 0
184 #define IOPM_OFFSET FIELD_OFFSET(KTSS, IoMaps[0].IoMap)
185 #define KiComputeIopmOffset(MapNumber) \
186 (MapNumber == IO_ACCESS_MAP_NONE) ? \
187 (USHORT)(sizeof(KTSS)) : \
188 (USHORT)(FIELD_OFFSET(KTSS, IoMaps[MapNumber-1].IoMap))
189
190 #define SIZE_OF_FX_REGISTERS 32
191
192 /* INTERNAL KERNEL FUNCTIONS ************************************************/
193
194 /* Finds a new thread to run */
195 NTSTATUS
196 FASTCALL
197 KiSwapThread(
198 IN PKTHREAD Thread,
199 IN PKPRCB Prcb
200 );
201
202 VOID
203 NTAPI
204 KeReadyThread(
205 IN PKTHREAD Thread
206 );
207
208 BOOLEAN
209 NTAPI
210 KeSetDisableBoostThread(
211 IN OUT PKTHREAD Thread,
212 IN BOOLEAN Disable
213 );
214
215 VOID
216 NTAPI
217 KeBalanceSetManager(IN PVOID Context);
218
219 VOID
220 NTAPI
221 KiReadyThread(IN PKTHREAD Thread);
222
223 ULONG
224 NTAPI
225 KeSuspendThread(PKTHREAD Thread);
226
227 BOOLEAN
228 NTAPI
229 KeReadStateThread(IN PKTHREAD Thread);
230
231 BOOLEAN
232 FASTCALL
233 KiSwapContext(
234 IN PKTHREAD CurrentThread,
235 IN PKTHREAD NewThread
236 );
237
238 VOID
239 NTAPI
240 KiAdjustQuantumThread(IN PKTHREAD Thread);
241
242 VOID
243 FASTCALL
244 KiExitDispatcher(KIRQL OldIrql);
245
246 VOID
247 NTAPI
248 KiDeferredReadyThread(IN PKTHREAD Thread);
249
250 PKTHREAD
251 FASTCALL
252 KiIdleSchedule(
253 IN PKPRCB Prcb
254 );
255
256 VOID
257 FASTCALL
258 KiProcessDeferredReadyList(
259 IN PKPRCB Prcb
260 );
261
262 KAFFINITY
263 FASTCALL
264 KiSetAffinityThread(
265 IN PKTHREAD Thread,
266 IN KAFFINITY Affinity
267 );
268
269 PKTHREAD
270 FASTCALL
271 KiSelectNextThread(
272 IN PKPRCB Prcb
273 );
274
275 VOID
276 NTAPI
277 CPUID(
278 OUT ULONG CpuInfo[4],
279 IN ULONG InfoType
280 );
281
282 BOOLEAN
283 FASTCALL
284 KiInsertTimerTable(
285 IN PKTIMER Timer,
286 IN ULONG Hand
287 );
288
289 BOOLEAN
290 FASTCALL
291 KiInsertTreeTimer(
292 IN PKTIMER Timer,
293 IN LARGE_INTEGER Interval
294 );
295
296 VOID
297 FASTCALL
298 KiCompleteTimer(
299 IN PKTIMER Timer,
300 IN PKSPIN_LOCK_QUEUE LockQueue
301 );
302
303 /* gmutex.c ********************************************************************/
304
305 VOID
306 FASTCALL
307 KiAcquireGuardedMutexContented(PKGUARDED_MUTEX GuardedMutex);
308
309 /* gate.c **********************************************************************/
310
311 VOID
312 FASTCALL
313 KeInitializeGate(PKGATE Gate);
314
315 VOID
316 FASTCALL
317 KeSignalGateBoostPriority(PKGATE Gate);
318
319 VOID
320 FASTCALL
321 KeWaitForGate(
322 PKGATE Gate,
323 KWAIT_REASON WaitReason,
324 KPROCESSOR_MODE WaitMode
325 );
326
327 /* ipi.c ********************************************************************/
328
329 VOID
330 NTAPI
331 KiIpiSendRequest(
332 KAFFINITY TargetSet,
333 ULONG IpiRequest
334 );
335
336 /* next file ***************************************************************/
337
338 UCHAR
339 NTAPI
340 KeFindNextRightSetAffinity(
341 IN UCHAR Number,
342 IN ULONG Set
343 );
344
345 VOID
346 NTAPI
347 DbgBreakPointNoBugCheck(VOID);
348
349 VOID
350 NTAPI
351 KeInitializeProfile(
352 struct _KPROFILE* Profile,
353 struct _KPROCESS* Process,
354 PVOID ImageBase,
355 ULONG ImageSize,
356 ULONG BucketSize,
357 KPROFILE_SOURCE ProfileSource,
358 KAFFINITY Affinity
359 );
360
361 VOID
362 NTAPI
363 KeStartProfile(
364 struct _KPROFILE* Profile,
365 PVOID Buffer
366 );
367
368 BOOLEAN
369 NTAPI
370 KeStopProfile(struct _KPROFILE* Profile);
371
372 ULONG
373 NTAPI
374 KeQueryIntervalProfile(KPROFILE_SOURCE ProfileSource);
375
376 VOID
377 NTAPI
378 KeSetIntervalProfile(
379 KPROFILE_SOURCE ProfileSource,
380 ULONG Interval
381 );
382
383 VOID
384 NTAPI
385 KeProfileInterrupt(
386 PKTRAP_FRAME TrapFrame
387 );
388
389 VOID
390 NTAPI
391 KeProfileInterruptWithSource(
392 IN PKTRAP_FRAME TrapFrame,
393 IN KPROFILE_SOURCE Source
394 );
395
396 VOID
397 NTAPI
398 KeUpdateRunTime(
399 PKTRAP_FRAME TrapFrame,
400 KIRQL Irql
401 );
402
403 VOID
404 NTAPI
405 KiExpireTimers(
406 PKDPC Dpc,
407 PVOID DeferredContext,
408 PVOID SystemArgument1,
409 PVOID SystemArgument2
410 );
411
412 VOID
413 NTAPI
414 KeInitializeThread(
415 IN PKPROCESS Process,
416 IN OUT PKTHREAD Thread,
417 IN PKSYSTEM_ROUTINE SystemRoutine,
418 IN PKSTART_ROUTINE StartRoutine,
419 IN PVOID StartContext,
420 IN PCONTEXT Context,
421 IN PVOID Teb,
422 IN PVOID KernelStack
423 );
424
425 VOID
426 NTAPI
427 KeUninitThread(
428 IN PKTHREAD Thread
429 );
430
431 NTSTATUS
432 NTAPI
433 KeInitThread(
434 IN OUT PKTHREAD Thread,
435 IN PVOID KernelStack,
436 IN PKSYSTEM_ROUTINE SystemRoutine,
437 IN PKSTART_ROUTINE StartRoutine,
438 IN PVOID StartContext,
439 IN PCONTEXT Context,
440 IN PVOID Teb,
441 IN PKPROCESS Process
442 );
443
444 VOID
445 NTAPI
446 KeStartThread(
447 IN OUT PKTHREAD Thread
448 );
449
450 BOOLEAN
451 NTAPI
452 KeAlertThread(
453 IN PKTHREAD Thread,
454 IN KPROCESSOR_MODE AlertMode
455 );
456
457 ULONG
458 NTAPI
459 KeAlertResumeThread(
460 IN PKTHREAD Thread
461 );
462
463 ULONG
464 NTAPI
465 KeResumeThread(
466 IN PKTHREAD Thread
467 );
468
469 PVOID
470 NTAPI
471 KeSwitchKernelStack(
472 IN PVOID StackBase,
473 IN PVOID StackLimit
474 );
475
476 VOID
477 NTAPI
478 KeRundownThread(VOID);
479
480 NTSTATUS
481 NTAPI
482 KeReleaseThread(PKTHREAD Thread);
483
484 VOID
485 NTAPI
486 KiSuspendRundown(
487 IN PKAPC Apc
488 );
489
490 VOID
491 NTAPI
492 KiSuspendNop(
493 IN PKAPC Apc,
494 IN PKNORMAL_ROUTINE *NormalRoutine,
495 IN PVOID *NormalContext,
496 IN PVOID *SystemArgument1,
497 IN PVOID *SystemArgument2
498 );
499
500 VOID
501 NTAPI
502 KiSuspendThread(
503 IN PVOID NormalContext,
504 IN PVOID SystemArgument1,
505 IN PVOID SystemArgument2
506 );
507
508 LONG
509 NTAPI
510 KeQueryBasePriorityThread(IN PKTHREAD Thread);
511
512 VOID
513 FASTCALL
514 KiSetPriorityThread(
515 IN PKTHREAD Thread,
516 IN KPRIORITY Priority
517 );
518
519 VOID
520 FASTCALL
521 KiUnlinkThread(
522 IN PKTHREAD Thread,
523 IN NTSTATUS WaitStatus
524 );
525
526 VOID
527 NTAPI
528 KeDumpStackFrames(PULONG Frame);
529
530 BOOLEAN
531 NTAPI
532 KiTestAlert(VOID);
533
534 VOID
535 FASTCALL
536 KiUnwaitThread(
537 IN PKTHREAD Thread,
538 IN NTSTATUS WaitStatus,
539 IN KPRIORITY Increment
540 );
541
542 VOID
543 NTAPI
544 KeInitializeProcess(
545 struct _KPROCESS *Process,
546 KPRIORITY Priority,
547 KAFFINITY Affinity,
548 PULONG DirectoryTableBase,
549 IN BOOLEAN Enable
550 );
551
552 VOID
553 NTAPI
554 KeSetQuantumProcess(
555 IN PKPROCESS Process,
556 IN UCHAR Quantum
557 );
558
559 KPRIORITY
560 NTAPI
561 KeSetPriorityAndQuantumProcess(
562 IN PKPROCESS Process,
563 IN KPRIORITY Priority,
564 IN UCHAR Quantum OPTIONAL
565 );
566
567 ULONG
568 NTAPI
569 KeForceResumeThread(IN PKTHREAD Thread);
570
571 VOID
572 NTAPI
573 KeThawAllThreads(
574 VOID
575 );
576
577 VOID
578 NTAPI
579 KeFreezeAllThreads(
580 VOID
581 );
582
583 BOOLEAN
584 NTAPI
585 KeDisableThreadApcQueueing(IN PKTHREAD Thread);
586
587 VOID
588 FASTCALL
589 KiWaitTest(
590 PVOID Object,
591 KPRIORITY Increment
592 );
593
594 VOID
595 NTAPI
596 KeContextToTrapFrame(
597 PCONTEXT Context,
598 PKEXCEPTION_FRAME ExeptionFrame,
599 PKTRAP_FRAME TrapFrame,
600 ULONG ContextFlags,
601 KPROCESSOR_MODE PreviousMode
602 );
603
604 VOID
605 NTAPI
606 KiCheckForKernelApcDelivery(VOID);
607
608 LONG
609 NTAPI
610 KiInsertQueue(
611 IN PKQUEUE Queue,
612 IN PLIST_ENTRY Entry,
613 BOOLEAN Head
614 );
615
616 VOID
617 NTAPI
618 KiTimerExpiration(
619 IN PKDPC Dpc,
620 IN PVOID DeferredContext,
621 IN PVOID SystemArgument1,
622 IN PVOID SystemArgument2
623 );
624
625 ULONG
626 NTAPI
627 KiComputeTimerTableIndex(
628 IN LONGLONG TimeValue
629 );
630
631 ULONG
632 NTAPI
633 KeSetProcess(
634 struct _KPROCESS* Process,
635 KPRIORITY Increment,
636 BOOLEAN InWait
637 );
638
639 VOID
640 NTAPI
641 KeInitializeEventPair(PKEVENT_PAIR EventPair);
642
643 VOID
644 NTAPI
645 KiInitializeUserApc(
646 IN PKEXCEPTION_FRAME Reserved,
647 IN PKTRAP_FRAME TrapFrame,
648 IN PKNORMAL_ROUTINE NormalRoutine,
649 IN PVOID NormalContext,
650 IN PVOID SystemArgument1,
651 IN PVOID SystemArgument2
652 );
653
654 PLIST_ENTRY
655 NTAPI
656 KeFlushQueueApc(
657 IN PKTHREAD Thread,
658 IN KPROCESSOR_MODE PreviousMode
659 );
660
661 VOID
662 NTAPI
663 KiAttachProcess(
664 struct _KTHREAD *Thread,
665 struct _KPROCESS *Process,
666 PKLOCK_QUEUE_HANDLE ApcLock,
667 struct _KAPC_STATE *SavedApcState
668 );
669
670 VOID
671 NTAPI
672 KiSwapProcess(
673 struct _KPROCESS *NewProcess,
674 struct _KPROCESS *OldProcess
675 );
676
677 BOOLEAN
678 NTAPI
679 KeTestAlertThread(IN KPROCESSOR_MODE AlertMode);
680
681 BOOLEAN
682 NTAPI
683 KeRemoveQueueApc(PKAPC Apc);
684
685 VOID
686 FASTCALL
687 KiActivateWaiterQueue(IN PKQUEUE Queue);
688
689 /* INITIALIZATION FUNCTIONS *************************************************/
690
691 BOOLEAN
692 NTAPI
693 KeInitSystem(VOID);
694
695 VOID
696 NTAPI
697 KeInitExceptions(VOID);
698
699 VOID
700 NTAPI
701 KeInitInterrupts(VOID);
702
703 VOID
704 NTAPI
705 KiInitializeBugCheck(VOID);
706
707 VOID
708 NTAPI
709 KiSystemStartupReal(
710 IN PLOADER_PARAMETER_BLOCK LoaderBlock
711 );
712
713 BOOLEAN
714 NTAPI
715 KiDeliverUserApc(PKTRAP_FRAME TrapFrame);
716
717 VOID
718 NTAPI
719 KiMoveApcState(
720 PKAPC_STATE OldState,
721 PKAPC_STATE NewState
722 );
723
724 VOID
725 NTAPI
726 KiAddProfileEvent(
727 KPROFILE_SOURCE Source,
728 ULONG Pc
729 );
730
731 VOID
732 NTAPI
733 KiDispatchException(
734 PEXCEPTION_RECORD ExceptionRecord,
735 PKEXCEPTION_FRAME ExceptionFrame,
736 PKTRAP_FRAME Tf,
737 KPROCESSOR_MODE PreviousMode,
738 BOOLEAN SearchFrames
739 );
740
741 VOID
742 NTAPI
743 KeTrapFrameToContext(
744 IN PKTRAP_FRAME TrapFrame,
745 IN PKEXCEPTION_FRAME ExceptionFrame,
746 IN OUT PCONTEXT Context
747 );
748
749 VOID
750 NTAPI
751 KeBugCheckWithTf(
752 ULONG BugCheckCode,
753 ULONG_PTR BugCheckParameter1,
754 ULONG_PTR BugCheckParameter2,
755 ULONG_PTR BugCheckParameter3,
756 ULONG_PTR BugCheckParameter4,
757 PKTRAP_FRAME Tf
758 );
759
760 VOID
761 NTAPI
762 KeFlushCurrentTb(VOID);
763
764 BOOLEAN
765 NTAPI
766 KeInvalidateAllCaches(VOID);
767
768 VOID
769 FASTCALL
770 KeZeroPages(IN PVOID Address,
771 IN ULONG Size);
772
773 BOOLEAN
774 FASTCALL
775 KeInvalidAccessAllowed(IN PVOID TrapInformation OPTIONAL);
776
777 VOID
778 NTAPI
779 KeRosDumpStackFrames(
780 PULONG Frame,
781 ULONG FrameCount
782 );
783
784 VOID
785 NTAPI
786 KeSetSystemTime(
787 IN PLARGE_INTEGER NewSystemTime,
788 OUT PLARGE_INTEGER OldSystemTime,
789 IN BOOLEAN FixInterruptTime,
790 IN PLARGE_INTEGER HalTime
791 );
792
793 ULONG
794 NTAPI
795 KeV86Exception(
796 ULONG ExceptionNr,
797 PKTRAP_FRAME Tf,
798 ULONG address
799 );
800
801 VOID
802 NTAPI
803 KiStartUnexpectedRange(
804 VOID
805 );
806
807 VOID
808 NTAPI
809 KiEndUnexpectedRange(
810 VOID
811 );
812
813 VOID
814 NTAPI
815 KiInterruptDispatch(
816 VOID
817 );
818
819 VOID
820 NTAPI
821 KiChainedDispatch(
822 VOID
823 );
824
825 VOID
826 NTAPI
827 Ki386AdjustEsp0(
828 IN PKTRAP_FRAME TrapFrame
829 );
830
831 VOID
832 NTAPI
833 Ki386SetupAndExitToV86Mode(
834 OUT PTEB VdmTeb
835 );
836
837 VOID
838 NTAPI
839 KeI386VdmInitialize(
840 VOID
841 );
842
843 VOID
844 NTAPI
845 KiInitializeMachineType(
846 VOID
847 );
848
849 //
850 // We need to do major portability work
851 //
852 #ifdef _M_IX86
853 VOID
854 NTAPI
855 KiFlushNPXState(
856 IN FLOATING_SAVE_AREA *SaveArea
857 );
858 #endif
859
860 VOID
861 NTAPI
862 KiSetupStackAndInitializeKernel(
863 IN PKPROCESS InitProcess,
864 IN PKTHREAD InitThread,
865 IN PVOID IdleStack,
866 IN PKPRCB Prcb,
867 IN CCHAR Number,
868 IN PLOADER_PARAMETER_BLOCK LoaderBlock
869 );
870
871 VOID
872 NTAPI
873 KiInitSpinLocks(
874 IN PKPRCB Prcb,
875 IN CCHAR Number
876 );
877
878 LARGE_INTEGER
879 NTAPI
880 KiComputeReciprocal(
881 IN LONG Divisor,
882 OUT PUCHAR Shift
883 );
884
885 VOID
886 NTAPI
887 KiInitSystem(
888 VOID
889 );
890
891 VOID
892 FASTCALL
893 KiInsertQueueApc(
894 IN PKAPC Apc,
895 IN KPRIORITY PriorityBoost
896 );
897
898 NTSTATUS
899 NTAPI
900 KiCallUserMode(
901 IN PVOID *OutputBuffer,
902 IN PULONG OutputLength
903 );
904
905 PULONG
906 NTAPI
907 KiGetUserModeStackAddress(
908 VOID
909 );
910
911 ULONG_PTR
912 NTAPI
913 Ki386EnableGlobalPage(IN volatile ULONG_PTR Context);
914
915 VOID
916 NTAPI
917 KiInitializePAT(VOID);
918
919 VOID
920 NTAPI
921 KiInitializeMTRR(IN BOOLEAN FinalCpu);
922
923 VOID
924 NTAPI
925 KiAmdK6InitializeMTRR(VOID);
926
927 VOID
928 NTAPI
929 KiRestoreFastSyscallReturnState(VOID);
930
931 ULONG_PTR
932 NTAPI
933 Ki386EnableDE(IN ULONG_PTR Context);
934
935 ULONG_PTR
936 NTAPI
937 Ki386EnableFxsr(IN ULONG_PTR Context);
938
939 ULONG_PTR
940 NTAPI
941 Ki386EnableXMMIExceptions(IN ULONG_PTR Context);
942
943 VOID
944 NTAPI
945 KiInitMachineDependent(VOID);
946
947 VOID
948 NTAPI
949 KiI386PentiumLockErrataFixup(VOID);
950
951 VOID
952 WRMSR(
953 IN ULONG Register,
954 IN LONGLONG Value
955 );
956
957 BOOLEAN
958 NTAPI
959 KeFreezeExecution(IN PKTRAP_FRAME TrapFrame,
960 IN PKEXCEPTION_FRAME ExceptionFrame);
961
962 VOID
963 NTAPI
964 KeThawExecution(IN BOOLEAN Enable);
965
966 BOOLEAN
967 NTAPI
968 KeDisableInterrupts(
969 VOID
970 );
971
972 VOID
973 FASTCALL
974 KeAcquireQueuedSpinLockAtDpcLevel(
975 IN OUT PKSPIN_LOCK_QUEUE LockQueue
976 );
977
978 VOID
979 FASTCALL
980 KeReleaseQueuedSpinLockFromDpcLevel(
981 IN OUT PKSPIN_LOCK_QUEUE LockQueue
982 );
983
984 VOID
985 NTAPI
986 KiRestoreProcessorControlState(
987 IN PKPROCESSOR_STATE ProcessorState
988 );
989
990 VOID
991 NTAPI
992 KiSaveProcessorControlState(
993 OUT PKPROCESSOR_STATE ProcessorState
994 );
995
996 VOID
997 FASTCALL
998 KiRetireDpcList(
999 IN PKPRCB Prcb
1000 );
1001
1002 VOID
1003 NTAPI
1004 KiQuantumEnd(
1005 VOID
1006 );
1007
1008 VOID
1009 KiSystemService(
1010 IN PKTHREAD Thread,
1011 IN PKTRAP_FRAME TrapFrame,
1012 IN ULONG Instruction
1013 );
1014
1015 VOID
1016 KiIdleLoop(
1017 VOID
1018 );
1019
1020 #include "ke_x.h"
1021
1022 #endif /* __NTOSKRNL_INCLUDE_INTERNAL_KE_H */