Sync to trunk r39350.
[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 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 LONG_PTR
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 LONG_PTR 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 VOID
794 NTAPI
795 KeBugCheckWithTf(
796 ULONG BugCheckCode,
797 ULONG_PTR BugCheckParameter1,
798 ULONG_PTR BugCheckParameter2,
799 ULONG_PTR BugCheckParameter3,
800 ULONG_PTR BugCheckParameter4,
801 PKTRAP_FRAME Tf
802 );
803
804 VOID
805 NTAPI
806 KeFlushCurrentTb(VOID);
807
808 BOOLEAN
809 NTAPI
810 KeInvalidateAllCaches(VOID);
811
812 VOID
813 FASTCALL
814 KeZeroPages(IN PVOID Address,
815 IN ULONG Size);
816
817 BOOLEAN
818 FASTCALL
819 KeInvalidAccessAllowed(IN PVOID TrapInformation OPTIONAL);
820
821 VOID
822 NTAPI
823 KeRosDumpStackFrames(
824 PULONG_PTR Frame,
825 ULONG FrameCount
826 );
827
828 VOID
829 NTAPI
830 KeSetSystemTime(
831 IN PLARGE_INTEGER NewSystemTime,
832 OUT PLARGE_INTEGER OldSystemTime,
833 IN BOOLEAN FixInterruptTime,
834 IN PLARGE_INTEGER HalTime
835 );
836
837 ULONG
838 NTAPI
839 KeV86Exception(
840 ULONG ExceptionNr,
841 PKTRAP_FRAME Tf,
842 ULONG address
843 );
844
845 VOID
846 NTAPI
847 KiStartUnexpectedRange(
848 VOID
849 );
850
851 VOID
852 NTAPI
853 KiEndUnexpectedRange(
854 VOID
855 );
856
857 VOID
858 NTAPI
859 KiInterruptDispatch(
860 VOID
861 );
862
863 VOID
864 NTAPI
865 KiChainedDispatch(
866 VOID
867 );
868
869 VOID
870 NTAPI
871 Ki386AdjustEsp0(
872 IN PKTRAP_FRAME TrapFrame
873 );
874
875 VOID
876 NTAPI
877 Ki386SetupAndExitToV86Mode(
878 OUT PTEB VdmTeb
879 );
880
881 VOID
882 NTAPI
883 KeI386VdmInitialize(
884 VOID
885 );
886
887 VOID
888 NTAPI
889 KiInitializeMachineType(
890 VOID
891 );
892
893 //
894 // We need to do major portability work
895 //
896 #ifdef _M_IX86
897 VOID
898 NTAPI
899 KiFlushNPXState(
900 IN FLOATING_SAVE_AREA *SaveArea
901 );
902 #endif
903
904 VOID
905 NTAPI
906 KiSetupStackAndInitializeKernel(
907 IN PKPROCESS InitProcess,
908 IN PKTHREAD InitThread,
909 IN PVOID IdleStack,
910 IN PKPRCB Prcb,
911 IN CCHAR Number,
912 IN PLOADER_PARAMETER_BLOCK LoaderBlock
913 );
914
915 VOID
916 NTAPI
917 KiInitSpinLocks(
918 IN PKPRCB Prcb,
919 IN CCHAR Number
920 );
921
922 LARGE_INTEGER
923 NTAPI
924 KiComputeReciprocal(
925 IN LONG Divisor,
926 OUT PUCHAR Shift
927 );
928
929 VOID
930 NTAPI
931 KiInitSystem(
932 VOID
933 );
934
935 VOID
936 FASTCALL
937 KiInsertQueueApc(
938 IN PKAPC Apc,
939 IN KPRIORITY PriorityBoost
940 );
941
942 NTSTATUS
943 NTAPI
944 KiCallUserMode(
945 IN PVOID *OutputBuffer,
946 IN PULONG OutputLength
947 );
948
949 PULONG
950 NTAPI
951 KiGetUserModeStackAddress(
952 VOID
953 );
954
955 ULONG_PTR
956 NTAPI
957 Ki386EnableGlobalPage(IN volatile ULONG_PTR Context);
958
959 VOID
960 NTAPI
961 KiInitializePAT(VOID);
962
963 VOID
964 NTAPI
965 KiInitializeMTRR(IN BOOLEAN FinalCpu);
966
967 VOID
968 NTAPI
969 KiAmdK6InitializeMTRR(VOID);
970
971 VOID
972 NTAPI
973 KiRestoreFastSyscallReturnState(VOID);
974
975 ULONG_PTR
976 NTAPI
977 Ki386EnableDE(IN ULONG_PTR Context);
978
979 ULONG_PTR
980 NTAPI
981 Ki386EnableFxsr(IN ULONG_PTR Context);
982
983 ULONG_PTR
984 NTAPI
985 Ki386EnableXMMIExceptions(IN ULONG_PTR Context);
986
987 VOID
988 NTAPI
989 KiInitMachineDependent(VOID);
990
991 VOID
992 NTAPI
993 KiI386PentiumLockErrataFixup(VOID);
994
995 VOID
996 WRMSR(
997 IN ULONG Register,
998 IN LONGLONG Value
999 );
1000
1001 BOOLEAN
1002 NTAPI
1003 KeFreezeExecution(IN PKTRAP_FRAME TrapFrame,
1004 IN PKEXCEPTION_FRAME ExceptionFrame);
1005
1006 VOID
1007 NTAPI
1008 KeThawExecution(IN BOOLEAN Enable);
1009
1010 BOOLEAN
1011 NTAPI
1012 KeDisableInterrupts(
1013 VOID
1014 );
1015
1016 VOID
1017 FASTCALL
1018 KeAcquireQueuedSpinLockAtDpcLevel(
1019 IN OUT PKSPIN_LOCK_QUEUE LockQueue
1020 );
1021
1022 VOID
1023 FASTCALL
1024 KeReleaseQueuedSpinLockFromDpcLevel(
1025 IN OUT PKSPIN_LOCK_QUEUE LockQueue
1026 );
1027
1028 VOID
1029 NTAPI
1030 KiRestoreProcessorControlState(
1031 IN PKPROCESSOR_STATE ProcessorState
1032 );
1033
1034 VOID
1035 NTAPI
1036 KiSaveProcessorControlState(
1037 OUT PKPROCESSOR_STATE ProcessorState
1038 );
1039
1040 VOID
1041 FASTCALL
1042 KiRetireDpcList(
1043 IN PKPRCB Prcb
1044 );
1045
1046 VOID
1047 NTAPI
1048 KiQuantumEnd(
1049 VOID
1050 );
1051
1052 VOID
1053 KiSystemService(
1054 IN PKTHREAD Thread,
1055 IN PKTRAP_FRAME TrapFrame,
1056 IN ULONG Instruction
1057 );
1058
1059 VOID
1060 KiIdleLoop(
1061 VOID
1062 );
1063
1064 PVOID
1065 NTAPI
1066 KiPcToFileHeader(IN PVOID Eip,
1067 OUT PLDR_DATA_TABLE_ENTRY *LdrEntry,
1068 IN BOOLEAN DriversOnly,
1069 OUT PBOOLEAN InKernel);
1070
1071 PVOID
1072 NTAPI
1073 KiRosPcToUserFileHeader(IN PVOID Eip,
1074 OUT PLDR_DATA_TABLE_ENTRY *LdrEntry);
1075
1076 #include "ke_x.h"
1077
1078 #endif /* __NTOSKRNL_INCLUDE_INTERNAL_KE_H */