- MSVC Build Fixes
[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 /* Cached modules from the loader block */
22 typedef enum _CACHED_MODULE_TYPE
23 {
24 AnsiCodepage,
25 OemCodepage,
26 UnicodeCasemap,
27 SystemRegistry,
28 HardwareRegistry,
29 MaximumCachedModuleType,
30 } CACHED_MODULE_TYPE, *PCACHED_MODULE_TYPE;
31 extern PLOADER_MODULE CachedModules[MaximumCachedModuleType];
32
33 typedef enum _CONNECT_TYPE
34 {
35 NoConnect,
36 NormalConnect,
37 ChainConnect,
38 UnknownConnect
39 } CONNECT_TYPE, *PCONNECT_TYPE;
40
41 typedef struct _DISPATCH_INFO
42 {
43 CONNECT_TYPE Type;
44 PKINTERRUPT Interrupt;
45 PKINTERRUPT_ROUTINE NoDispatch;
46 PKINTERRUPT_ROUTINE InterruptDispatch;
47 PKINTERRUPT_ROUTINE FloatingDispatch;
48 PKINTERRUPT_ROUTINE ChainedDispatch;
49 PKINTERRUPT_ROUTINE *FlatDispatch;
50 } DISPATCH_INFO, *PDISPATCH_INFO;
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 typedef PCHAR
59 (NTAPI *PKE_BUGCHECK_UNICODE_TO_ANSI)(
60 IN PUNICODE_STRING Unicode,
61 IN PCHAR Ansi,
62 IN ULONG Length
63 );
64
65 struct _KIRQ_TRAPFRAME;
66 struct _KPCR;
67 struct _KPRCB;
68 struct _KEXCEPTION_FRAME;
69
70 extern PVOID KeUserApcDispatcher;
71 extern PVOID KeUserCallbackDispatcher;
72 extern PVOID KeUserExceptionDispatcher;
73 extern PVOID KeRaiseUserExceptionDispatcher;
74 extern LARGE_INTEGER SystemBootTime;
75 extern ULONG_PTR KERNEL_BASE;
76 extern ULONG KeI386NpxPresent;
77 extern ULONG KeI386XMMIPresent;
78 extern ULONG KeI386FxsrPresent;
79 extern ULONG KeI386CpuType;
80 extern ULONG KeI386CpuStep;
81 extern ULONG KeProcessorArchitecture;
82 extern ULONG KeProcessorLevel;
83 extern ULONG KeProcessorRevision;
84 extern ULONG KeFeatureBits;
85 extern ULONG Ke386GlobalPagesEnabled;
86 extern KNODE KiNode0;
87 extern PKNODE KeNodeBlock[1];
88 extern UCHAR KeNumberNodes;
89 extern UCHAR KeProcessNodeSeed;
90 extern ETHREAD KiInitialThread;
91 extern EPROCESS KiInitialProcess;
92 extern ULONG KiInterruptTemplate[KINTERRUPT_DISPATCH_CODES];
93 extern PULONG KiInterruptTemplateObject;
94 extern PULONG KiInterruptTemplateDispatch;
95 extern PULONG KiInterruptTemplate2ndDispatch;
96 extern ULONG KiUnexpectedEntrySize;
97 extern PVOID Ki386IopmSaveArea;
98 extern ULONG KeI386EFlagsAndMaskV86;
99 extern ULONG KeI386EFlagsOrMaskV86;
100 extern BOOLEAN KeI386VirtualIntExtensions;
101 extern KIDTENTRY KiIdt[];
102 extern KGDTENTRY KiBootGdt[];
103 extern KDESCRIPTOR KiGdtDescriptor;
104 extern KDESCRIPTOR KiIdtDescriptor;
105 extern KTSS KiBootTss;
106 extern UCHAR P0BootStack[];
107 extern UCHAR KiDoubleFaultStack[];
108 extern FAST_MUTEX KernelAddressSpaceLock;
109 extern ULONG KiMaximumDpcQueueDepth;
110 extern ULONG KiMinimumDpcRate;
111 extern ULONG KiAdjustDpcThreshold;
112 extern ULONG KiIdealDpcRate;
113 extern LARGE_INTEGER KiTimeIncrementReciprocal;
114 extern UCHAR KiTimeIncrementShiftCount;
115 extern LIST_ENTRY BugcheckCallbackListHead, BugcheckReasonCallbackListHead;
116 extern KSPIN_LOCK BugCheckCallbackLock;
117 extern KDPC KiExpireTimerDpc;
118 extern KTIMER_TABLE_ENTRY KiTimerTableListHead[TIMER_TABLE_SIZE];
119 extern LIST_ENTRY KiTimerListHead;
120 extern KMUTEX 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 IdleProcessorMask;
130 extern VOID KiTrap8(VOID);
131 extern VOID KiTrap2(VOID);
132
133 /* MACROS *************************************************************************/
134
135 /*
136 * On UP machines, we don't actually have a spinlock, we merely raise
137 * IRQL to DPC level.
138 */
139 #ifdef CONFIG_SMP
140 #define KeInitializeDispatcher() KeInitializeSpinLock(&DispatcherDatabaseLock);
141 #define KeAcquireDispatcherDatabaseLock() KfAcquireSpinLock(&DispatcherDatabaseLock);
142 #define KeAcquireDispatcherDatabaseLockAtDpcLevel() \
143 KeAcquireSpinLockAtDpcLevel (&DispatcherDatabaseLock);
144 #define KeReleaseDispatcherDatabaseLockFromDpcLevel() \
145 KeReleaseSpinLockFromDpcLevel(&DispatcherDatabaseLock);
146 #define KeReleaseDispatcherDatabaseLock(OldIrql) \
147 KiExitDispatcher(OldIrql);
148 #else
149 #define KeInitializeDispatcher()
150 #define KeAcquireDispatcherDatabaseLock() KeRaiseIrqlToDpcLevel();
151 #define KeReleaseDispatcherDatabaseLock(OldIrql) KiExitDispatcher(OldIrql);
152 #define KeAcquireDispatcherDatabaseLockAtDpcLevel()
153 #define KeReleaseDispatcherDatabaseLockFromDpcLevel()
154 #endif
155
156 #define AFFINITY_MASK(Id) KiMask32Array[Id]
157
158 /* The following macro initializes a dispatcher object's header */
159 #define KeInitializeDispatcherHeader(Header, t, s, State) \
160 { \
161 (Header)->Type = t; \
162 (Header)->Absolute = 0; \
163 (Header)->Inserted = 0; \
164 (Header)->Size = s; \
165 (Header)->SignalState = State; \
166 InitializeListHead(&((Header)->WaitListHead)); \
167 }
168
169 extern KSPIN_LOCK DispatcherDatabaseLock;
170
171 #define KeEnterCriticalRegion() \
172 { \
173 PKTHREAD _Thread = KeGetCurrentThread(); \
174 if (_Thread) _Thread->KernelApcDisable--; \
175 }
176
177 #define KeLeaveCriticalRegion() \
178 { \
179 PKTHREAD _Thread = KeGetCurrentThread(); \
180 if((_Thread) && (++_Thread->KernelApcDisable == 0)) \
181 { \
182 if (!IsListEmpty(&_Thread->ApcState.ApcListHead[KernelMode]) && \
183 (_Thread->SpecialApcDisable == 0)) \
184 { \
185 KiCheckForKernelApcDelivery(); \
186 } \
187 } \
188 }
189
190 #define KEBUGCHECKWITHTF(a,b,c,d,e,f) \
191 DbgPrint("KeBugCheckWithTf at %s:%i\n",__FILE__,__LINE__), \
192 KeBugCheckWithTf(a,b,c,d,e,f)
193
194 /* Tells us if the Timer or Event is a Syncronization or Notification Object */
195 #define TIMER_OR_EVENT_TYPE 0x7L
196
197 /* One of the Reserved Wait Blocks, this one is for the Thread's Timer */
198 #define TIMER_WAIT_BLOCK 0x3L
199
200 /* IOPM Definitions */
201 #define IO_ACCESS_MAP_NONE 0
202 #define IOPM_OFFSET FIELD_OFFSET(KTSS, IoMaps[0].IoMap)
203 #define KiComputeIopmOffset(MapNumber) \
204 (MapNumber == IO_ACCESS_MAP_NONE) ? \
205 (USHORT)(sizeof(KTSS)) : \
206 (USHORT)(FIELD_OFFSET(KTSS, IoMaps[MapNumber-1].IoMap))
207
208 #define SIZE_OF_FX_REGISTERS 32
209
210 /* INTERNAL KERNEL FUNCTIONS ************************************************/
211
212 /* threadsch.c ********************************************************************/
213
214 /* Thread Scheduler Functions */
215
216 /* Readies a Thread for Execution. */
217 BOOLEAN
218 NTAPI
219 KiDispatchThreadNoLock(ULONG NewThreadStatus);
220
221 /* Readies a Thread for Execution. */
222 VOID
223 NTAPI
224 KiDispatchThread(ULONG NewThreadStatus);
225
226 /* Finds a new thread to run */
227 NTSTATUS
228 NTAPI
229 KiSwapThread(
230 VOID
231 );
232
233 VOID
234 NTAPI
235 KiReadyThread(IN PKTHREAD Thread);
236
237 NTSTATUS
238 NTAPI
239 KeSuspendThread(PKTHREAD Thread);
240
241 NTSTATUS
242 FASTCALL
243 KiSwapContext(
244 IN PKTHREAD CurrentThread,
245 IN PKTHREAD NewThread
246 );
247
248 VOID
249 NTAPI
250 KiAdjustQuantumThread(IN PKTHREAD Thread);
251
252 VOID
253 FASTCALL
254 KiExitDispatcher(KIRQL OldIrql);
255
256 /* gmutex.c ********************************************************************/
257
258 VOID
259 FASTCALL
260 KiAcquireGuardedMutexContented(PKGUARDED_MUTEX GuardedMutex);
261
262 /* gate.c **********************************************************************/
263
264 VOID
265 FASTCALL
266 KeInitializeGate(PKGATE Gate);
267
268 VOID
269 FASTCALL
270 KeSignalGateBoostPriority(PKGATE Gate);
271
272 VOID
273 FASTCALL
274 KeWaitForGate(
275 PKGATE Gate,
276 KWAIT_REASON WaitReason,
277 KPROCESSOR_MODE WaitMode
278 );
279
280 /* ipi.c ********************************************************************/
281
282 VOID
283 NTAPI
284 KiIpiSendRequest(
285 KAFFINITY TargetSet,
286 ULONG IpiRequest
287 );
288
289 /* next file ***************************************************************/
290
291 UCHAR
292 NTAPI
293 KeFindNextRightSetAffinity(
294 IN UCHAR Number,
295 IN ULONG Set
296 );
297
298 VOID
299 NTAPI
300 DbgBreakPointNoBugCheck(VOID);
301
302 VOID
303 NTAPI
304 KeInitializeProfile(
305 struct _KPROFILE* Profile,
306 struct _KPROCESS* Process,
307 PVOID ImageBase,
308 ULONG ImageSize,
309 ULONG BucketSize,
310 KPROFILE_SOURCE ProfileSource,
311 KAFFINITY Affinity
312 );
313
314 VOID
315 NTAPI
316 KeStartProfile(
317 struct _KPROFILE* Profile,
318 PVOID Buffer
319 );
320
321 BOOLEAN
322 NTAPI
323 KeStopProfile(struct _KPROFILE* Profile);
324
325 ULONG
326 NTAPI
327 KeQueryIntervalProfile(KPROFILE_SOURCE ProfileSource);
328
329 VOID
330 NTAPI
331 KeSetIntervalProfile(
332 KPROFILE_SOURCE ProfileSource,
333 ULONG Interval
334 );
335
336 VOID
337 NTAPI
338 KeProfileInterrupt(
339 PKTRAP_FRAME TrapFrame
340 );
341
342 VOID
343 NTAPI
344 KeProfileInterruptWithSource(
345 IN PKTRAP_FRAME TrapFrame,
346 IN KPROFILE_SOURCE Source
347 );
348
349 BOOLEAN
350 NTAPI
351 KiRosPrintAddress(PVOID Address);
352
353 VOID
354 NTAPI
355 KeUpdateRunTime(
356 PKTRAP_FRAME TrapFrame,
357 KIRQL Irql
358 );
359
360 VOID
361 NTAPI
362 KiExpireTimers(
363 PKDPC Dpc,
364 PVOID DeferredContext,
365 PVOID SystemArgument1,
366 PVOID SystemArgument2
367 );
368
369 VOID
370 NTAPI
371 KeInitializeThread(
372 IN PKPROCESS Process,
373 IN OUT PKTHREAD Thread,
374 IN PKSYSTEM_ROUTINE SystemRoutine,
375 IN PKSTART_ROUTINE StartRoutine,
376 IN PVOID StartContext,
377 IN PCONTEXT Context,
378 IN PVOID Teb,
379 IN PVOID KernelStack
380 );
381
382 VOID
383 NTAPI
384 KeUninitThread(
385 IN PKTHREAD Thread
386 );
387
388 NTSTATUS
389 NTAPI
390 KeInitThread(
391 IN OUT PKTHREAD Thread,
392 IN PVOID KernelStack,
393 IN PKSYSTEM_ROUTINE SystemRoutine,
394 IN PKSTART_ROUTINE StartRoutine,
395 IN PVOID StartContext,
396 IN PCONTEXT Context,
397 IN PVOID Teb,
398 IN PKPROCESS Process
399 );
400
401 VOID
402 NTAPI
403 KeStartThread(
404 IN OUT PKTHREAD Thread
405 );
406
407 BOOLEAN
408 NTAPI
409 KeAlertThread(
410 IN PKTHREAD Thread,
411 IN KPROCESSOR_MODE AlertMode
412 );
413
414 ULONG
415 NTAPI
416 KeAlertResumeThread(
417 IN PKTHREAD Thread
418 );
419
420 ULONG
421 NTAPI
422 KeResumeThread(
423 IN PKTHREAD Thread
424 );
425
426 PVOID
427 NTAPI
428 KeSwitchKernelStack(
429 IN PVOID StackBase,
430 IN PVOID StackLimit
431 );
432
433 VOID
434 NTAPI
435 KeRundownThread(VOID);
436
437 NTSTATUS
438 NTAPI
439 KeReleaseThread(PKTHREAD Thread);
440
441 LONG
442 NTAPI
443 KeQueryBasePriorityThread(IN PKTHREAD Thread);
444
445 VOID
446 NTAPI
447 KiSetPriorityThread(
448 PKTHREAD Thread,
449 KPRIORITY Priority,
450 PBOOLEAN Released
451 );
452
453 BOOLEAN
454 NTAPI
455 KiDispatcherObjectWake(
456 DISPATCHER_HEADER* hdr,
457 KPRIORITY increment
458 );
459
460 VOID
461 NTAPI
462 KeExpireTimers(
463 PKDPC Apc,
464 PVOID Arg1,
465 PVOID Arg2,
466 PVOID Arg3
467 );
468
469 VOID
470 NTAPI
471 KeDumpStackFrames(PULONG Frame);
472
473 BOOLEAN
474 NTAPI
475 KiTestAlert(VOID);
476
477 VOID
478 FASTCALL
479 KiAbortWaitThread(
480 IN PKTHREAD Thread,
481 IN NTSTATUS WaitStatus,
482 IN KPRIORITY Increment
483 );
484
485 VOID
486 NTAPI
487 KeInitializeProcess(
488 struct _KPROCESS *Process,
489 KPRIORITY Priority,
490 KAFFINITY Affinity,
491 LARGE_INTEGER DirectoryTableBase
492 );
493
494 VOID
495 NTAPI
496 KeSetQuantumProcess(
497 IN PKPROCESS Process,
498 IN UCHAR Quantum
499 );
500
501 KPRIORITY
502 NTAPI
503 KeSetPriorityAndQuantumProcess(
504 IN PKPROCESS Process,
505 IN KPRIORITY Priority,
506 IN UCHAR Quantum OPTIONAL
507 );
508
509 ULONG
510 NTAPI
511 KeForceResumeThread(IN PKTHREAD Thread);
512
513 BOOLEAN
514 NTAPI
515 KeDisableThreadApcQueueing(IN PKTHREAD Thread);
516
517 BOOLEAN
518 NTAPI
519 KiInsertTimer(
520 PKTIMER Timer,
521 LARGE_INTEGER DueTime
522 );
523
524 VOID
525 FASTCALL
526 KiWaitTest(
527 PVOID Object,
528 KPRIORITY Increment
529 );
530
531 PULONG
532 NTAPI
533 KeGetStackTopThread(struct _ETHREAD* Thread);
534
535 VOID
536 NTAPI
537 KeContextToTrapFrame(
538 PCONTEXT Context,
539 PKEXCEPTION_FRAME ExeptionFrame,
540 PKTRAP_FRAME TrapFrame,
541 ULONG ContextFlags,
542 KPROCESSOR_MODE PreviousMode
543 );
544
545 VOID
546 NTAPI
547 KiDeliverApc(
548 KPROCESSOR_MODE PreviousMode,
549 PVOID Reserved,
550 PKTRAP_FRAME TrapFrame
551 );
552
553 VOID
554 NTAPI
555 KiCheckForKernelApcDelivery(VOID);
556
557 LONG
558 NTAPI
559 KiInsertQueue(
560 IN PKQUEUE Queue,
561 IN PLIST_ENTRY Entry,
562 BOOLEAN Head
563 );
564
565 ULONG
566 NTAPI
567 KeSetProcess(
568 struct _KPROCESS* Process,
569 KPRIORITY Increment,
570 BOOLEAN InWait
571 );
572
573 VOID
574 NTAPI
575 KeInitializeEventPair(PKEVENT_PAIR EventPair);
576
577 VOID
578 NTAPI
579 KiInitializeUserApc(
580 IN PKEXCEPTION_FRAME Reserved,
581 IN PKTRAP_FRAME TrapFrame,
582 IN PKNORMAL_ROUTINE NormalRoutine,
583 IN PVOID NormalContext,
584 IN PVOID SystemArgument1,
585 IN PVOID SystemArgument2
586 );
587
588 PLIST_ENTRY
589 NTAPI
590 KeFlushQueueApc(
591 IN PKTHREAD Thread,
592 IN KPROCESSOR_MODE PreviousMode
593 );
594
595 VOID
596 NTAPI
597 KiAttachProcess(
598 struct _KTHREAD *Thread,
599 struct _KPROCESS *Process,
600 KIRQL ApcLock,
601 struct _KAPC_STATE *SavedApcState
602 );
603
604 VOID
605 NTAPI
606 KiSwapProcess(
607 struct _KPROCESS *NewProcess,
608 struct _KPROCESS *OldProcess
609 );
610
611 BOOLEAN
612 NTAPI
613 KeTestAlertThread(IN KPROCESSOR_MODE AlertMode);
614
615 BOOLEAN
616 NTAPI
617 KeRemoveQueueApc(PKAPC Apc);
618
619 VOID
620 FASTCALL
621 KiWakeQueue(IN PKQUEUE Queue);
622
623 /* INITIALIZATION FUNCTIONS *************************************************/
624
625 VOID
626 NTAPI
627 KeInitExceptions(VOID);
628
629 VOID
630 NTAPI
631 KeInitInterrupts(VOID);
632
633 VOID
634 NTAPI
635 KeInitTimer(VOID);
636
637 VOID
638 NTAPI
639 KeInitDispatcher(VOID);
640
641 VOID
642 NTAPI
643 KiInitializeSystemClock(VOID);
644
645 VOID
646 NTAPI
647 KiInitializeBugCheck(VOID);
648
649 VOID
650 NTAPI
651 Phase1Initialization(PVOID Context);
652
653 VOID
654 NTAPI
655 KiSystemStartup(
656 IN PROS_LOADER_PARAMETER_BLOCK LoaderBlock
657 );
658
659 VOID
660 NTAPI
661 KeInit2(VOID);
662
663 BOOLEAN
664 NTAPI
665 KiDeliverUserApc(PKTRAP_FRAME TrapFrame);
666
667 VOID
668 NTAPI
669 KiMoveApcState(
670 PKAPC_STATE OldState,
671 PKAPC_STATE NewState
672 );
673
674 VOID
675 NTAPI
676 KiAddProfileEvent(
677 KPROFILE_SOURCE Source,
678 ULONG Pc
679 );
680
681 VOID
682 NTAPI
683 KiDispatchException(
684 PEXCEPTION_RECORD ExceptionRecord,
685 PKEXCEPTION_FRAME ExceptionFrame,
686 PKTRAP_FRAME Tf,
687 KPROCESSOR_MODE PreviousMode,
688 BOOLEAN SearchFrames
689 );
690
691 VOID
692 NTAPI
693 KeTrapFrameToContext(
694 IN PKTRAP_FRAME TrapFrame,
695 IN PKEXCEPTION_FRAME ExceptionFrame,
696 IN OUT PCONTEXT Context
697 );
698
699 VOID
700 NTAPI
701 KeApplicationProcessorInit(VOID);
702
703 VOID
704 NTAPI
705 KePrepareForApplicationProcessorInit(ULONG id);
706
707 ULONG
708 NTAPI
709 KiUserTrapHandler(
710 PKTRAP_FRAME Tf,
711 ULONG ExceptionNr,
712 PVOID Cr2
713 );
714
715 VOID
716 NTAPI
717 KePushAndStackSwitchAndSysRet(
718 ULONG Push,
719 PVOID NewStack
720 );
721
722 VOID
723 NTAPI
724 KeStackSwitchAndRet(PVOID NewStack);
725
726 VOID
727 NTAPI
728 KeBugCheckWithTf(
729 ULONG BugCheckCode,
730 ULONG BugCheckParameter1,
731 ULONG BugCheckParameter2,
732 ULONG BugCheckParameter3,
733 ULONG BugCheckParameter4,
734 PKTRAP_FRAME Tf
735 );
736
737 VOID
738 NTAPI
739 KeFlushCurrentTb(VOID);
740
741 VOID
742 NTAPI
743 KeRosDumpStackFrames(
744 PULONG Frame,
745 ULONG FrameCount
746 );
747
748 VOID
749 NTAPI
750 KiSetSystemTime(PLARGE_INTEGER NewSystemTime);
751
752 ULONG
753 NTAPI
754 KeV86Exception(
755 ULONG ExceptionNr,
756 PKTRAP_FRAME Tf,
757 ULONG address
758 );
759
760 VOID
761 NTAPI
762 KiStartUnexpectedRange(
763 VOID
764 );
765
766 VOID
767 NTAPI
768 KiEndUnexpectedRange(
769 VOID
770 );
771
772 VOID
773 NTAPI
774 KiInterruptDispatch(
775 VOID
776 );
777
778 VOID
779 NTAPI
780 KiChainedDispatch(
781 VOID
782 );
783
784 VOID
785 NTAPI
786 Ki386AdjustEsp0(
787 IN PKTRAP_FRAME TrapFrame
788 );
789
790 VOID
791 NTAPI
792 Ki386SetupAndExitToV86Mode(
793 OUT PTEB VdmTeb
794 );
795
796 VOID
797 NTAPI
798 KeI386VdmInitialize(
799 VOID
800 );
801
802 VOID
803 NTAPI
804 KiFlushNPXState(
805 IN FLOATING_SAVE_AREA *SaveArea
806 );
807
808 VOID
809 NTAPI
810 KiInitSpinLocks(
811 IN PKPRCB Prcb,
812 IN CCHAR Number
813 );
814
815 LARGE_INTEGER
816 NTAPI
817 KiComputeReciprocal(
818 IN LONG Divisor,
819 OUT PUCHAR Shift
820 );
821
822 VOID
823 NTAPI
824 KiInitSystem(
825 VOID
826 );
827
828 #include "ke_x.h"
829
830 #endif /* __NTOSKRNL_INCLUDE_INTERNAL_KE_H */