- Clean up kernel32\thread.c and fix some bugs.
[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 struct _KIRQ_TRAPFRAME;
75 struct _KPCR;
76 struct _KPRCB;
77 struct _KEXCEPTION_FRAME;
78
79 extern ULONG_PTR MmFreeLdrFirstKrnlPhysAddr;
80 extern ULONG_PTR MmFreeLdrLastKrnlPhysAddr;
81 extern ULONG_PTR MmFreeLdrLastKernelAddress;
82
83 extern PVOID KeUserApcDispatcher;
84 extern PVOID KeUserCallbackDispatcher;
85 extern PVOID KeUserExceptionDispatcher;
86 extern PVOID KeRaiseUserExceptionDispatcher;
87 extern LARGE_INTEGER KeBootTime;
88 extern ULONGLONG KeBootTimeBias;
89 extern BOOLEAN ExCmosClockIsSane;
90 extern ULONG KeI386NpxPresent;
91 extern ULONG KeI386XMMIPresent;
92 extern ULONG KeI386FxsrPresent;
93 extern ULONG KiMXCsrMask;
94 extern ULONG KeI386CpuType;
95 extern ULONG KeI386CpuStep;
96 extern ULONG KeProcessorArchitecture;
97 extern ULONG KeProcessorLevel;
98 extern ULONG KeProcessorRevision;
99 extern ULONG KeFeatureBits;
100 extern ULONG Ke386GlobalPagesEnabled;
101 extern BOOLEAN KiI386PentiumLockErrataPresent;
102 extern KNODE KiNode0;
103 extern PKNODE KeNodeBlock[1];
104 extern UCHAR KeNumberNodes;
105 extern UCHAR KeProcessNodeSeed;
106 extern ETHREAD KiInitialThread;
107 extern EPROCESS KiInitialProcess;
108 extern ULONG KiInterruptTemplate[KINTERRUPT_DISPATCH_CODES];
109 extern PULONG KiInterruptTemplateObject;
110 extern PULONG KiInterruptTemplateDispatch;
111 extern PULONG KiInterruptTemplate2ndDispatch;
112 extern ULONG KiUnexpectedEntrySize;
113 extern PVOID Ki386IopmSaveArea;
114 extern ULONG KeI386EFlagsAndMaskV86;
115 extern ULONG KeI386EFlagsOrMaskV86;
116 extern BOOLEAN KeI386VirtualIntExtensions;
117 extern KIDTENTRY KiIdt[];
118 extern KGDTENTRY KiBootGdt[];
119 extern KDESCRIPTOR KiGdtDescriptor;
120 extern KDESCRIPTOR KiIdtDescriptor;
121 extern KTSS KiBootTss;
122 extern UCHAR P0BootStack[];
123 extern UCHAR KiDoubleFaultStack[];
124 extern FAST_MUTEX KernelAddressSpaceLock;
125 extern ULONG KiMaximumDpcQueueDepth;
126 extern ULONG KiMinimumDpcRate;
127 extern ULONG KiAdjustDpcThreshold;
128 extern ULONG KiIdealDpcRate;
129 extern BOOLEAN KeThreadDpcEnable;
130 extern LARGE_INTEGER KiTimeIncrementReciprocal;
131 extern UCHAR KiTimeIncrementShiftCount;
132 extern ULONG KiTimeLimitIsrMicroseconds;
133 extern ULONG KiServiceLimit;
134 extern LIST_ENTRY BugcheckCallbackListHead, BugcheckReasonCallbackListHead;
135 extern KSPIN_LOCK BugCheckCallbackLock;
136 extern KDPC KiTimerExpireDpc;
137 extern KTIMER_TABLE_ENTRY KiTimerTableListHead[TIMER_TABLE_SIZE];
138 extern FAST_MUTEX KiGenericCallDpcMutex;
139 extern LIST_ENTRY KiProfileListHead, KiProfileSourceListHead;
140 extern KSPIN_LOCK KiProfileLock;
141 extern LIST_ENTRY KiProcessListHead;
142 extern LIST_ENTRY KiProcessInSwapListHead, KiProcessOutSwapListHead;
143 extern LIST_ENTRY KiStackInSwapListHead;
144 extern KEVENT KiSwapEvent;
145 extern PKPRCB KiProcessorBlock[];
146 extern ULONG KiMask32Array[MAXIMUM_PRIORITY];
147 extern ULONG KiIdleSummary;
148 extern VOID KiTrap8(VOID);
149 extern VOID KiTrap2(VOID);
150 extern VOID KiFastCallEntry(VOID);
151 extern PVOID KeUserApcDispatcher;
152 extern PVOID KeUserCallbackDispatcher;
153 extern PVOID KeUserExceptionDispatcher;
154 extern PVOID KeRaiseUserExceptionDispatcher;
155 extern UCHAR KiDebugRegisterTrapOffsets[9];
156 extern UCHAR KiDebugRegisterContextOffsets[9];
157
158 /* MACROS *************************************************************************/
159
160 #define AFFINITY_MASK(Id) KiMask32Array[Id]
161 #define PRIORITY_MASK(Id) KiMask32Array[Id]
162
163 /* The following macro initializes a dispatcher object's header */
164 #define KeInitializeDispatcherHeader(Header, t, s, State) \
165 { \
166 (Header)->Type = t; \
167 (Header)->Absolute = 0; \
168 (Header)->Inserted = 0; \
169 (Header)->Size = s; \
170 (Header)->SignalState = State; \
171 InitializeListHead(&((Header)->WaitListHead)); \
172 }
173
174 #define KEBUGCHECKWITHTF(a,b,c,d,e,f) \
175 DbgPrint("KeBugCheckWithTf at %s:%i\n",__FILE__,__LINE__), \
176 KeBugCheckWithTf(a,b,c,d,e,f)
177
178 /* Tells us if the Timer or Event is a Syncronization or Notification Object */
179 #define TIMER_OR_EVENT_TYPE 0x7L
180
181 /* One of the Reserved Wait Blocks, this one is for the Thread's Timer */
182 #define TIMER_WAIT_BLOCK 0x3L
183
184 /* IOPM Definitions */
185 #define IO_ACCESS_MAP_NONE 0
186 #define IOPM_OFFSET FIELD_OFFSET(KTSS, IoMaps[0].IoMap)
187 #define KiComputeIopmOffset(MapNumber) \
188 (MapNumber == IO_ACCESS_MAP_NONE) ? \
189 (USHORT)(sizeof(KTSS)) : \
190 (USHORT)(FIELD_OFFSET(KTSS, IoMaps[MapNumber-1].IoMap))
191
192 #define SIZE_OF_FX_REGISTERS 32
193
194 /* INTERNAL KERNEL FUNCTIONS ************************************************/
195
196 /* Readies a Thread for Execution. */
197 BOOLEAN
198 NTAPI
199 KiDispatchThreadNoLock(ULONG NewThreadStatus);
200
201 /* Readies a Thread for Execution. */
202 VOID
203 NTAPI
204 KiDispatchThread(ULONG NewThreadStatus);
205
206 /* Finds a new thread to run */
207 NTSTATUS
208 FASTCALL
209 KiSwapThread(
210 IN PKTHREAD Thread,
211 IN PKPRCB Prcb
212 );
213
214 VOID
215 NTAPI
216 KeReadyThread(
217 IN PKTHREAD Thread
218 );
219
220 BOOLEAN
221 NTAPI
222 KeSetDisableBoostThread(
223 IN OUT PKTHREAD Thread,
224 IN BOOLEAN Disable
225 );
226
227 VOID
228 NTAPI
229 KeBalanceSetManager(IN PVOID Context);
230
231 VOID
232 NTAPI
233 KiReadyThread(IN PKTHREAD Thread);
234
235 ULONG
236 NTAPI
237 KeSuspendThread(PKTHREAD Thread);
238
239 BOOLEAN
240 NTAPI
241 KeReadStateThread(IN PKTHREAD Thread);
242
243 BOOLEAN
244 FASTCALL
245 KiSwapContext(
246 IN PKTHREAD CurrentThread,
247 IN PKTHREAD NewThread
248 );
249
250 VOID
251 NTAPI
252 KiAdjustQuantumThread(IN PKTHREAD Thread);
253
254 VOID
255 FASTCALL
256 KiExitDispatcher(KIRQL OldIrql);
257
258 VOID
259 NTAPI
260 KiDeferredReadyThread(IN PKTHREAD Thread);
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 BOOLEAN
397 NTAPI
398 KiRosPrintAddress(PVOID Address);
399
400 VOID
401 NTAPI
402 KeUpdateRunTime(
403 PKTRAP_FRAME TrapFrame,
404 KIRQL Irql
405 );
406
407 VOID
408 NTAPI
409 KiExpireTimers(
410 PKDPC Dpc,
411 PVOID DeferredContext,
412 PVOID SystemArgument1,
413 PVOID SystemArgument2
414 );
415
416 VOID
417 NTAPI
418 KeInitializeThread(
419 IN PKPROCESS Process,
420 IN OUT PKTHREAD Thread,
421 IN PKSYSTEM_ROUTINE SystemRoutine,
422 IN PKSTART_ROUTINE StartRoutine,
423 IN PVOID StartContext,
424 IN PCONTEXT Context,
425 IN PVOID Teb,
426 IN PVOID KernelStack
427 );
428
429 VOID
430 NTAPI
431 KeUninitThread(
432 IN PKTHREAD Thread
433 );
434
435 NTSTATUS
436 NTAPI
437 KeInitThread(
438 IN OUT PKTHREAD Thread,
439 IN PVOID KernelStack,
440 IN PKSYSTEM_ROUTINE SystemRoutine,
441 IN PKSTART_ROUTINE StartRoutine,
442 IN PVOID StartContext,
443 IN PCONTEXT Context,
444 IN PVOID Teb,
445 IN PKPROCESS Process
446 );
447
448 VOID
449 NTAPI
450 KeStartThread(
451 IN OUT PKTHREAD Thread
452 );
453
454 BOOLEAN
455 NTAPI
456 KeAlertThread(
457 IN PKTHREAD Thread,
458 IN KPROCESSOR_MODE AlertMode
459 );
460
461 ULONG
462 NTAPI
463 KeAlertResumeThread(
464 IN PKTHREAD Thread
465 );
466
467 ULONG
468 NTAPI
469 KeResumeThread(
470 IN PKTHREAD Thread
471 );
472
473 PVOID
474 NTAPI
475 KeSwitchKernelStack(
476 IN PVOID StackBase,
477 IN PVOID StackLimit
478 );
479
480 VOID
481 NTAPI
482 KeRundownThread(VOID);
483
484 NTSTATUS
485 NTAPI
486 KeReleaseThread(PKTHREAD Thread);
487
488 VOID
489 NTAPI
490 KiSuspendRundown(
491 IN PKAPC Apc
492 );
493
494 VOID
495 NTAPI
496 KiSuspendNop(
497 IN PKAPC Apc,
498 IN PKNORMAL_ROUTINE *NormalRoutine,
499 IN PVOID *NormalContext,
500 IN PVOID *SystemArgument1,
501 IN PVOID *SystemArgument2
502 );
503
504 VOID
505 NTAPI
506 KiSuspendThread(
507 IN PVOID NormalContext,
508 IN PVOID SystemArgument1,
509 IN PVOID SystemArgument2
510 );
511
512 LONG
513 NTAPI
514 KeQueryBasePriorityThread(IN PKTHREAD Thread);
515
516 VOID
517 FASTCALL
518 KiSetPriorityThread(
519 IN PKTHREAD Thread,
520 IN KPRIORITY Priority
521 );
522
523 BOOLEAN
524 NTAPI
525 KiDispatcherObjectWake(
526 DISPATCHER_HEADER* hdr,
527 KPRIORITY increment
528 );
529
530 VOID
531 FASTCALL
532 KiUnlinkThread(
533 IN PKTHREAD Thread,
534 IN NTSTATUS WaitStatus
535 );
536
537 VOID
538 NTAPI
539 KeExpireTimers(
540 PKDPC Apc,
541 PVOID Arg1,
542 PVOID Arg2,
543 PVOID Arg3
544 );
545
546 VOID
547 NTAPI
548 KeDumpStackFrames(PULONG Frame);
549
550 BOOLEAN
551 NTAPI
552 KiTestAlert(VOID);
553
554 VOID
555 FASTCALL
556 KiUnwaitThread(
557 IN PKTHREAD Thread,
558 IN NTSTATUS WaitStatus,
559 IN KPRIORITY Increment
560 );
561
562 VOID
563 NTAPI
564 KeInitializeProcess(
565 struct _KPROCESS *Process,
566 KPRIORITY Priority,
567 KAFFINITY Affinity,
568 PLARGE_INTEGER DirectoryTableBase,
569 IN BOOLEAN Enable
570 );
571
572 VOID
573 NTAPI
574 KeSetQuantumProcess(
575 IN PKPROCESS Process,
576 IN UCHAR Quantum
577 );
578
579 KPRIORITY
580 NTAPI
581 KeSetPriorityAndQuantumProcess(
582 IN PKPROCESS Process,
583 IN KPRIORITY Priority,
584 IN UCHAR Quantum OPTIONAL
585 );
586
587 ULONG
588 NTAPI
589 KeForceResumeThread(IN PKTHREAD Thread);
590
591 VOID
592 NTAPI
593 KeThawAllThreads(
594 VOID
595 );
596
597 VOID
598 NTAPI
599 KeFreezeAllThreads(
600 VOID
601 );
602
603 BOOLEAN
604 NTAPI
605 KeDisableThreadApcQueueing(IN PKTHREAD Thread);
606
607 VOID
608 FASTCALL
609 KiWaitTest(
610 PVOID Object,
611 KPRIORITY Increment
612 );
613
614 VOID
615 NTAPI
616 KeContextToTrapFrame(
617 PCONTEXT Context,
618 PKEXCEPTION_FRAME ExeptionFrame,
619 PKTRAP_FRAME TrapFrame,
620 ULONG ContextFlags,
621 KPROCESSOR_MODE PreviousMode
622 );
623
624 VOID
625 NTAPI
626 KiCheckForKernelApcDelivery(VOID);
627
628 LONG
629 NTAPI
630 KiInsertQueue(
631 IN PKQUEUE Queue,
632 IN PLIST_ENTRY Entry,
633 BOOLEAN Head
634 );
635
636 VOID
637 NTAPI
638 KiTimerExpiration(
639 IN PKDPC Dpc,
640 IN PVOID DeferredContext,
641 IN PVOID SystemArgument1,
642 IN PVOID SystemArgument2
643 );
644
645 ULONG
646 NTAPI
647 KiComputeTimerTableIndex(
648 IN LONGLONG TimeValue
649 );
650
651 ULONG
652 NTAPI
653 KeSetProcess(
654 struct _KPROCESS* Process,
655 KPRIORITY Increment,
656 BOOLEAN InWait
657 );
658
659 VOID
660 NTAPI
661 KeInitializeEventPair(PKEVENT_PAIR EventPair);
662
663 VOID
664 NTAPI
665 KiInitializeUserApc(
666 IN PKEXCEPTION_FRAME Reserved,
667 IN PKTRAP_FRAME TrapFrame,
668 IN PKNORMAL_ROUTINE NormalRoutine,
669 IN PVOID NormalContext,
670 IN PVOID SystemArgument1,
671 IN PVOID SystemArgument2
672 );
673
674 PLIST_ENTRY
675 NTAPI
676 KeFlushQueueApc(
677 IN PKTHREAD Thread,
678 IN KPROCESSOR_MODE PreviousMode
679 );
680
681 VOID
682 NTAPI
683 KiAttachProcess(
684 struct _KTHREAD *Thread,
685 struct _KPROCESS *Process,
686 PKLOCK_QUEUE_HANDLE ApcLock,
687 struct _KAPC_STATE *SavedApcState
688 );
689
690 VOID
691 NTAPI
692 KiSwapProcess(
693 struct _KPROCESS *NewProcess,
694 struct _KPROCESS *OldProcess
695 );
696
697 BOOLEAN
698 NTAPI
699 KeTestAlertThread(IN KPROCESSOR_MODE AlertMode);
700
701 BOOLEAN
702 NTAPI
703 KeRemoveQueueApc(PKAPC Apc);
704
705 VOID
706 FASTCALL
707 KiActivateWaiterQueue(IN PKQUEUE Queue);
708
709 /* INITIALIZATION FUNCTIONS *************************************************/
710
711 BOOLEAN
712 NTAPI
713 KeInitSystem(VOID);
714
715 VOID
716 NTAPI
717 KeInitExceptions(VOID);
718
719 VOID
720 NTAPI
721 KeInitInterrupts(VOID);
722
723 VOID
724 NTAPI
725 KiInitializeBugCheck(VOID);
726
727 VOID
728 NTAPI
729 KiInitializeSystemClock(VOID);
730
731 VOID
732 NTAPI
733 KiSystemStartup(
734 IN PLOADER_PARAMETER_BLOCK LoaderBlock
735 );
736
737 BOOLEAN
738 NTAPI
739 KiDeliverUserApc(PKTRAP_FRAME TrapFrame);
740
741 VOID
742 NTAPI
743 KiMoveApcState(
744 PKAPC_STATE OldState,
745 PKAPC_STATE NewState
746 );
747
748 VOID
749 NTAPI
750 KiAddProfileEvent(
751 KPROFILE_SOURCE Source,
752 ULONG Pc
753 );
754
755 VOID
756 NTAPI
757 KiDispatchException(
758 PEXCEPTION_RECORD ExceptionRecord,
759 PKEXCEPTION_FRAME ExceptionFrame,
760 PKTRAP_FRAME Tf,
761 KPROCESSOR_MODE PreviousMode,
762 BOOLEAN SearchFrames
763 );
764
765 VOID
766 NTAPI
767 KeTrapFrameToContext(
768 IN PKTRAP_FRAME TrapFrame,
769 IN PKEXCEPTION_FRAME ExceptionFrame,
770 IN OUT PCONTEXT Context
771 );
772
773 VOID
774 NTAPI
775 KeBugCheckWithTf(
776 ULONG BugCheckCode,
777 ULONG BugCheckParameter1,
778 ULONG BugCheckParameter2,
779 ULONG BugCheckParameter3,
780 ULONG BugCheckParameter4,
781 PKTRAP_FRAME Tf
782 );
783
784 VOID
785 NTAPI
786 KeFlushCurrentTb(VOID);
787
788 VOID
789 NTAPI
790 KeRosDumpStackFrames(
791 PULONG Frame,
792 ULONG FrameCount
793 );
794
795 VOID
796 NTAPI
797 KeSetSystemTime(
798 IN PLARGE_INTEGER NewSystemTime,
799 OUT PLARGE_INTEGER OldSystemTime,
800 IN BOOLEAN FixInterruptTime,
801 IN PLARGE_INTEGER HalTime
802 );
803
804 ULONG
805 NTAPI
806 KeV86Exception(
807 ULONG ExceptionNr,
808 PKTRAP_FRAME Tf,
809 ULONG address
810 );
811
812 VOID
813 NTAPI
814 KiStartUnexpectedRange(
815 VOID
816 );
817
818 VOID
819 NTAPI
820 KiEndUnexpectedRange(
821 VOID
822 );
823
824 VOID
825 NTAPI
826 KiInterruptDispatch(
827 VOID
828 );
829
830 VOID
831 NTAPI
832 KiChainedDispatch(
833 VOID
834 );
835
836 VOID
837 NTAPI
838 Ki386AdjustEsp0(
839 IN PKTRAP_FRAME TrapFrame
840 );
841
842 VOID
843 NTAPI
844 Ki386SetupAndExitToV86Mode(
845 OUT PTEB VdmTeb
846 );
847
848 VOID
849 NTAPI
850 KeI386VdmInitialize(
851 VOID
852 );
853
854 VOID
855 NTAPI
856 KiInitializeMachineType(
857 VOID
858 );
859
860 VOID
861 NTAPI
862 KiFlushNPXState(
863 IN FLOATING_SAVE_AREA *SaveArea
864 );
865
866 VOID
867 NTAPI
868 KiInitSpinLocks(
869 IN PKPRCB Prcb,
870 IN CCHAR Number
871 );
872
873 LARGE_INTEGER
874 NTAPI
875 KiComputeReciprocal(
876 IN LONG Divisor,
877 OUT PUCHAR Shift
878 );
879
880 VOID
881 NTAPI
882 KiInitSystem(
883 VOID
884 );
885
886 VOID
887 FASTCALL
888 KiInsertQueueApc(
889 IN PKAPC Apc,
890 IN KPRIORITY PriorityBoost
891 );
892
893 NTSTATUS
894 NTAPI
895 KiCallUserMode(
896 IN PVOID *OutputBuffer,
897 IN PULONG OutputLength
898 );
899
900 PULONG
901 NTAPI
902 KiGetUserModeStackAddress(
903 VOID
904 );
905
906 ULONG_PTR
907 NTAPI
908 Ki386EnableGlobalPage(IN volatile ULONG_PTR Context);
909
910 VOID
911 NTAPI
912 KiInitializePAT(VOID);
913
914 VOID
915 NTAPI
916 KiInitializeMTRR(IN BOOLEAN FinalCpu);
917
918 VOID
919 NTAPI
920 KiAmdK6InitializeMTRR(VOID);
921
922 VOID
923 NTAPI
924 KiRestoreFastSyscallReturnState(VOID);
925
926 ULONG_PTR
927 NTAPI
928 Ki386EnableDE(IN ULONG_PTR Context);
929
930 ULONG_PTR
931 NTAPI
932 Ki386EnableFxsr(IN ULONG_PTR Context);
933
934 ULONG_PTR
935 NTAPI
936 Ki386EnableXMMIExceptions(IN ULONG_PTR Context);
937
938 VOID
939 NTAPI
940 KiInitMachineDependent(VOID);
941
942 VOID
943 NTAPI
944 KiI386PentiumLockErrataFixup(VOID);
945
946 VOID
947 WRMSR(
948 IN ULONG Register,
949 IN LONGLONG Value
950 );
951
952 #include "ke_x.h"
953
954 #endif /* __NTOSKRNL_INCLUDE_INTERNAL_KE_H */