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