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