[NTOS]: Combine all exit trap stubs into a single function with flags (same thing...
[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 struct _KNMI_HANDLER_CALLBACK
68 {
69 struct _KNMI_HANDLER_CALLBACK* Next;
70 PNMI_CALLBACK Callback;
71 PVOID Context;
72 PVOID Handle;
73 } KNMI_HANDLER_CALLBACK, *PKNMI_HANDLER_CALLBACK;
74
75 typedef PCHAR
76 (NTAPI *PKE_BUGCHECK_UNICODE_TO_ANSI)(
77 IN PUNICODE_STRING Unicode,
78 IN PCHAR Ansi,
79 IN ULONG Length
80 );
81
82 extern PKNMI_HANDLER_CALLBACK KiNmiCallbackListHead;
83 extern KSPIN_LOCK KiNmiCallbackListLock;
84 extern PVOID KeUserApcDispatcher;
85 extern PVOID KeUserCallbackDispatcher;
86 extern PVOID KeUserExceptionDispatcher;
87 extern PVOID KeRaiseUserExceptionDispatcher;
88 extern LARGE_INTEGER KeBootTime;
89 extern ULONGLONG KeBootTimeBias;
90 extern BOOLEAN ExCmosClockIsSane;
91 extern ULONG KeProcessorArchitecture;
92 extern ULONG KeProcessorLevel;
93 extern ULONG KeProcessorRevision;
94 extern ULONG KeFeatureBits;
95 extern KNODE KiNode0;
96 extern PKNODE KeNodeBlock[1];
97 extern UCHAR KeNumberNodes;
98 extern UCHAR KeProcessNodeSeed;
99 extern ETHREAD KiInitialThread;
100 extern EPROCESS KiInitialProcess;
101 extern PULONG KiInterruptTemplateObject;
102 extern PULONG KiInterruptTemplateDispatch;
103 extern PULONG KiInterruptTemplate2ndDispatch;
104 extern ULONG KiUnexpectedEntrySize;
105 extern ULONG_PTR KiDoubleFaultStack;
106 extern EX_PUSH_LOCK KernelAddressSpaceLock;
107 extern ULONG KiMaximumDpcQueueDepth;
108 extern ULONG KiMinimumDpcRate;
109 extern ULONG KiAdjustDpcThreshold;
110 extern ULONG KiIdealDpcRate;
111 extern BOOLEAN KeThreadDpcEnable;
112 extern LARGE_INTEGER KiTimeIncrementReciprocal;
113 extern UCHAR KiTimeIncrementShiftCount;
114 extern ULONG KiTimeLimitIsrMicroseconds;
115 extern ULONG KiServiceLimit;
116 extern LIST_ENTRY KeBugcheckCallbackListHead, KeBugcheckReasonCallbackListHead;
117 extern KSPIN_LOCK BugCheckCallbackLock;
118 extern KDPC KiTimerExpireDpc;
119 extern KTIMER_TABLE_ENTRY KiTimerTableListHead[TIMER_TABLE_SIZE];
120 extern FAST_MUTEX KiGenericCallDpcMutex;
121 extern LIST_ENTRY KiProfileListHead, KiProfileSourceListHead;
122 extern KSPIN_LOCK KiProfileLock;
123 extern LIST_ENTRY KiProcessListHead;
124 extern LIST_ENTRY KiProcessInSwapListHead, KiProcessOutSwapListHead;
125 extern LIST_ENTRY KiStackInSwapListHead;
126 extern KEVENT KiSwapEvent;
127 extern PKPRCB KiProcessorBlock[];
128 extern ULONG KiMask32Array[MAXIMUM_PRIORITY];
129 extern ULONG KiIdleSummary;
130 extern PVOID KeUserApcDispatcher;
131 extern PVOID KeUserCallbackDispatcher;
132 extern PVOID KeUserExceptionDispatcher;
133 extern PVOID KeRaiseUserExceptionDispatcher;
134 extern ULONG KeTimeIncrement;
135 extern ULONG KeTimeAdjustment;
136 extern LONG KiTickOffset;
137 extern ULONG_PTR KiBugCheckData[5];
138 extern ULONG KiFreezeFlag;
139 extern ULONG KiDPCTimeout;
140 extern PGDI_BATCHFLUSH_ROUTINE KeGdiFlushUserBatch;
141 extern ULONGLONG BootCycles, BootCyclesEnd;
142 extern ULONG ProcessCount;
143 extern VOID __cdecl KiInterruptTemplate(VOID);
144
145 /* MACROS *************************************************************************/
146
147 #define AFFINITY_MASK(Id) KiMask32Array[Id]
148 #define PRIORITY_MASK(Id) KiMask32Array[Id]
149
150 /* The following macro initializes a dispatcher object's header */
151 #define KeInitializeDispatcherHeader(Header, t, s, State) \
152 { \
153 (Header)->Type = t; \
154 (Header)->Absolute = 0; \
155 (Header)->Size = s; \
156 (Header)->Inserted = 0; \
157 (Header)->SignalState = State; \
158 InitializeListHead(&((Header)->WaitListHead)); \
159 }
160
161 /* Tells us if the Timer or Event is a Syncronization or Notification Object */
162 #define TIMER_OR_EVENT_TYPE 0x7L
163
164 /* One of the Reserved Wait Blocks, this one is for the Thread's Timer */
165 #define TIMER_WAIT_BLOCK 0x3L
166
167 #ifdef _M_ARM // FIXME: remove this once our headers are cleaned up
168 //
169 // A system call ID is formatted as such:
170 // .________________________________________________________________.
171 // | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
172 // |--------------|-------------------------------------------------|
173 // | TABLE NUMBER | TABLE OFFSET |
174 // \----------------------------------------------------------------/
175 //
176 //
177 // The table number is then used as an index into the service descriptor table.
178 #define TABLE_NUMBER_BITS 3
179 #define TABLE_OFFSET_BITS 12
180
181 //
182 // There are 2 tables (kernel and shadow, used by Win32K)
183 //
184 #define NUMBER_SERVICE_TABLES 2
185 #define NTOS_SERVICE_INDEX 0
186 #define WIN32K_SERVICE_INDEX 1
187
188 //
189 // NB. From assembly code, the table number must be computed as an offset into
190 // the service descriptor table.
191 //
192 // Each entry into the table is 16 bytes long on 32-bit architectures, and
193 // 32 bytes long on 64-bit architectures.
194 //
195 // Thus, Table Number 1 is offset 16 (0x10) on x86, and offset 32 (0x20) on
196 // x64.
197 //
198 #ifdef _WIN64
199 #define BITS_PER_ENTRY 5 // (1 << 5) = 32 bytes
200 #else
201 #define BITS_PER_ENTRY 4 // (1 << 4) = 16 bytes
202 #endif
203
204 //
205 // We want the table number, but leave some extra bits to we can have the offset
206 // into the descriptor table.
207 //
208 #define SERVICE_TABLE_SHIFT (12 - BITS_PER_ENTRY)
209
210 //
211 // Now the table number (as an offset) is corrupted with part of the table offset
212 // This mask will remove the extra unwanted bits, and give us the offset into the
213 // descriptor table proper.
214 //
215 #define SERVICE_TABLE_MASK (((1 << TABLE_NUMBER_BITS) - 1) << BITS_PER_ENTRY)
216
217 //
218 // To get the table offset (ie: the service call number), just keep the 12 bits
219 //
220 #define SERVICE_NUMBER_MASK ((1 << TABLE_OFFSET_BITS) - 1)
221
222 //
223 // We'll often need to check if this is a graphics call. This is done by comparing
224 // the table number offset with the known Win32K table number offset.
225 // This is usually index 1, so table number offset 0x10 (x86) or 0x20 (x64)
226 //
227 #define SERVICE_TABLE_TEST (WIN32K_SERVICE_INDEX << BITS_PER_ENTRY)
228
229 #endif
230
231 #define KTS_SYSCALL_BIT (((KTRAP_STATE_BITS) { { .SystemCall = TRUE } }).Bits)
232 #define KTS_PM_BIT (((KTRAP_STATE_BITS) { { .PreviousMode = TRUE } }).Bits)
233 #define KTS_SEG_BIT (((KTRAP_STATE_BITS) { { .Segments = TRUE } }).Bits)
234 #define KTS_VOL_BIT (((KTRAP_STATE_BITS) { { .Volatiles = TRUE } }).Bits)
235 #define KTS_FULL_BIT (((KTRAP_STATE_BITS) { { .Full = TRUE } }).Bits)
236
237 /* INTERNAL KERNEL FUNCTIONS ************************************************/
238
239 VOID
240 NTAPI
241 CPUID(
242 IN ULONG InfoType,
243 OUT PULONG CpuInfoEax,
244 OUT PULONG CpuInfoEbx,
245 OUT PULONG CpuInfoEcx,
246 OUT PULONG CpuInfoEdx
247 );
248
249 LONGLONG
250 FASTCALL
251 RDMSR(
252 IN ULONG Register
253 );
254
255 VOID
256 NTAPI
257 WRMSR(
258 IN ULONG Register,
259 IN LONGLONG Value
260 );
261
262 /* Finds a new thread to run */
263 LONG_PTR
264 FASTCALL
265 KiSwapThread(
266 IN PKTHREAD Thread,
267 IN PKPRCB Prcb
268 );
269
270 VOID
271 NTAPI
272 KeReadyThread(
273 IN PKTHREAD Thread
274 );
275
276 BOOLEAN
277 NTAPI
278 KeSetDisableBoostThread(
279 IN OUT PKTHREAD Thread,
280 IN BOOLEAN Disable
281 );
282
283 VOID
284 NTAPI
285 KeBalanceSetManager(IN PVOID Context);
286
287 VOID
288 NTAPI
289 KiReadyThread(IN PKTHREAD Thread);
290
291 ULONG
292 NTAPI
293 KeSuspendThread(PKTHREAD Thread);
294
295 BOOLEAN
296 NTAPI
297 KeReadStateThread(IN PKTHREAD Thread);
298
299 BOOLEAN
300 FASTCALL
301 KiSwapContext(
302 IN PKTHREAD CurrentThread,
303 IN PKTHREAD NewThread
304 );
305
306 VOID
307 NTAPI
308 KiAdjustQuantumThread(IN PKTHREAD Thread);
309
310 VOID
311 FASTCALL
312 KiExitDispatcher(KIRQL OldIrql);
313
314 VOID
315 FASTCALL
316 KiDeferredReadyThread(IN PKTHREAD Thread);
317
318 PKTHREAD
319 FASTCALL
320 KiIdleSchedule(
321 IN PKPRCB Prcb
322 );
323
324 VOID
325 FASTCALL
326 KiProcessDeferredReadyList(
327 IN PKPRCB Prcb
328 );
329
330 KAFFINITY
331 FASTCALL
332 KiSetAffinityThread(
333 IN PKTHREAD Thread,
334 IN KAFFINITY Affinity
335 );
336
337 PKTHREAD
338 FASTCALL
339 KiSelectNextThread(
340 IN PKPRCB Prcb
341 );
342
343 BOOLEAN
344 FASTCALL
345 KiInsertTimerTable(
346 IN PKTIMER Timer,
347 IN ULONG Hand
348 );
349
350 VOID
351 FASTCALL
352 KiTimerListExpire(
353 IN PLIST_ENTRY ExpiredListHead,
354 IN KIRQL OldIrql
355 );
356
357 BOOLEAN
358 FASTCALL
359 KiInsertTreeTimer(
360 IN PKTIMER Timer,
361 IN LARGE_INTEGER Interval
362 );
363
364 VOID
365 FASTCALL
366 KiCompleteTimer(
367 IN PKTIMER Timer,
368 IN PKSPIN_LOCK_QUEUE LockQueue
369 );
370
371 /* gmutex.c ********************************************************************/
372
373 VOID
374 FASTCALL
375 KiAcquireGuardedMutex(
376 IN OUT PKGUARDED_MUTEX GuardedMutex
377 );
378
379 VOID
380 FASTCALL
381 KiAcquireFastMutex(
382 IN PFAST_MUTEX FastMutex
383 );
384
385 /* gate.c **********************************************************************/
386
387 VOID
388 FASTCALL
389 KeInitializeGate(PKGATE Gate);
390
391 VOID
392 FASTCALL
393 KeSignalGateBoostPriority(PKGATE Gate);
394
395 VOID
396 FASTCALL
397 KeWaitForGate(
398 PKGATE Gate,
399 KWAIT_REASON WaitReason,
400 KPROCESSOR_MODE WaitMode
401 );
402
403 /* ipi.c ********************************************************************/
404
405 VOID
406 FASTCALL
407 KiIpiSend(
408 KAFFINITY TargetSet,
409 ULONG IpiRequest
410 );
411
412 VOID
413 NTAPI
414 KiIpiSendPacket(
415 IN KAFFINITY TargetProcessors,
416 IN PKIPI_WORKER WorkerFunction,
417 IN PKIPI_BROADCAST_WORKER BroadcastFunction,
418 IN ULONG_PTR Context,
419 IN PULONG Count
420 );
421
422 VOID
423 FASTCALL
424 KiIpiSignalPacketDone(
425 IN PKIPI_CONTEXT PacketContext
426 );
427
428 VOID
429 FASTCALL
430 KiIpiSignalPacketDoneAndStall(
431 IN PKIPI_CONTEXT PacketContext,
432 IN volatile PULONG ReverseStall
433 );
434
435 /* next file ***************************************************************/
436
437 UCHAR
438 NTAPI
439 KeFindNextRightSetAffinity(
440 IN UCHAR Number,
441 IN ULONG Set
442 );
443
444 VOID
445 NTAPI
446 DbgBreakPointNoBugCheck(VOID);
447
448 VOID
449 NTAPI
450 KeInitializeProfile(
451 struct _KPROFILE* Profile,
452 struct _KPROCESS* Process,
453 PVOID ImageBase,
454 ULONG ImageSize,
455 ULONG BucketSize,
456 KPROFILE_SOURCE ProfileSource,
457 KAFFINITY Affinity
458 );
459
460 BOOLEAN
461 NTAPI
462 KeStartProfile(
463 struct _KPROFILE* Profile,
464 PVOID Buffer
465 );
466
467 BOOLEAN
468 NTAPI
469 KeStopProfile(struct _KPROFILE* Profile);
470
471 ULONG
472 NTAPI
473 KeQueryIntervalProfile(KPROFILE_SOURCE ProfileSource);
474
475 VOID
476 NTAPI
477 KeSetIntervalProfile(
478 KPROFILE_SOURCE ProfileSource,
479 ULONG Interval
480 );
481
482 VOID
483 NTAPI
484 KeProfileInterrupt(
485 PKTRAP_FRAME TrapFrame
486 );
487
488 VOID
489 NTAPI
490 KeProfileInterruptWithSource(
491 IN PKTRAP_FRAME TrapFrame,
492 IN KPROFILE_SOURCE Source
493 );
494
495 VOID
496 NTAPI
497 KeUpdateRunTime(
498 PKTRAP_FRAME TrapFrame,
499 KIRQL Irql
500 );
501
502 VOID
503 NTAPI
504 KiExpireTimers(
505 PKDPC Dpc,
506 PVOID DeferredContext,
507 PVOID SystemArgument1,
508 PVOID SystemArgument2
509 );
510
511 VOID
512 NTAPI
513 KeInitializeThread(
514 IN PKPROCESS Process,
515 IN OUT PKTHREAD Thread,
516 IN PKSYSTEM_ROUTINE SystemRoutine,
517 IN PKSTART_ROUTINE StartRoutine,
518 IN PVOID StartContext,
519 IN PCONTEXT Context,
520 IN PVOID Teb,
521 IN PVOID KernelStack
522 );
523
524 VOID
525 NTAPI
526 KeUninitThread(
527 IN PKTHREAD Thread
528 );
529
530 NTSTATUS
531 NTAPI
532 KeInitThread(
533 IN OUT PKTHREAD Thread,
534 IN PVOID KernelStack,
535 IN PKSYSTEM_ROUTINE SystemRoutine,
536 IN PKSTART_ROUTINE StartRoutine,
537 IN PVOID StartContext,
538 IN PCONTEXT Context,
539 IN PVOID Teb,
540 IN PKPROCESS Process
541 );
542
543 VOID
544 NTAPI
545 KiInitializeContextThread(
546 PKTHREAD Thread,
547 PKSYSTEM_ROUTINE SystemRoutine,
548 PKSTART_ROUTINE StartRoutine,
549 PVOID StartContext,
550 PCONTEXT Context
551 );
552
553 VOID
554 NTAPI
555 KeStartThread(
556 IN OUT PKTHREAD Thread
557 );
558
559 BOOLEAN
560 NTAPI
561 KeAlertThread(
562 IN PKTHREAD Thread,
563 IN KPROCESSOR_MODE AlertMode
564 );
565
566 ULONG
567 NTAPI
568 KeAlertResumeThread(
569 IN PKTHREAD Thread
570 );
571
572 ULONG
573 NTAPI
574 KeResumeThread(
575 IN PKTHREAD Thread
576 );
577
578 PVOID
579 NTAPI
580 KeSwitchKernelStack(
581 IN PVOID StackBase,
582 IN PVOID StackLimit
583 );
584
585 VOID
586 NTAPI
587 KeRundownThread(VOID);
588
589 NTSTATUS
590 NTAPI
591 KeReleaseThread(PKTHREAD Thread);
592
593 VOID
594 NTAPI
595 KiSuspendRundown(
596 IN PKAPC Apc
597 );
598
599 VOID
600 NTAPI
601 KiSuspendNop(
602 IN PKAPC Apc,
603 IN PKNORMAL_ROUTINE *NormalRoutine,
604 IN PVOID *NormalContext,
605 IN PVOID *SystemArgument1,
606 IN PVOID *SystemArgument2
607 );
608
609 VOID
610 NTAPI
611 KiSuspendThread(
612 IN PVOID NormalContext,
613 IN PVOID SystemArgument1,
614 IN PVOID SystemArgument2
615 );
616
617 LONG
618 NTAPI
619 KeQueryBasePriorityThread(IN PKTHREAD Thread);
620
621 VOID
622 FASTCALL
623 KiSetPriorityThread(
624 IN PKTHREAD Thread,
625 IN KPRIORITY Priority
626 );
627
628 VOID
629 FASTCALL
630 KiUnlinkThread(
631 IN PKTHREAD Thread,
632 IN NTSTATUS WaitStatus
633 );
634
635 VOID
636 NTAPI
637 KeDumpStackFrames(PULONG Frame);
638
639 BOOLEAN
640 NTAPI
641 KiTestAlert(VOID);
642
643 VOID
644 FASTCALL
645 KiUnwaitThread(
646 IN PKTHREAD Thread,
647 IN LONG_PTR WaitStatus,
648 IN KPRIORITY Increment
649 );
650
651 VOID
652 NTAPI
653 KeInitializeProcess(
654 struct _KPROCESS *Process,
655 KPRIORITY Priority,
656 KAFFINITY Affinity,
657 PULONG DirectoryTableBase,
658 IN BOOLEAN Enable
659 );
660
661 VOID
662 NTAPI
663 KeSetQuantumProcess(
664 IN PKPROCESS Process,
665 IN UCHAR Quantum
666 );
667
668 KPRIORITY
669 NTAPI
670 KeSetPriorityAndQuantumProcess(
671 IN PKPROCESS Process,
672 IN KPRIORITY Priority,
673 IN UCHAR Quantum OPTIONAL
674 );
675
676 ULONG
677 NTAPI
678 KeForceResumeThread(IN PKTHREAD Thread);
679
680 VOID
681 NTAPI
682 KeThawAllThreads(
683 VOID
684 );
685
686 VOID
687 NTAPI
688 KeFreezeAllThreads(
689 VOID
690 );
691
692 BOOLEAN
693 NTAPI
694 KeDisableThreadApcQueueing(IN PKTHREAD Thread);
695
696 VOID
697 FASTCALL
698 KiWaitTest(
699 PVOID Object,
700 KPRIORITY Increment
701 );
702
703 VOID
704 NTAPI
705 KeContextToTrapFrame(
706 PCONTEXT Context,
707 PKEXCEPTION_FRAME ExeptionFrame,
708 PKTRAP_FRAME TrapFrame,
709 ULONG ContextFlags,
710 KPROCESSOR_MODE PreviousMode
711 );
712
713 VOID
714 NTAPI
715 KiCheckForKernelApcDelivery(VOID);
716
717 LONG
718 NTAPI
719 KiInsertQueue(
720 IN PKQUEUE Queue,
721 IN PLIST_ENTRY Entry,
722 BOOLEAN Head
723 );
724
725 VOID
726 NTAPI
727 KiTimerExpiration(
728 IN PKDPC Dpc,
729 IN PVOID DeferredContext,
730 IN PVOID SystemArgument1,
731 IN PVOID SystemArgument2
732 );
733
734 ULONG
735 NTAPI
736 KeSetProcess(
737 struct _KPROCESS* Process,
738 KPRIORITY Increment,
739 BOOLEAN InWait
740 );
741
742 VOID
743 NTAPI
744 KeInitializeEventPair(PKEVENT_PAIR EventPair);
745
746 VOID
747 NTAPI
748 KiInitializeUserApc(
749 IN PKEXCEPTION_FRAME Reserved,
750 IN PKTRAP_FRAME TrapFrame,
751 IN PKNORMAL_ROUTINE NormalRoutine,
752 IN PVOID NormalContext,
753 IN PVOID SystemArgument1,
754 IN PVOID SystemArgument2
755 );
756
757 PLIST_ENTRY
758 NTAPI
759 KeFlushQueueApc(
760 IN PKTHREAD Thread,
761 IN KPROCESSOR_MODE PreviousMode
762 );
763
764 VOID
765 NTAPI
766 KiAttachProcess(
767 struct _KTHREAD *Thread,
768 struct _KPROCESS *Process,
769 PKLOCK_QUEUE_HANDLE ApcLock,
770 struct _KAPC_STATE *SavedApcState
771 );
772
773 VOID
774 NTAPI
775 KiSwapProcess(
776 struct _KPROCESS *NewProcess,
777 struct _KPROCESS *OldProcess
778 );
779
780 BOOLEAN
781 NTAPI
782 KeTestAlertThread(IN KPROCESSOR_MODE AlertMode);
783
784 BOOLEAN
785 NTAPI
786 KeRemoveQueueApc(PKAPC Apc);
787
788 VOID
789 FASTCALL
790 KiActivateWaiterQueue(IN PKQUEUE Queue);
791
792 ULONG
793 NTAPI
794 KeQueryRuntimeProcess(IN PKPROCESS Process,
795 OUT PULONG UserTime);
796
797 /* INITIALIZATION FUNCTIONS *************************************************/
798
799 BOOLEAN
800 NTAPI
801 KeInitSystem(VOID);
802
803 VOID
804 NTAPI
805 KeInitExceptions(VOID);
806
807 VOID
808 NTAPI
809 KeInitInterrupts(VOID);
810
811 VOID
812 NTAPI
813 KiInitializeBugCheck(VOID);
814
815 VOID
816 NTAPI
817 KiSystemStartup(
818 IN PLOADER_PARAMETER_BLOCK LoaderBlock
819 );
820
821 BOOLEAN
822 NTAPI
823 KiDeliverUserApc(PKTRAP_FRAME TrapFrame);
824
825 VOID
826 NTAPI
827 KiMoveApcState(
828 PKAPC_STATE OldState,
829 PKAPC_STATE NewState
830 );
831
832 VOID
833 NTAPI
834 KiAddProfileEvent(
835 KPROFILE_SOURCE Source,
836 ULONG Pc
837 );
838
839 VOID
840 NTAPI
841 KiDispatchException(
842 PEXCEPTION_RECORD ExceptionRecord,
843 PKEXCEPTION_FRAME ExceptionFrame,
844 PKTRAP_FRAME Tf,
845 KPROCESSOR_MODE PreviousMode,
846 BOOLEAN SearchFrames
847 );
848
849 VOID
850 NTAPI
851 KeTrapFrameToContext(
852 IN PKTRAP_FRAME TrapFrame,
853 IN PKEXCEPTION_FRAME ExceptionFrame,
854 IN OUT PCONTEXT Context
855 );
856
857 DECLSPEC_NORETURN
858 VOID
859 NTAPI
860 KeBugCheckWithTf(
861 ULONG BugCheckCode,
862 ULONG_PTR BugCheckParameter1,
863 ULONG_PTR BugCheckParameter2,
864 ULONG_PTR BugCheckParameter3,
865 ULONG_PTR BugCheckParameter4,
866 PKTRAP_FRAME Tf
867 );
868
869 BOOLEAN
870 NTAPI
871 KiHandleNmi(VOID);
872
873 VOID
874 NTAPI
875 KeFlushCurrentTb(VOID);
876
877 BOOLEAN
878 NTAPI
879 KeInvalidateAllCaches(VOID);
880
881 VOID
882 FASTCALL
883 KeZeroPages(IN PVOID Address,
884 IN ULONG Size);
885
886 BOOLEAN
887 FASTCALL
888 KeInvalidAccessAllowed(IN PVOID TrapInformation OPTIONAL);
889
890 VOID
891 NTAPI
892 KeRosDumpStackFrames(
893 PULONG Frame,
894 ULONG FrameCount
895 );
896
897 VOID
898 NTAPI
899 KeSetSystemTime(
900 IN PLARGE_INTEGER NewSystemTime,
901 OUT PLARGE_INTEGER OldSystemTime,
902 IN BOOLEAN FixInterruptTime,
903 IN PLARGE_INTEGER HalTime
904 );
905
906 ULONG
907 NTAPI
908 KeV86Exception(
909 ULONG ExceptionNr,
910 PKTRAP_FRAME Tf,
911 ULONG address
912 );
913
914 VOID
915 NTAPI
916 KiStartUnexpectedRange(
917 VOID
918 );
919
920 VOID
921 NTAPI
922 KiEndUnexpectedRange(
923 VOID
924 );
925
926 NTSTATUS
927 NTAPI
928 KiRaiseException(
929 IN PEXCEPTION_RECORD ExceptionRecord,
930 IN PCONTEXT Context,
931 IN PKEXCEPTION_FRAME ExceptionFrame,
932 IN PKTRAP_FRAME TrapFrame,
933 IN BOOLEAN SearchFrames
934 );
935
936 NTSTATUS
937 NTAPI
938 KiContinue(
939 IN PCONTEXT Context,
940 IN PKEXCEPTION_FRAME ExceptionFrame,
941 IN PKTRAP_FRAME TrapFrame
942 );
943
944 VOID
945 FASTCALL
946 KiServiceExit(
947 IN PKTRAP_FRAME TrapFrame,
948 IN NTSTATUS Status
949 );
950
951 VOID
952 FASTCALL
953 KiServiceExit2(
954 IN PKTRAP_FRAME TrapFrame
955 );
956
957 VOID
958 FASTCALL
959 KiInterruptDispatch(
960 IN PKTRAP_FRAME TrapFrame,
961 IN PKINTERRUPT Interrupt
962 );
963
964 VOID
965 FASTCALL
966 KiChainedDispatch(
967 IN PKTRAP_FRAME TrapFrame,
968 IN PKINTERRUPT Interrupt
969 );
970
971 VOID
972 NTAPI
973 KiInitializeMachineType(
974 VOID
975 );
976
977 VOID
978 NTAPI
979 KiSetupStackAndInitializeKernel(
980 IN PKPROCESS InitProcess,
981 IN PKTHREAD InitThread,
982 IN PVOID IdleStack,
983 IN PKPRCB Prcb,
984 IN CCHAR Number,
985 IN PLOADER_PARAMETER_BLOCK LoaderBlock
986 );
987
988 VOID
989 NTAPI
990 KiInitSpinLocks(
991 IN PKPRCB Prcb,
992 IN CCHAR Number
993 );
994
995 LARGE_INTEGER
996 NTAPI
997 KiComputeReciprocal(
998 IN LONG Divisor,
999 OUT PUCHAR Shift
1000 );
1001
1002 VOID
1003 NTAPI
1004 KiInitSystem(
1005 VOID
1006 );
1007
1008 VOID
1009 FASTCALL
1010 KiInsertQueueApc(
1011 IN PKAPC Apc,
1012 IN KPRIORITY PriorityBoost
1013 );
1014
1015 NTSTATUS
1016 NTAPI
1017 KiCallUserMode(
1018 IN PVOID *OutputBuffer,
1019 IN PULONG OutputLength
1020 );
1021
1022 PULONG
1023 NTAPI
1024 KiGetUserModeStackAddress(
1025 VOID
1026 );
1027
1028 VOID
1029 NTAPI
1030 KiInitMachineDependent(VOID);
1031
1032 BOOLEAN
1033 NTAPI
1034 KeFreezeExecution(IN PKTRAP_FRAME TrapFrame,
1035 IN PKEXCEPTION_FRAME ExceptionFrame);
1036
1037 VOID
1038 NTAPI
1039 KeThawExecution(IN BOOLEAN Enable);
1040
1041 BOOLEAN
1042 NTAPI
1043 KeDisableInterrupts(
1044 VOID
1045 );
1046
1047 VOID
1048 FASTCALL
1049 KeAcquireQueuedSpinLockAtDpcLevel(
1050 IN OUT PKSPIN_LOCK_QUEUE LockQueue
1051 );
1052
1053 VOID
1054 FASTCALL
1055 KeReleaseQueuedSpinLockFromDpcLevel(
1056 IN OUT PKSPIN_LOCK_QUEUE LockQueue
1057 );
1058
1059 VOID
1060 NTAPI
1061 KiRestoreProcessorControlState(
1062 IN PKPROCESSOR_STATE ProcessorState
1063 );
1064
1065 VOID
1066 NTAPI
1067 KiSaveProcessorControlState(
1068 OUT PKPROCESSOR_STATE ProcessorState
1069 );
1070
1071 VOID
1072 NTAPI
1073 KiSaveProcessorState(
1074 IN PKTRAP_FRAME TrapFrame,
1075 IN PKEXCEPTION_FRAME ExceptionFrame
1076 );
1077
1078 VOID
1079 FASTCALL
1080 KiRetireDpcList(
1081 IN PKPRCB Prcb
1082 );
1083
1084 VOID
1085 NTAPI
1086 KiQuantumEnd(
1087 VOID
1088 );
1089
1090 VOID
1091 FASTCALL
1092 KiIdleLoop(
1093 VOID
1094 );
1095
1096 VOID
1097 FASTCALL
1098 DECLSPEC_NORETURN
1099 KiSystemFatalException(
1100 IN ULONG ExceptionCode,
1101 IN PKTRAP_FRAME TrapFrame
1102 );
1103
1104 #include "ke_x.h"
1105
1106 #endif /* __NTOSKRNL_INCLUDE_INTERNAL_KE_H */