- Implement KeReadyThread that wraps KiReadyThread so that \ps doesn't have to worry...
[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 KiIdleSummary;
130 extern VOID KiTrap8(VOID);
131 extern VOID KiTrap2(VOID);
132
133 /* MACROS *************************************************************************/
134
135 #define AFFINITY_MASK(Id) KiMask32Array[Id]
136 #define PRIORITY_MASK(Id) KiMask32Array[Id]
137
138 /* The following macro initializes a dispatcher object's header */
139 #define KeInitializeDispatcherHeader(Header, t, s, State) \
140 { \
141 (Header)->Type = t; \
142 (Header)->Absolute = 0; \
143 (Header)->Inserted = 0; \
144 (Header)->Size = s; \
145 (Header)->SignalState = State; \
146 InitializeListHead(&((Header)->WaitListHead)); \
147 }
148
149 #define KEBUGCHECKWITHTF(a,b,c,d,e,f) \
150 DbgPrint("KeBugCheckWithTf at %s:%i\n",__FILE__,__LINE__), \
151 KeBugCheckWithTf(a,b,c,d,e,f)
152
153 /* Tells us if the Timer or Event is a Syncronization or Notification Object */
154 #define TIMER_OR_EVENT_TYPE 0x7L
155
156 /* One of the Reserved Wait Blocks, this one is for the Thread's Timer */
157 #define TIMER_WAIT_BLOCK 0x3L
158
159 /* IOPM Definitions */
160 #define IO_ACCESS_MAP_NONE 0
161 #define IOPM_OFFSET FIELD_OFFSET(KTSS, IoMaps[0].IoMap)
162 #define KiComputeIopmOffset(MapNumber) \
163 (MapNumber == IO_ACCESS_MAP_NONE) ? \
164 (USHORT)(sizeof(KTSS)) : \
165 (USHORT)(FIELD_OFFSET(KTSS, IoMaps[MapNumber-1].IoMap))
166
167 #define SIZE_OF_FX_REGISTERS 32
168
169 /* INTERNAL KERNEL FUNCTIONS ************************************************/
170
171 /* Readies a Thread for Execution. */
172 BOOLEAN
173 NTAPI
174 KiDispatchThreadNoLock(ULONG NewThreadStatus);
175
176 /* Readies a Thread for Execution. */
177 VOID
178 NTAPI
179 KiDispatchThread(ULONG NewThreadStatus);
180
181 /* Finds a new thread to run */
182 NTSTATUS
183 FASTCALL
184 KiSwapThread(
185 IN PKTHREAD Thread,
186 IN PKPRCB Prcb
187 );
188
189 VOID
190 NTAPI
191 KeReadyThread(
192 IN PKTHREAD Thread
193 );
194
195 VOID
196 NTAPI
197 KiReadyThread(IN PKTHREAD Thread);
198
199 NTSTATUS
200 NTAPI
201 KeSuspendThread(PKTHREAD Thread);
202
203 BOOLEAN
204 FASTCALL
205 KiSwapContext(
206 IN PKTHREAD CurrentThread,
207 IN PKTHREAD NewThread
208 );
209
210 VOID
211 NTAPI
212 KiAdjustQuantumThread(IN PKTHREAD Thread);
213
214 VOID
215 FASTCALL
216 KiExitDispatcher(KIRQL OldIrql);
217
218 VOID
219 NTAPI
220 KiDeferredReadyThread(IN PKTHREAD Thread);
221
222 KAFFINITY
223 NTAPI
224 KiSetAffinityThread(
225 IN PKTHREAD Thread,
226 IN KAFFINITY Affinity,
227 IN PBOOLEAN Released // hack
228 );
229
230 PKTHREAD
231 NTAPI
232 KiSelectNextThread(
233 IN PKPRCB Prcb
234 );
235
236 /* gmutex.c ********************************************************************/
237
238 VOID
239 FASTCALL
240 KiAcquireGuardedMutexContented(PKGUARDED_MUTEX GuardedMutex);
241
242 /* gate.c **********************************************************************/
243
244 VOID
245 FASTCALL
246 KeInitializeGate(PKGATE Gate);
247
248 VOID
249 FASTCALL
250 KeSignalGateBoostPriority(PKGATE Gate);
251
252 VOID
253 FASTCALL
254 KeWaitForGate(
255 PKGATE Gate,
256 KWAIT_REASON WaitReason,
257 KPROCESSOR_MODE WaitMode
258 );
259
260 /* ipi.c ********************************************************************/
261
262 VOID
263 NTAPI
264 KiIpiSendRequest(
265 KAFFINITY TargetSet,
266 ULONG IpiRequest
267 );
268
269 /* next file ***************************************************************/
270
271 UCHAR
272 NTAPI
273 KeFindNextRightSetAffinity(
274 IN UCHAR Number,
275 IN ULONG Set
276 );
277
278 VOID
279 NTAPI
280 DbgBreakPointNoBugCheck(VOID);
281
282 VOID
283 NTAPI
284 KeInitializeProfile(
285 struct _KPROFILE* Profile,
286 struct _KPROCESS* Process,
287 PVOID ImageBase,
288 ULONG ImageSize,
289 ULONG BucketSize,
290 KPROFILE_SOURCE ProfileSource,
291 KAFFINITY Affinity
292 );
293
294 VOID
295 NTAPI
296 KeStartProfile(
297 struct _KPROFILE* Profile,
298 PVOID Buffer
299 );
300
301 BOOLEAN
302 NTAPI
303 KeStopProfile(struct _KPROFILE* Profile);
304
305 ULONG
306 NTAPI
307 KeQueryIntervalProfile(KPROFILE_SOURCE ProfileSource);
308
309 VOID
310 NTAPI
311 KeSetIntervalProfile(
312 KPROFILE_SOURCE ProfileSource,
313 ULONG Interval
314 );
315
316 VOID
317 NTAPI
318 KeProfileInterrupt(
319 PKTRAP_FRAME TrapFrame
320 );
321
322 VOID
323 NTAPI
324 KeProfileInterruptWithSource(
325 IN PKTRAP_FRAME TrapFrame,
326 IN KPROFILE_SOURCE Source
327 );
328
329 BOOLEAN
330 NTAPI
331 KiRosPrintAddress(PVOID Address);
332
333 VOID
334 NTAPI
335 KeUpdateRunTime(
336 PKTRAP_FRAME TrapFrame,
337 KIRQL Irql
338 );
339
340 VOID
341 NTAPI
342 KiExpireTimers(
343 PKDPC Dpc,
344 PVOID DeferredContext,
345 PVOID SystemArgument1,
346 PVOID SystemArgument2
347 );
348
349 VOID
350 NTAPI
351 KeInitializeThread(
352 IN PKPROCESS Process,
353 IN OUT PKTHREAD Thread,
354 IN PKSYSTEM_ROUTINE SystemRoutine,
355 IN PKSTART_ROUTINE StartRoutine,
356 IN PVOID StartContext,
357 IN PCONTEXT Context,
358 IN PVOID Teb,
359 IN PVOID KernelStack
360 );
361
362 VOID
363 NTAPI
364 KeUninitThread(
365 IN PKTHREAD Thread
366 );
367
368 NTSTATUS
369 NTAPI
370 KeInitThread(
371 IN OUT PKTHREAD Thread,
372 IN PVOID KernelStack,
373 IN PKSYSTEM_ROUTINE SystemRoutine,
374 IN PKSTART_ROUTINE StartRoutine,
375 IN PVOID StartContext,
376 IN PCONTEXT Context,
377 IN PVOID Teb,
378 IN PKPROCESS Process
379 );
380
381 VOID
382 NTAPI
383 KeStartThread(
384 IN OUT PKTHREAD Thread
385 );
386
387 BOOLEAN
388 NTAPI
389 KeAlertThread(
390 IN PKTHREAD Thread,
391 IN KPROCESSOR_MODE AlertMode
392 );
393
394 ULONG
395 NTAPI
396 KeAlertResumeThread(
397 IN PKTHREAD Thread
398 );
399
400 ULONG
401 NTAPI
402 KeResumeThread(
403 IN PKTHREAD Thread
404 );
405
406 PVOID
407 NTAPI
408 KeSwitchKernelStack(
409 IN PVOID StackBase,
410 IN PVOID StackLimit
411 );
412
413 VOID
414 NTAPI
415 KeRundownThread(VOID);
416
417 NTSTATUS
418 NTAPI
419 KeReleaseThread(PKTHREAD Thread);
420
421 VOID
422 NTAPI
423 KiSuspendRundown(
424 IN PKAPC Apc
425 );
426
427 VOID
428 NTAPI
429 KiSuspendNop(
430 IN PKAPC Apc,
431 IN PKNORMAL_ROUTINE *NormalRoutine,
432 IN PVOID *NormalContext,
433 IN PVOID *SystemArgument1,
434 IN PVOID *SystemArgument2
435 );
436
437 VOID
438 NTAPI
439 KiSuspendThread(
440 IN PVOID NormalContext,
441 IN PVOID SystemArgument1,
442 IN PVOID SystemArgument2
443 );
444
445 LONG
446 NTAPI
447 KeQueryBasePriorityThread(IN PKTHREAD Thread);
448
449 VOID
450 NTAPI
451 KiSetPriorityThread(
452 IN PKTHREAD Thread,
453 IN KPRIORITY Priority,
454 IN PBOOLEAN Released // hack
455 );
456
457 BOOLEAN
458 NTAPI
459 KiDispatcherObjectWake(
460 DISPATCHER_HEADER* hdr,
461 KPRIORITY increment
462 );
463
464 VOID
465 FASTCALL
466 KiUnlinkThread(
467 IN PKTHREAD Thread,
468 IN NTSTATUS WaitStatus
469 );
470
471 VOID
472 NTAPI
473 KeExpireTimers(
474 PKDPC Apc,
475 PVOID Arg1,
476 PVOID Arg2,
477 PVOID Arg3
478 );
479
480 VOID
481 NTAPI
482 KeDumpStackFrames(PULONG Frame);
483
484 BOOLEAN
485 NTAPI
486 KiTestAlert(VOID);
487
488 VOID
489 FASTCALL
490 KiUnwaitThread(
491 IN PKTHREAD Thread,
492 IN NTSTATUS WaitStatus,
493 IN KPRIORITY Increment
494 );
495
496 VOID
497 NTAPI
498 KeInitializeProcess(
499 struct _KPROCESS *Process,
500 KPRIORITY Priority,
501 KAFFINITY Affinity,
502 PLARGE_INTEGER DirectoryTableBase,
503 IN BOOLEAN Enable
504 );
505
506 VOID
507 NTAPI
508 KeSetQuantumProcess(
509 IN PKPROCESS Process,
510 IN UCHAR Quantum
511 );
512
513 KPRIORITY
514 NTAPI
515 KeSetPriorityAndQuantumProcess(
516 IN PKPROCESS Process,
517 IN KPRIORITY Priority,
518 IN UCHAR Quantum OPTIONAL
519 );
520
521 ULONG
522 NTAPI
523 KeForceResumeThread(IN PKTHREAD Thread);
524
525 BOOLEAN
526 NTAPI
527 KeDisableThreadApcQueueing(IN PKTHREAD Thread);
528
529 BOOLEAN
530 NTAPI
531 KiInsertTimer(
532 PKTIMER Timer,
533 LARGE_INTEGER DueTime
534 );
535
536 VOID
537 FASTCALL
538 KiWaitTest(
539 PVOID Object,
540 KPRIORITY Increment
541 );
542
543 PULONG
544 NTAPI
545 KeGetStackTopThread(struct _ETHREAD* Thread);
546
547 VOID
548 NTAPI
549 KeContextToTrapFrame(
550 PCONTEXT Context,
551 PKEXCEPTION_FRAME ExeptionFrame,
552 PKTRAP_FRAME TrapFrame,
553 ULONG ContextFlags,
554 KPROCESSOR_MODE PreviousMode
555 );
556
557 VOID
558 NTAPI
559 KiCheckForKernelApcDelivery(VOID);
560
561 LONG
562 NTAPI
563 KiInsertQueue(
564 IN PKQUEUE Queue,
565 IN PLIST_ENTRY Entry,
566 BOOLEAN Head
567 );
568
569 ULONG
570 NTAPI
571 KeSetProcess(
572 struct _KPROCESS* Process,
573 KPRIORITY Increment,
574 BOOLEAN InWait
575 );
576
577 VOID
578 NTAPI
579 KeInitializeEventPair(PKEVENT_PAIR EventPair);
580
581 VOID
582 NTAPI
583 KiInitializeUserApc(
584 IN PKEXCEPTION_FRAME Reserved,
585 IN PKTRAP_FRAME TrapFrame,
586 IN PKNORMAL_ROUTINE NormalRoutine,
587 IN PVOID NormalContext,
588 IN PVOID SystemArgument1,
589 IN PVOID SystemArgument2
590 );
591
592 PLIST_ENTRY
593 NTAPI
594 KeFlushQueueApc(
595 IN PKTHREAD Thread,
596 IN KPROCESSOR_MODE PreviousMode
597 );
598
599 VOID
600 NTAPI
601 KiAttachProcess(
602 struct _KTHREAD *Thread,
603 struct _KPROCESS *Process,
604 PKLOCK_QUEUE_HANDLE ApcLock,
605 struct _KAPC_STATE *SavedApcState
606 );
607
608 VOID
609 NTAPI
610 KiSwapProcess(
611 struct _KPROCESS *NewProcess,
612 struct _KPROCESS *OldProcess
613 );
614
615 BOOLEAN
616 NTAPI
617 KeTestAlertThread(IN KPROCESSOR_MODE AlertMode);
618
619 BOOLEAN
620 NTAPI
621 KeRemoveQueueApc(PKAPC Apc);
622
623 VOID
624 FASTCALL
625 KiWakeQueue(IN PKQUEUE Queue);
626
627 /* INITIALIZATION FUNCTIONS *************************************************/
628
629 VOID
630 NTAPI
631 KeInitExceptions(VOID);
632
633 VOID
634 NTAPI
635 KeInitInterrupts(VOID);
636
637 VOID
638 NTAPI
639 KeInitTimer(VOID);
640
641 VOID
642 NTAPI
643 KeInitDispatcher(VOID);
644
645 VOID
646 NTAPI
647 KiInitializeSystemClock(VOID);
648
649 VOID
650 NTAPI
651 KiInitializeBugCheck(VOID);
652
653 VOID
654 NTAPI
655 Phase1Initialization(PVOID Context);
656
657 VOID
658 NTAPI
659 KiSystemStartup(
660 IN PROS_LOADER_PARAMETER_BLOCK LoaderBlock
661 );
662
663 VOID
664 NTAPI
665 KeInit2(VOID);
666
667 BOOLEAN
668 NTAPI
669 KiDeliverUserApc(PKTRAP_FRAME TrapFrame);
670
671 VOID
672 NTAPI
673 KiMoveApcState(
674 PKAPC_STATE OldState,
675 PKAPC_STATE NewState
676 );
677
678 VOID
679 NTAPI
680 KiAddProfileEvent(
681 KPROFILE_SOURCE Source,
682 ULONG Pc
683 );
684
685 VOID
686 NTAPI
687 KiDispatchException(
688 PEXCEPTION_RECORD ExceptionRecord,
689 PKEXCEPTION_FRAME ExceptionFrame,
690 PKTRAP_FRAME Tf,
691 KPROCESSOR_MODE PreviousMode,
692 BOOLEAN SearchFrames
693 );
694
695 VOID
696 NTAPI
697 KeTrapFrameToContext(
698 IN PKTRAP_FRAME TrapFrame,
699 IN PKEXCEPTION_FRAME ExceptionFrame,
700 IN OUT PCONTEXT Context
701 );
702
703 VOID
704 NTAPI
705 KeApplicationProcessorInit(VOID);
706
707 VOID
708 NTAPI
709 KePrepareForApplicationProcessorInit(ULONG id);
710
711 ULONG
712 NTAPI
713 KiUserTrapHandler(
714 PKTRAP_FRAME Tf,
715 ULONG ExceptionNr,
716 PVOID Cr2
717 );
718
719 VOID
720 NTAPI
721 KePushAndStackSwitchAndSysRet(
722 ULONG Push,
723 PVOID NewStack
724 );
725
726 VOID
727 NTAPI
728 KeStackSwitchAndRet(PVOID NewStack);
729
730 VOID
731 NTAPI
732 KeBugCheckWithTf(
733 ULONG BugCheckCode,
734 ULONG BugCheckParameter1,
735 ULONG BugCheckParameter2,
736 ULONG BugCheckParameter3,
737 ULONG BugCheckParameter4,
738 PKTRAP_FRAME Tf
739 );
740
741 VOID
742 NTAPI
743 KeFlushCurrentTb(VOID);
744
745 VOID
746 NTAPI
747 KeRosDumpStackFrames(
748 PULONG Frame,
749 ULONG FrameCount
750 );
751
752 VOID
753 NTAPI
754 KiSetSystemTime(PLARGE_INTEGER NewSystemTime);
755
756 ULONG
757 NTAPI
758 KeV86Exception(
759 ULONG ExceptionNr,
760 PKTRAP_FRAME Tf,
761 ULONG address
762 );
763
764 VOID
765 NTAPI
766 KiStartUnexpectedRange(
767 VOID
768 );
769
770 VOID
771 NTAPI
772 KiEndUnexpectedRange(
773 VOID
774 );
775
776 VOID
777 NTAPI
778 KiInterruptDispatch(
779 VOID
780 );
781
782 VOID
783 NTAPI
784 KiChainedDispatch(
785 VOID
786 );
787
788 VOID
789 NTAPI
790 Ki386AdjustEsp0(
791 IN PKTRAP_FRAME TrapFrame
792 );
793
794 VOID
795 NTAPI
796 Ki386SetupAndExitToV86Mode(
797 OUT PTEB VdmTeb
798 );
799
800 VOID
801 NTAPI
802 KeI386VdmInitialize(
803 VOID
804 );
805
806 VOID
807 NTAPI
808 KiFlushNPXState(
809 IN FLOATING_SAVE_AREA *SaveArea
810 );
811
812 VOID
813 NTAPI
814 KiInitSpinLocks(
815 IN PKPRCB Prcb,
816 IN CCHAR Number
817 );
818
819 LARGE_INTEGER
820 NTAPI
821 KiComputeReciprocal(
822 IN LONG Divisor,
823 OUT PUCHAR Shift
824 );
825
826 VOID
827 NTAPI
828 KiInitSystem(
829 VOID
830 );
831
832 VOID
833 FASTCALL
834 KiInsertQueueApc(
835 IN PKAPC Apc,
836 IN KPRIORITY PriorityBoost
837 );
838
839 NTSTATUS
840 NTAPI
841 KiCallUserMode(
842 IN PVOID *OutputBuffer,
843 IN PULONG OutputLength
844 );
845
846 PULONG
847 NTAPI
848 KiGetUserModeStackAddress(
849 VOID
850 );
851
852 #include "ke_x.h"
853
854 #endif /* __NTOSKRNL_INCLUDE_INTERNAL_KE_H */