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