aad9d30f346deb8eba9a86d00db3fc1f0ad7c15d
[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 (FIXME: mmtypes?
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 (FIXME: Fix with new defs)
371 //
372 typedef struct _KPROFILE
373 {
374 CSHORT Type;
375 CSHORT Size;
376 LIST_ENTRY ListEntry;
377 PVOID RegionStart;
378 PVOID RegionEnd;
379 ULONG BucketShift;
380 PVOID Buffer;
381 KPROFILE_SOURCE Source;
382 ULONG Affinity;
383 BOOLEAN Active;
384 struct _KPROCESS *Process;
385 } KPROFILE, *PKPROFILE;
386
387 //
388 // Kernel Interrupt Object (FIXME: Verify)
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;
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 extern LOADER_PARAMETER_BLOCK NTSYSAPI KeLoaderBlock;
718
719 //
720 // Exported Hardware Data
721 //
722 extern KAFFINITY NTSYSAPI KeActiveProcessors;
723 extern CHAR NTSYSAPI KeNumberProcessors;
724 extern ULONG NTSYSAPI KiDmaIoCoherency;
725 extern ULONG NTSYSAPI KeMaximumIncrement;
726 extern ULONG NTSYSAPI KeMinimumIncrement;
727 extern ULONG NTSYSAPI KeDcacheFlushCount;
728 extern ULONG NTSYSAPI KeIcacheFlushCount;
729
730 //
731 // Exported System Service Descriptor Tables
732 //
733 extern KSERVICE_TABLE_DESCRIPTOR NTSYSAPI KeServiceDescriptorTable[SSDT_MAX_ENTRIES];
734 extern KSERVICE_TABLE_DESCRIPTOR NTSYSAPI KeServiceDescriptorTableShadow[SSDT_MAX_ENTRIES];
735
736 #endif // !NTOS_MODE_USER
737
738 #endif // _KETYPES_H