3d1760bf66850b3c0fb331ef9b665fd8aabc1f59
[reactos.git] / reactos / include / ndk / ketypes.h
1 /*++ NDK Version: 0095
2
3 Copyright (c) Alex Ionescu. All rights reserved.
4
5 Header Name:
6
7 lpctypes.h
8
9 Abstract:
10
11 Type definitions for the Loader.
12
13 Author:
14
15 Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004
16
17 --*/
18
19 #ifndef _KETYPES_H
20 #define _KETYPES_H
21
22 //
23 // Dependencies
24 //
25 #include <umtypes.h>
26 #ifndef NTOS_MODE_USER
27 #include <arc/arc.h>
28 #include <haltypes.h>
29 #include <potypes.h>
30 #include <ifssupp.h>
31 #endif
32
33 //
34 // Context Record Flags
35 //
36 #define CONTEXT_DEBUGGER (CONTEXT_FULL | CONTEXT_FLOATING_POINT)
37
38 //
39 // Maximum System Descriptor Table Entries
40 //
41 #define SSDT_MAX_ENTRIES 4
42
43 //
44 // Maximum number of times a thread can be suspended
45 //
46 #define MAXIMUM_SUSPEND_COUNT 0x7F
47
48 //
49 // Dispatcher Priority increments
50 //
51 #define THREAD_ALERT_INCREMENT 2
52
53 #ifdef NTOS_MODE_USER
54
55 //
56 // KPROCESSOR_MODE Type
57 //
58 typedef CCHAR KPROCESSOR_MODE;
59
60 //
61 // Dereferencable pointer to KUSER_SHARED_DATA in User-Mode
62 //
63 #define SharedUserData ((KUSER_SHARED_DATA *CONST)USER_SHARED_DATA)
64
65 //
66 // Maximum WOW64 Entries in KUSER_SHARED_DATA
67 //
68 #define MAX_WOW64_SHARED_ENTRIES 16
69
70 //
71 // Maximum Processor Features supported in KUSER_SHARED_DATA
72 //
73 #define PROCESSOR_FEATURE_MAX 64
74
75 //
76 // Event Types
77 //
78 typedef enum _EVENT_TYPE
79 {
80 NotificationEvent,
81 SynchronizationEvent
82 } EVENT_TYPE;
83
84 //
85 // Timer Types
86 //
87 typedef enum _TIMER_TYPE
88 {
89 NotificationTimer,
90 SynchronizationTimer
91 } TIMER_TYPE;
92
93 //
94 // Wait Types
95 //
96 typedef enum _WAIT_TYPE
97 {
98 WaitAll,
99 WaitAny
100 } WAIT_TYPE;
101
102 //
103 // Processor Execution Modes
104 //
105 typedef enum _MODE
106 {
107 KernelMode,
108 UserMode,
109 MaximumMode
110 } MODE;
111
112 //
113 // Wait Reasons
114 //
115 typedef enum _KWAIT_REASON
116 {
117 Executive,
118 FreePage,
119 PageIn,
120 PoolAllocation,
121 DelayExecution,
122 Suspended,
123 UserRequest,
124 WrExecutive,
125 WrFreePage,
126 WrPageIn,
127 WrPoolAllocation,
128 WrDelayExecution,
129 WrSuspended,
130 WrUserRequest,
131 WrEventPair,
132 WrQueue,
133 WrLpcReceive,
134 WrLpcReply,
135 WrVirtualMemory,
136 WrPageOut,
137 WrRendezvous,
138 Spare2,
139 WrGuardedMutex,
140 Spare4,
141 Spare5,
142 Spare6,
143 WrKernel,
144 WrResource,
145 WrPushLock,
146 WrMutex,
147 WrQuantumEnd,
148 WrDispatchInt,
149 WrPreempted,
150 WrYieldExecution,
151 MaximumWaitReason
152 } KWAIT_REASON;
153
154 //
155 // Profiling Sources
156 //
157 typedef enum _KPROFILE_SOURCE
158 {
159 ProfileTime,
160 ProfileAlignmentFixup,
161 ProfileTotalIssues,
162 ProfilePipelineDry,
163 ProfileLoadInstructions,
164 ProfilePipelineFrozen,
165 ProfileBranchInstructions,
166 ProfileTotalNonissues,
167 ProfileDcacheMisses,
168 ProfileIcacheMisses,
169 ProfileCacheMisses,
170 ProfileBranchMispredictions,
171 ProfileStoreInstructions,
172 ProfileFpInstructions,
173 ProfileIntegerInstructions,
174 Profile2Issue,
175 Profile3Issue,
176 Profile4Issue,
177 ProfileSpecialInstructions,
178 ProfileTotalCycles,
179 ProfileIcacheIssues,
180 ProfileDcacheAccesses,
181 ProfileMemoryBarrierCycles,
182 ProfileLoadLinkedIssues,
183 ProfileMaximum
184 } KPROFILE_SOURCE;
185
186 //
187 // NT Product and Architecture Types
188 //
189 typedef enum _NT_PRODUCT_TYPE
190 {
191 NtProductWinNt = 1,
192 NtProductLanManNt,
193 NtProductServer
194 } NT_PRODUCT_TYPE, *PNT_PRODUCT_TYPE;
195
196 typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE
197 {
198 StandardDesign,
199 NEC98x86,
200 EndAlternatives
201 } ALTERNATIVE_ARCHITECTURE_TYPE;
202
203 #endif
204
205 //
206 // Thread States
207 //
208 typedef enum _KTHREAD_STATE
209 {
210 Initialized,
211 Ready,
212 Running,
213 Standby,
214 Terminated,
215 Waiting,
216 Transition,
217 DeferredReady,
218 } KTHREAD_STATE, *PKTHREAD_STATE;
219
220 //
221 // Process States
222 //
223 typedef enum _KPROCESS_STATE
224 {
225 ProcessInMemory,
226 ProcessOutOfMemory,
227 ProcessInTransition,
228 } KPROCESS_STATE, *PKPROCESS_STATE;
229
230 #ifdef NTOS_MODE_USER
231
232 //
233 // APC Normal Routine
234 //
235 typedef VOID
236 (NTAPI *PKNORMAL_ROUTINE)(
237 IN PVOID NormalContext,
238 IN PVOID SystemArgument1,
239 IN PVOID SystemArgument2
240 );
241
242 //
243 // Timer Routine
244 //
245 typedef VOID
246 (NTAPI *PTIMER_APC_ROUTINE)(
247 IN PVOID TimerContext,
248 IN ULONG TimerLowValue,
249 IN LONG TimerHighValue
250 );
251
252 //
253 // System Time Structure
254 //
255 typedef struct _KSYSTEM_TIME
256 {
257 ULONG LowPart;
258 LONG High1Time;
259 LONG High2Time;
260 } KSYSTEM_TIME, *PKSYSTEM_TIME;
261
262 //
263 // Shared Kernel User Data
264 //
265 typedef struct _KUSER_SHARED_DATA
266 {
267 ULONG TickCountLowDeprecated;
268 ULONG TickCountMultiplier;
269 volatile KSYSTEM_TIME InterruptTime;
270 volatile KSYSTEM_TIME SystemTime;
271 volatile KSYSTEM_TIME TimeZoneBias;
272 USHORT ImageNumberLow;
273 USHORT ImageNumberHigh;
274 WCHAR NtSystemRoot[260];
275 ULONG MaxStackTraceDepth;
276 ULONG CryptoExponent;
277 ULONG TimeZoneId;
278 ULONG LargePageMinimum;
279 ULONG Reserved2[7];
280 NT_PRODUCT_TYPE NtProductType;
281 BOOLEAN ProductTypeIsValid;
282 ULONG NtMajorVersion;
283 ULONG NtMinorVersion;
284 BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX];
285 ULONG Reserved1;
286 ULONG Reserved3;
287 volatile ULONG TimeSlip;
288 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture;
289 LARGE_INTEGER SystemExpirationDate;
290 ULONG SuiteMask;
291 BOOLEAN KdDebuggerEnabled;
292 volatile ULONG ActiveConsoleId;
293 volatile ULONG DismountCount;
294 ULONG ComPlusPackage;
295 ULONG LastSystemRITEventTickCount;
296 ULONG NumberOfPhysicalPages;
297 BOOLEAN SafeBootMode;
298 ULONG TraceLogging;
299 ULONG Fill0;
300 ULONGLONG TestRetInstruction;
301 ULONG SystemCall;
302 ULONG SystemCallReturn;
303 ULONGLONG SystemCallPad[3];
304 union {
305 volatile KSYSTEM_TIME TickCount;
306 volatile ULONG64 TickCountQuad;
307 };
308 ULONG Cookie;
309 LONGLONG ConsoleSessionForegroundProcessId;
310 ULONG Wow64SharedInformation[MAX_WOW64_SHARED_ENTRIES];
311 ULONG UserModeGlobalLogging;
312 } KUSER_SHARED_DATA, *PKUSER_SHARED_DATA;
313
314 #else
315
316 //
317 // APC Environment Types
318 //
319 typedef enum _KAPC_ENVIRONMENT
320 {
321 OriginalApcEnvironment,
322 AttachedApcEnvironment,
323 CurrentApcEnvironment
324 } KAPC_ENVIRONMENT;
325
326 //
327 // PRCB DPC Data
328 //
329 typedef struct _KDPC_DATA
330 {
331 LIST_ENTRY DpcListHead;
332 ULONG DpcLock;
333 ULONG DpcQueueDepth;
334 ULONG DpcCount;
335 } KDPC_DATA, *PKDPC_DATA;
336
337 //
338 // Per-Processor Lookaside List
339 //
340 typedef struct _PP_LOOKASIDE_LIST
341 {
342 struct _GENERAL_LOOKASIDE *P;
343 struct _GENERAL_LOOKASIDE *L;
344 } PP_LOOKASIDE_LIST, *PPP_LOOKASIDE_LIST;
345
346 //
347 // Architectural Types
348 //
349 #include <arch/ketypes.h>
350
351 //
352 // Kernel Memory Node
353 //
354 typedef struct _KNODE
355 {
356 SLIST_HEADER DeadStackList;
357 SLIST_HEADER PfnDereferenceSListHead;
358 ULONG ProcessorMask;
359 ULONG Color;
360 UCHAR Seed;
361 UCHAR NodeNumber;
362 ULONG Flags;
363 ULONG MmShiftedColor;
364 ULONG FreeCount[2];
365 struct _SINGLE_LIST_ENTRY *PfnDeferredList;
366 } KNODE, *PKNODE;
367
368 //
369 // Kernel Profile Object
370 //
371 typedef struct _KPROFILE
372 {
373 CSHORT Type;
374 CSHORT Size;
375 LIST_ENTRY ProfileListEntry;
376 struct _KPROCESS *Process;
377 PVOID RangeBase;
378 PVOID RangeLimit;
379 ULONG BucketShift;
380 PVOID Buffer;
381 ULONG Segment;
382 KAFFINITY Affinity;
383 KPROFILE_SOURCE Source;
384 BOOLEAN Started;
385 } KPROFILE, *PKPROFILE;
386
387 //
388 // Kernel Interrupt Object
389 //
390 typedef struct _KINTERRUPT
391 {
392 CSHORT Type;
393 CSHORT Size;
394 LIST_ENTRY InterruptListEntry;
395 PKSERVICE_ROUTINE ServiceRoutine;
396 PVOID ServiceContext;
397 KSPIN_LOCK SpinLock;
398 ULONG TickCount;
399 PKSPIN_LOCK ActualLock;
400 PVOID DispatchAddress;
401 ULONG Vector;
402 KIRQL Irql;
403 KIRQL SynchronizeIrql;
404 BOOLEAN FloatingSave;
405 BOOLEAN Connected;
406 CHAR Number;
407 UCHAR ShareVector;
408 KINTERRUPT_MODE Mode;
409 ULONG ServiceCount;
410 ULONG DispatchCount;
411 ULONG DispatchCode[106];
412 } KINTERRUPT, *PKINTERRUPT;
413
414 //
415 // Kernel Event Pair Object
416 //
417 typedef struct _KEVENT_PAIR
418 {
419 CSHORT Type;
420 CSHORT Size;
421 KEVENT LowEvent;
422 KEVENT HighEvent;
423 } KEVENT_PAIR, *PKEVENT_PAIR;
424
425 //
426 // Kernel No Execute Options
427 //
428 typedef struct _KEXECUTE_OPTIONS
429 {
430 UCHAR ExecuteDisable:1;
431 UCHAR ExecuteEnable:1;
432 UCHAR DisableThunkEmulation:1;
433 UCHAR Permanent:1;
434 UCHAR ExecuteDispatchEnable:1;
435 UCHAR ImageDispatchEnable:1;
436 UCHAR Spare:2;
437 } KEXECUTE_OPTIONS, *PKEXECUTE_OPTIONS;
438
439 //
440 // Kernel Object Types
441 //
442 typedef enum _KOBJECTS
443 {
444 EventNotificationObject = 0,
445 EventSynchronizationObject = 1,
446 MutantObject = 2,
447 ProcessObject = 3,
448 QueueObject = 4,
449 SemaphoreObject = 5,
450 ThreadObject = 6,
451 GateObject = 7,
452 TimerNotificationObject = 8,
453 TimerSynchronizationObject = 9,
454 Spare2Object = 10,
455 Spare3Object = 11,
456 Spare4Object = 12,
457 Spare5Object = 13,
458 Spare6Object = 14,
459 Spare7Object = 15,
460 Spare8Object = 16,
461 Spare9Object = 17,
462 ApcObject = 18,
463 DpcObject = 19,
464 DeviceQueueObject = 20,
465 EventPairObject = 21,
466 InterruptObject = 22,
467 ProfileObject = 23,
468 ThreadedDpcObject = 24,
469 MaximumKernelObject = 25
470 } KOBJECTS;
471
472 //
473 // Kernel Thread (KTHREAD)
474 //
475 #include <pshpack1.h>
476 typedef struct _KTHREAD
477 {
478 DISPATCHER_HEADER DispatcherHeader; /* 00 */
479 LIST_ENTRY MutantListHead; /* 10 */
480 PVOID InitialStack; /* 18 */
481 ULONG_PTR StackLimit; /* 1C */
482 PVOID KernelStack; /* 20 */
483 KSPIN_LOCK ThreadLock; /* 24 */
484 union /* 28 */
485 { /* 28 */
486 KAPC_STATE ApcState; /* 34 */
487 struct /* 28 */
488 { /* 28 */
489 UCHAR ApcStateFill[23]; /* 34 */
490 UCHAR ApcQueueable; /* 3F */
491 }; /* 3F */
492 }; /* 3F */
493 UCHAR NextProcessor; /* 40 */
494 UCHAR DeferredProcessor; /* 41 */
495 UCHAR AdjustReason; /* 42 */
496 UCHAR AdjustIncrement; /* 43 */
497 KSPIN_LOCK ApcQueueLock; /* 44 */
498 ULONG ContextSwitches; /* 48 */
499 UCHAR State; /* 4C */
500 UCHAR NpxState; /* 4D */
501 UCHAR WaitIrql; /* 4E */
502 UCHAR WaitMode; /* 4F */
503 LONG WaitStatus; /* 50 */
504 union /* 54 */
505 { /* 54 */
506 PKWAIT_BLOCK WaitBlockList; /* 54 */
507 PKGATE GateObject; /* 54 */
508 }; /* 54 */
509 UCHAR Alertable; /* 58 */
510 UCHAR WaitNext; /* 59 */
511 UCHAR WaitReason; /* 5A */
512 UCHAR Priority; /* 5B */
513 UCHAR EnableStackSwap; /* 5C */
514 UCHAR SwapBusy; /* 5D */
515 UCHAR Alerted[2]; /* 5E */
516 union /* 60 */
517 { /* 60 */
518 LIST_ENTRY WaitListEntry; /* 60 */
519 SINGLE_LIST_ENTRY SwapListEntry; /* 60 */
520 }; /* 68 */
521 PKQUEUE Queue; /* 68 */
522 ULONG WaitTime; /* 6C */
523 union /* 70 */
524 { /* 70 */
525 struct /* 70 */
526 { /* 70 */
527 USHORT KernelApcDisable; /* 70 */
528 USHORT SpecialApcDisable; /* 72 */
529 }; /* 70 */
530 ULONG CombinedApcDisable; /* 70 */
531 }; /* 74 */
532 struct _TEB *Teb; /* 74 */
533 union /* 78 */
534 { /* 78 */
535 KTIMER Timer; /* 78 */
536 UCHAR TimerFill[40]; /* 78 */
537 }; /* 78 */
538 union /* A0 */
539 { /* A0 */
540 struct /* A0 */
541 { /* A0 */
542 LONG AutoAlignment:1; /* A0 */
543 LONG DisableBoost:1; /* A0 */
544 LONG ReservedFlags:30; /* A0 */
545 }; /* A0 */
546 LONG ThreadFlags; /* A0 */
547 }; /* A0 */
548 PVOID Padding; /* A4 */
549 union /* A8 */
550 { /* A8 */
551 KWAIT_BLOCK WaitBlock[4]; /* A8 */
552 union /* A8 */
553 { /* A8 */
554 struct /* A8 */
555 { /* A8 */
556 UCHAR WaitBlockFill0[23]; /* A8 */
557 UCHAR SystemAffinityActive; /* BF */
558 }; /* A8 */
559 struct /* A8 */
560 { /* A8 */
561 UCHAR WaitBlockFill1[47]; /* A8 */
562 UCHAR PreviousMode; /* D7 */
563 }; /* A8 */
564 struct /* A8 */
565 { /* A8 */
566 UCHAR WaitBlockFill2[71]; /* A8 */
567 UCHAR ResourceIndex; /* EF */
568 }; /* A8 */
569 struct /* A8 */
570 { /* A8 */
571 UCHAR WaitBlockFill3[95]; /* A8 */
572 UCHAR LargeStack; /* 107 */
573 }; /* A8 */
574 }; /* A8 */
575 }; /* A8 */
576 LIST_ENTRY QueueListEntry; /* 108 */
577 PKTRAP_FRAME TrapFrame; /* 110 */
578 PVOID CallbackStack; /* 114 */
579 PVOID ServiceTable; /* 118 */
580 UCHAR ApcStateIndex; /* 11C */
581 UCHAR IdealProcessor; /* 11D */
582 UCHAR Preempted; /* 11E */
583 UCHAR ProcessReadyQueue; /* 11F */
584 UCHAR KernelStackResident; /* 120 */
585 CHAR BasePriority; /* 121 */
586 CHAR PriorityDecrement; /* 122 */
587 CHAR Saturation; /* 123 */
588 KAFFINITY UserAffinity; /* 124 */
589 struct _KPROCESS *Process; /* 128 */
590 KAFFINITY Affinity; /* 12C */
591 PKAPC_STATE ApcStatePointer[2]; /* 130 */
592 union /* 138 */
593 { /* 138 */
594 KAPC_STATE SavedApcState; /* 138 */
595 union /* 138 */
596 { /* 138 */
597 UCHAR SavedApcStateFill[23]; /* 138 */
598 CHAR FreezeCount; /* 14F */
599 }; /* 138 */
600 }; /* 138 */
601 CHAR SuspendCount; /* 150 */
602 UCHAR UserIdealProcessor; /* 151 */
603 UCHAR CalloutActive; /* 152 */
604 UCHAR Iopl; /* 153 */
605 PVOID Win32Thread; /* 154 */
606 PVOID StackBase; /* 158 */
607 union /* 15C */
608 { /* 15C */
609 KAPC SuspendApc; /* 15C */
610 union /* 15C */
611 { /* 15C */
612 UCHAR SuspendApcFill0[1]; /* 15C */
613 CHAR Quantum; /* 15D */
614 }; /* 15C */
615 union /* 15C */
616 { /* 15C */
617 UCHAR SuspendApcFill1[3]; /* 15C */
618 UCHAR QuantumReset; /* 15F */
619 }; /* 15C */
620 union /* 15C */
621 { /* 15C */
622 UCHAR SuspendApcFill2[4]; /* 15C */
623 ULONG KernelTime; /* 160 */
624 }; /* 15C */
625 union /* 15C */
626 { /* 15C */
627 UCHAR SuspendApcFill3[36]; /* 15C */
628 PVOID TlsArray; /* 180 */
629 }; /* 15C */
630 union /* 15C */
631 { /* 15C */
632 UCHAR SuspendApcFill4[40]; /* 15C */
633 PVOID LegoData; /* 184 */
634 }; /* 15C */
635 union /* 15C */
636 { /* 15C */
637 UCHAR SuspendApcFill5[47]; /* 15C */
638 UCHAR PowerState; /* 18B */
639 }; /* 15C */
640 }; /* 15C */
641 ULONG UserTime; /* 18C */
642 union /* 190 */
643 { /* 190 */
644 KSEMAPHORE SuspendSemaphore; /* 190 */
645 UCHAR SuspendSemaphorefill[20]; /* 190 */
646 }; /* 190 */
647 ULONG SListFaultCount; /* 1A4 */
648 LIST_ENTRY ThreadListEntry; /* 1A8 */
649 PVOID SListFaultAddress; /* 1B0 */
650 } KTHREAD; /* sizeof: 1B4 */
651 #include <poppack.h>
652
653 //
654 // Kernel Process (KPROCESS)
655 //
656 typedef struct _KPROCESS
657 {
658 DISPATCHER_HEADER Header; /* 000 */
659 LIST_ENTRY ProfileListHead; /* 010 */
660 PHYSICAL_ADDRESS DirectoryTableBase; /* 018 */
661 #if defined(_M_IX86)
662 KGDTENTRY LdtDescriptor; /* 020 */
663 KIDTENTRY Int21Descriptor; /* 028 */
664 USHORT IopmOffset; /* 030 */
665 UCHAR Iopl; /* 032 */
666 UCHAR Unused; /* 033 */
667 #endif
668 ULONG ActiveProcessors; /* 034 */
669 ULONG KernelTime; /* 038 */
670 ULONG UserTime; /* 03C */
671 LIST_ENTRY ReadyListHead; /* 040 */
672 LIST_ENTRY SwapListEntry; /* 048 */
673 PVOID VdmTrapcHandler; /* 04C */
674 LIST_ENTRY ThreadListHead; /* 050 */
675 KSPIN_LOCK ProcessLock; /* 058 */
676 KAFFINITY Affinity; /* 05C */
677 union
678 {
679 struct
680 {
681 ULONG AutoAlignment:1; /* 060.0 */
682 ULONG DisableBoost:1; /* 060.1 */
683 ULONG DisableQuantum:1; /* 060.2 */
684 ULONG ReservedFlags:29; /* 060.3 */
685 };
686 ULONG ProcessFlags; /* 060 */
687 };
688 CHAR BasePriority; /* 064 */
689 CHAR QuantumReset; /* 065 */
690 UCHAR State; /* 066 */
691 UCHAR ThreadSeed; /* 067 */
692 UCHAR PowerState; /* 068 */
693 UCHAR IdealNode; /* 069 */
694 UCHAR Visited; /* 06A */
695 KEXECUTE_OPTIONS Flags; /* 06B */
696 ULONG StackCount; /* 06C */
697 LIST_ENTRY ProcessListEntry; /* 070 */
698 } KPROCESS, *PKPROCESS;
699
700 //
701 // System Service Table Descriptor
702 //
703 typedef struct _KSERVICE_TABLE_DESCRIPTOR
704 {
705 PULONG_PTR Base;
706 PULONG Count;
707 ULONG Limit;
708 #if defined(_IA64_)
709 LONG TableBaseGpOffset;
710 #endif
711 PUCHAR Number;
712 } KSERVICE_TABLE_DESCRIPTOR, *PKSERVICE_TABLE_DESCRIPTOR;
713
714 //
715 // Exported Loader Parameter Block
716 //
717 #ifdef _REACTOS_
718 extern LOADER_PARAMETER_BLOCK NTSYSAPI KeLoaderBlock;
719 #else
720 extern PLOADER_PARAMETER_BLOCK NTSYSAPI KeLoaderBlock;
721 #endif
722
723 //
724 // Exported Hardware Data
725 //
726 extern KAFFINITY NTSYSAPI KeActiveProcessors;
727 extern CHAR NTSYSAPI KeNumberProcessors;
728 extern ULONG NTSYSAPI KiDmaIoCoherency;
729 extern ULONG NTSYSAPI KeMaximumIncrement;
730 extern ULONG NTSYSAPI KeMinimumIncrement;
731 extern ULONG NTSYSAPI KeDcacheFlushCount;
732 extern ULONG NTSYSAPI KeIcacheFlushCount;
733
734 //
735 // Exported System Service Descriptor Tables
736 //
737 extern KSERVICE_TABLE_DESCRIPTOR NTSYSAPI KeServiceDescriptorTable[SSDT_MAX_ENTRIES];
738 extern KSERVICE_TABLE_DESCRIPTOR NTSYSAPI KeServiceDescriptorTableShadow[SSDT_MAX_ENTRIES];
739
740 #endif // !NTOS_MODE_USER
741
742 #endif // _KETYPES_H