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