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