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