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