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