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