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