- Implement KeQueryRuntimeProcess for querying total user/kernel times of a process.
[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 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 NTSTATUS
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 NTSTATUS 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 ULONG
720 NTAPI
721 KeQueryRuntimeProcess(IN PKPROCESS Process,
722 OUT PULONG UserTime);
723
724 ULONG
725 NTAPI
726 KeQueryRuntimeThread(IN PKTHREAD Thread,
727 OUT PULONG UserTime);
728
729 /* INITIALIZATION FUNCTIONS *************************************************/
730
731 BOOLEAN
732 NTAPI
733 KeInitSystem(VOID);
734
735 VOID
736 NTAPI
737 KeInitExceptions(VOID);
738
739 VOID
740 NTAPI
741 KeInitInterrupts(VOID);
742
743 VOID
744 NTAPI
745 KiInitializeBugCheck(VOID);
746
747 VOID
748 NTAPI
749 KiSystemStartupReal(
750 IN PLOADER_PARAMETER_BLOCK LoaderBlock
751 );
752
753 BOOLEAN
754 NTAPI
755 KiDeliverUserApc(PKTRAP_FRAME TrapFrame);
756
757 VOID
758 NTAPI
759 KiMoveApcState(
760 PKAPC_STATE OldState,
761 PKAPC_STATE NewState
762 );
763
764 VOID
765 NTAPI
766 KiAddProfileEvent(
767 KPROFILE_SOURCE Source,
768 ULONG Pc
769 );
770
771 VOID
772 NTAPI
773 KiDispatchException(
774 PEXCEPTION_RECORD ExceptionRecord,
775 PKEXCEPTION_FRAME ExceptionFrame,
776 PKTRAP_FRAME Tf,
777 KPROCESSOR_MODE PreviousMode,
778 BOOLEAN SearchFrames
779 );
780
781 VOID
782 NTAPI
783 KeTrapFrameToContext(
784 IN PKTRAP_FRAME TrapFrame,
785 IN PKEXCEPTION_FRAME ExceptionFrame,
786 IN OUT PCONTEXT Context
787 );
788
789 VOID
790 NTAPI
791 KeBugCheckWithTf(
792 ULONG BugCheckCode,
793 ULONG_PTR BugCheckParameter1,
794 ULONG_PTR BugCheckParameter2,
795 ULONG_PTR BugCheckParameter3,
796 ULONG_PTR BugCheckParameter4,
797 PKTRAP_FRAME Tf
798 );
799
800 VOID
801 NTAPI
802 KeFlushCurrentTb(VOID);
803
804 BOOLEAN
805 NTAPI
806 KeInvalidateAllCaches(VOID);
807
808 VOID
809 FASTCALL
810 KeZeroPages(IN PVOID Address,
811 IN ULONG Size);
812
813 BOOLEAN
814 FASTCALL
815 KeInvalidAccessAllowed(IN PVOID TrapInformation OPTIONAL);
816
817 VOID
818 NTAPI
819 KeRosDumpStackFrames(
820 PULONG Frame,
821 ULONG FrameCount
822 );
823
824 VOID
825 NTAPI
826 KeSetSystemTime(
827 IN PLARGE_INTEGER NewSystemTime,
828 OUT PLARGE_INTEGER OldSystemTime,
829 IN BOOLEAN FixInterruptTime,
830 IN PLARGE_INTEGER HalTime
831 );
832
833 ULONG
834 NTAPI
835 KeV86Exception(
836 ULONG ExceptionNr,
837 PKTRAP_FRAME Tf,
838 ULONG address
839 );
840
841 VOID
842 NTAPI
843 KiStartUnexpectedRange(
844 VOID
845 );
846
847 VOID
848 NTAPI
849 KiEndUnexpectedRange(
850 VOID
851 );
852
853 VOID
854 NTAPI
855 KiInterruptDispatch(
856 VOID
857 );
858
859 VOID
860 NTAPI
861 KiChainedDispatch(
862 VOID
863 );
864
865 VOID
866 NTAPI
867 Ki386AdjustEsp0(
868 IN PKTRAP_FRAME TrapFrame
869 );
870
871 VOID
872 NTAPI
873 Ki386SetupAndExitToV86Mode(
874 OUT PTEB VdmTeb
875 );
876
877 VOID
878 NTAPI
879 KeI386VdmInitialize(
880 VOID
881 );
882
883 VOID
884 NTAPI
885 KiInitializeMachineType(
886 VOID
887 );
888
889 //
890 // We need to do major portability work
891 //
892 #ifdef _M_IX86
893 VOID
894 NTAPI
895 KiFlushNPXState(
896 IN FLOATING_SAVE_AREA *SaveArea
897 );
898 #endif
899
900 VOID
901 NTAPI
902 KiSetupStackAndInitializeKernel(
903 IN PKPROCESS InitProcess,
904 IN PKTHREAD InitThread,
905 IN PVOID IdleStack,
906 IN PKPRCB Prcb,
907 IN CCHAR Number,
908 IN PLOADER_PARAMETER_BLOCK LoaderBlock
909 );
910
911 VOID
912 NTAPI
913 KiInitSpinLocks(
914 IN PKPRCB Prcb,
915 IN CCHAR Number
916 );
917
918 LARGE_INTEGER
919 NTAPI
920 KiComputeReciprocal(
921 IN LONG Divisor,
922 OUT PUCHAR Shift
923 );
924
925 VOID
926 NTAPI
927 KiInitSystem(
928 VOID
929 );
930
931 VOID
932 FASTCALL
933 KiInsertQueueApc(
934 IN PKAPC Apc,
935 IN KPRIORITY PriorityBoost
936 );
937
938 NTSTATUS
939 NTAPI
940 KiCallUserMode(
941 IN PVOID *OutputBuffer,
942 IN PULONG OutputLength
943 );
944
945 PULONG
946 NTAPI
947 KiGetUserModeStackAddress(
948 VOID
949 );
950
951 ULONG_PTR
952 NTAPI
953 Ki386EnableGlobalPage(IN volatile ULONG_PTR Context);
954
955 VOID
956 NTAPI
957 KiInitializePAT(VOID);
958
959 VOID
960 NTAPI
961 KiInitializeMTRR(IN BOOLEAN FinalCpu);
962
963 VOID
964 NTAPI
965 KiAmdK6InitializeMTRR(VOID);
966
967 VOID
968 NTAPI
969 KiRestoreFastSyscallReturnState(VOID);
970
971 ULONG_PTR
972 NTAPI
973 Ki386EnableDE(IN ULONG_PTR Context);
974
975 ULONG_PTR
976 NTAPI
977 Ki386EnableFxsr(IN ULONG_PTR Context);
978
979 ULONG_PTR
980 NTAPI
981 Ki386EnableXMMIExceptions(IN ULONG_PTR Context);
982
983 VOID
984 NTAPI
985 KiInitMachineDependent(VOID);
986
987 VOID
988 NTAPI
989 KiI386PentiumLockErrataFixup(VOID);
990
991 VOID
992 WRMSR(
993 IN ULONG Register,
994 IN LONGLONG Value
995 );
996
997 BOOLEAN
998 NTAPI
999 KeFreezeExecution(IN PKTRAP_FRAME TrapFrame,
1000 IN PKEXCEPTION_FRAME ExceptionFrame);
1001
1002 VOID
1003 NTAPI
1004 KeThawExecution(IN BOOLEAN Enable);
1005
1006 BOOLEAN
1007 NTAPI
1008 KeDisableInterrupts(
1009 VOID
1010 );
1011
1012 VOID
1013 FASTCALL
1014 KeAcquireQueuedSpinLockAtDpcLevel(
1015 IN OUT PKSPIN_LOCK_QUEUE LockQueue
1016 );
1017
1018 VOID
1019 FASTCALL
1020 KeReleaseQueuedSpinLockFromDpcLevel(
1021 IN OUT PKSPIN_LOCK_QUEUE LockQueue
1022 );
1023
1024 VOID
1025 NTAPI
1026 KiRestoreProcessorControlState(
1027 IN PKPROCESSOR_STATE ProcessorState
1028 );
1029
1030 VOID
1031 NTAPI
1032 KiSaveProcessorControlState(
1033 OUT PKPROCESSOR_STATE ProcessorState
1034 );
1035
1036 VOID
1037 FASTCALL
1038 KiRetireDpcList(
1039 IN PKPRCB Prcb
1040 );
1041
1042 VOID
1043 NTAPI
1044 KiQuantumEnd(
1045 VOID
1046 );
1047
1048 VOID
1049 KiSystemService(
1050 IN PKTHREAD Thread,
1051 IN PKTRAP_FRAME TrapFrame,
1052 IN ULONG Instruction
1053 );
1054
1055 VOID
1056 KiIdleLoop(
1057 VOID
1058 );
1059
1060 #include "ke_x.h"
1061
1062 #endif /* __NTOSKRNL_INCLUDE_INTERNAL_KE_H */