sync to trunk revision 36500
[reactos.git] / reactos / include / ndk / i386 / ketypes.h
1 /*++ NDK Version: 0098
2
3 Copyright (c) Alex Ionescu. All rights reserved.
4
5 Header Name:
6
7 ketypes.h (X86)
8
9 Abstract:
10
11 i386 Type definitions for the Kernel services.
12
13 Author:
14
15 Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
16
17 --*/
18
19 #ifndef _I386_KETYPES_H
20 #define _I386_KETYPES_H
21
22 //
23 // Dependencies
24 //
25
26 //
27 // KPCR Access for non-IA64 builds
28 //
29 #define K0IPCR ((ULONG_PTR)(KIP0PCRADDRESS))
30 #define PCR ((volatile KPCR * const)K0IPCR)
31 #if defined(CONFIG_SMP) || defined(NT_BUILD)
32 #undef KeGetPcr
33 #define KeGetPcr() ((volatile KPCR * const)__readfsdword(0x1C))
34 #endif
35
36 //
37 // Machine Types
38 //
39 #define MACHINE_TYPE_ISA 0x0000
40 #define MACHINE_TYPE_EISA 0x0001
41 #define MACHINE_TYPE_MCA 0x0002
42
43 //
44 // X86 80386 Segment Types
45 //
46 #define I386_TASK_GATE 0x5
47 #define I386_TSS 0x9
48 #define I386_ACTIVE_TSS 0xB
49 #define I386_CALL_GATE 0xC
50 #define I386_INTERRUPT_GATE 0xE
51 #define I386_TRAP_GATE 0xF
52
53 //
54 // Selector Names
55 //
56 #define RPL_MASK 0x0003
57 #define MODE_MASK 0x0001
58 #define KGDT_R0_CODE 0x8
59 #define KGDT_R0_DATA 0x10
60 #define KGDT_R3_CODE 0x18
61 #define KGDT_R3_DATA 0x20
62 #define KGDT_TSS 0x28
63 #define KGDT_R0_PCR 0x30
64 #define KGDT_R3_TEB 0x38
65 #define KGDT_LDT 0x48
66 #define KGDT_DF_TSS 0x50
67 #define KGDT_NMI_TSS 0x58
68
69 //
70 // CR4
71 //
72 #define CR4_VME 0x1
73 #define CR4_PVI 0x2
74 #define CR4_TSD 0x4
75 #define CR4_DE 0x8
76 #define CR4_PSE 0x10
77 #define CR4_PAE 0x20
78 #define CR4_MCE 0x40
79 #define CR4_PGE 0x80
80 #define CR4_FXSR 0x200
81 #define CR4_XMMEXCPT 0x400
82
83 //
84 // EFlags
85 //
86 #define EFLAGS_CF 0x01L
87 #define EFLAGS_ZF 0x40L
88 #define EFLAGS_TF 0x100L
89 #define EFLAGS_INTERRUPT_MASK 0x200L
90 #define EFLAGS_DF 0x400L
91 #define EFLAGS_IOPL 0x3000L
92 #define EFLAGS_NESTED_TASK 0x4000L
93 #define EFLAGS_RF 0x10000
94 #define EFLAGS_V86_MASK 0x20000
95 #define EFLAGS_ALIGN_CHECK 0x40000
96 #define EFLAGS_VIF 0x80000
97 #define EFLAGS_VIP 0x100000
98 #define EFLAGS_ID 0x200000
99 #define EFLAGS_USER_SANITIZE 0x3F4DD7
100 #define EFLAG_SIGN 0x8000
101 #define EFLAG_ZERO 0x4000
102
103 //
104 // IPI Types
105 //
106 #define IPI_APC 1
107 #define IPI_DPC 2
108 #define IPI_FREEZE 4
109 #define IPI_PACKET_READY 8
110 #define IPI_SYNCH_REQUEST 16
111
112 //
113 // PRCB Flags
114 //
115 #define PRCB_MAJOR_VERSION 1
116 #define PRCB_BUILD_DEBUG 1
117 #define PRCB_BUILD_UNIPROCESSOR 2
118
119 //
120 // HAL Variables
121 //
122 #define INITIAL_STALL_COUNT 0x64
123
124 //
125 // IOPM Definitions
126 //
127 #define IO_ACCESS_MAP_NONE 0
128 #define IOPM_OFFSET FIELD_OFFSET(KTSS, IoMaps[0].IoMap)
129 #define KiComputeIopmOffset(MapNumber) \
130 (MapNumber == IO_ACCESS_MAP_NONE) ? \
131 (USHORT)(sizeof(KTSS)) : \
132 (USHORT)(FIELD_OFFSET(KTSS, IoMaps[MapNumber-1].IoMap))
133
134 //
135 // Static Kernel-Mode Address start (use MM_KSEG0_BASE for actual)
136 //
137 #define KSEG0_BASE 0x80000000
138
139 //
140 // Synchronization-level IRQL
141 //
142 #ifndef CONFIG_SMP
143 #define SYNCH_LEVEL DISPATCH_LEVEL
144 #else
145 #define SYNCH_LEVEL (IPI_LEVEL - 1)
146 #endif
147
148 //
149 // Trap Frame Definition
150 //
151 typedef struct _KTRAP_FRAME
152 {
153 ULONG DbgEbp;
154 ULONG DbgEip;
155 ULONG DbgArgMark;
156 ULONG DbgArgPointer;
157 ULONG TempSegCs;
158 ULONG TempEsp;
159 ULONG Dr0;
160 ULONG Dr1;
161 ULONG Dr2;
162 ULONG Dr3;
163 ULONG Dr6;
164 ULONG Dr7;
165 ULONG SegGs;
166 ULONG SegEs;
167 ULONG SegDs;
168 ULONG Edx;
169 ULONG Ecx;
170 ULONG Eax;
171 ULONG PreviousPreviousMode;
172 struct _EXCEPTION_REGISTRATION_RECORD FAR *ExceptionList;
173 ULONG SegFs;
174 ULONG Edi;
175 ULONG Esi;
176 ULONG Ebx;
177 ULONG Ebp;
178 ULONG ErrCode;
179 ULONG Eip;
180 ULONG SegCs;
181 ULONG EFlags;
182 ULONG HardwareEsp;
183 ULONG HardwareSegSs;
184 ULONG V86Es;
185 ULONG V86Ds;
186 ULONG V86Fs;
187 ULONG V86Gs;
188 } KTRAP_FRAME, *PKTRAP_FRAME;
189
190 //
191 // LDT Entry Definition
192 //
193 #ifndef _LDT_ENTRY_DEFINED
194 #define _LDT_ENTRY_DEFINED
195 typedef struct _LDT_ENTRY
196 {
197 USHORT LimitLow;
198 USHORT BaseLow;
199 union
200 {
201 struct
202 {
203 UCHAR BaseMid;
204 UCHAR Flags1;
205 UCHAR Flags2;
206 UCHAR BaseHi;
207 } Bytes;
208 struct
209 {
210 ULONG BaseMid:8;
211 ULONG Type:5;
212 ULONG Dpl:2;
213 ULONG Pres:1;
214 ULONG LimitHi:4;
215 ULONG Sys:1;
216 ULONG Reserved_0:1;
217 ULONG Default_Big:1;
218 ULONG Granularity:1;
219 ULONG BaseHi:8;
220 } Bits;
221 } HighWord;
222 } LDT_ENTRY, *PLDT_ENTRY, *LPLDT_ENTRY;
223 #endif
224
225 //
226 // GDT Entry Definition
227 //
228 typedef struct _KGDTENTRY
229 {
230 USHORT LimitLow;
231 USHORT BaseLow;
232 union
233 {
234 struct
235 {
236 UCHAR BaseMid;
237 UCHAR Flags1;
238 UCHAR Flags2;
239 UCHAR BaseHi;
240 } Bytes;
241 struct
242 {
243 ULONG BaseMid:8;
244 ULONG Type:5;
245 ULONG Dpl:2;
246 ULONG Pres:1;
247 ULONG LimitHi:4;
248 ULONG Sys:1;
249 ULONG Reserved_0:1;
250 ULONG Default_Big:1;
251 ULONG Granularity:1;
252 ULONG BaseHi:8;
253 } Bits;
254 } HighWord;
255 } KGDTENTRY, *PKGDTENTRY;
256
257 //
258 // IDT Entry Access Definition
259 //
260 typedef struct _KIDT_ACCESS
261 {
262 union
263 {
264 struct
265 {
266 UCHAR Reserved;
267 UCHAR SegmentType:4;
268 UCHAR SystemSegmentFlag:1;
269 UCHAR Dpl:2;
270 UCHAR Present:1;
271 };
272 USHORT Value;
273 };
274 } KIDT_ACCESS, *PKIDT_ACCESS;
275
276 //
277 // IDT Entry Definition
278 //
279 typedef struct _KIDTENTRY
280 {
281 USHORT Offset;
282 USHORT Selector;
283 USHORT Access;
284 USHORT ExtendedOffset;
285 } KIDTENTRY, *PKIDTENTRY;
286
287 typedef struct _DESCRIPTOR
288 {
289 USHORT Pad;
290 USHORT Limit;
291 ULONG Base;
292 } KDESCRIPTOR, *PKDESCRIPTOR;
293
294 #ifndef NTOS_MODE_USER
295 //
296 // Macro to get current KPRCB
297 //
298 FORCEINLINE
299 struct _KPRCB *
300 KeGetCurrentPrcb(VOID)
301 {
302 return (struct _KPRCB *)(ULONG_PTR)__readfsdword(FIELD_OFFSET(KPCR, Prcb));
303 }
304
305 //
306 // FN/FX (FPU) Save Area Structures
307 //
308 typedef struct _FNSAVE_FORMAT
309 {
310 ULONG ControlWord;
311 ULONG StatusWord;
312 ULONG TagWord;
313 ULONG ErrorOffset;
314 ULONG ErrorSelector;
315 ULONG DataOffset;
316 ULONG DataSelector;
317 UCHAR RegisterArea[80];
318 } FNSAVE_FORMAT, *PFNSAVE_FORMAT;
319
320 typedef struct _FXSAVE_FORMAT
321 {
322 USHORT ControlWord;
323 USHORT StatusWord;
324 USHORT TagWord;
325 USHORT ErrorOpcode;
326 ULONG ErrorOffset;
327 ULONG ErrorSelector;
328 ULONG DataOffset;
329 ULONG DataSelector;
330 ULONG MXCsr;
331 ULONG MXCsrMask;
332 UCHAR RegisterArea[128];
333 UCHAR Reserved3[128];
334 UCHAR Reserved4[224];
335 UCHAR Align16Byte[8];
336 } FXSAVE_FORMAT, *PFXSAVE_FORMAT;
337
338 typedef struct _FX_SAVE_AREA
339 {
340 union
341 {
342 FNSAVE_FORMAT FnArea;
343 FXSAVE_FORMAT FxArea;
344 } U;
345 ULONG NpxSavedCpu;
346 ULONG Cr0NpxState;
347 } FX_SAVE_AREA, *PFX_SAVE_AREA;
348
349 //
350 // Special Registers Structure (outside of CONTEXT)
351 //
352 typedef struct _KSPECIAL_REGISTERS
353 {
354 ULONG Cr0;
355 ULONG Cr2;
356 ULONG Cr3;
357 ULONG Cr4;
358 ULONG KernelDr0;
359 ULONG KernelDr1;
360 ULONG KernelDr2;
361 ULONG KernelDr3;
362 ULONG KernelDr6;
363 ULONG KernelDr7;
364 KDESCRIPTOR Gdtr;
365 KDESCRIPTOR Idtr;
366 USHORT Tr;
367 USHORT Ldtr;
368 ULONG Reserved[6];
369 } KSPECIAL_REGISTERS, *PKSPECIAL_REGISTERS;
370
371 //
372 // Processor State Data
373 //
374 typedef struct _KPROCESSOR_STATE
375 {
376 CONTEXT ContextFrame;
377 KSPECIAL_REGISTERS SpecialRegisters;
378 } KPROCESSOR_STATE, *PKPROCESSOR_STATE;
379
380 //
381 // Processor Region Control Block
382 //
383 #pragma pack(push,4)
384 typedef struct _KPRCB
385 {
386 USHORT MinorVersion;
387 USHORT MajorVersion;
388 struct _KTHREAD *CurrentThread;
389 struct _KTHREAD *NextThread;
390 struct _KTHREAD *IdleThread;
391 UCHAR Number;
392 UCHAR Reserved;
393 USHORT BuildType;
394 KAFFINITY SetMember;
395 UCHAR CpuType;
396 UCHAR CpuID;
397 USHORT CpuStep;
398 KPROCESSOR_STATE ProcessorState;
399 ULONG KernelReserved[16];
400 ULONG HalReserved[16];
401 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
402 ULONG CFlushSize;
403 UCHAR PrcbPad0[88];
404 #else
405 UCHAR PrcbPad0[92];
406 #endif
407 KSPIN_LOCK_QUEUE LockQueue[LockQueueMaximumLock];
408 struct _KTHREAD *NpxThread;
409 ULONG InterruptCount;
410 ULONG KernelTime;
411 ULONG UserTime;
412 ULONG DpcTime;
413 ULONG DebugDpcTime;
414 ULONG InterruptTime;
415 ULONG AdjustDpcThreshold;
416 ULONG PageColor;
417 UCHAR SkipTick;
418 UCHAR DebuggerSavedIRQL;
419 #if (NTDDI_VERSION >= NTDDI_WS03)
420 UCHAR NodeColor;
421 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
422 UCHAR PollSlot;
423 #else
424 UCHAR Spare1;
425 #endif
426 ULONG NodeShiftedColor;
427 #else
428 UCHAR Spare1[6];
429 #endif
430 struct _KNODE *ParentNode;
431 ULONG MultiThreadProcessorSet;
432 struct _KPRCB *MultiThreadSetMaster;
433 #if (NTDDI_VERSION >= NTDDI_WS03)
434 ULONG SecondaryColorMask;
435 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
436 ULONG DpcTimeLimit;
437 #else
438 LONG Sleeping;
439 #endif
440 #else
441 ULONG ThreadStartCount[2];
442 #endif
443 ULONG CcFastReadNoWait;
444 ULONG CcFastReadWait;
445 ULONG CcFastReadNotPossible;
446 ULONG CcCopyReadNoWait;
447 ULONG CcCopyReadWait;
448 ULONG CcCopyReadNoWaitMiss;
449 #if (NTDDI_VERSION < NTDDI_LONGHORN)
450 ULONG KeAlignmentFixupCount;
451 #endif
452 ULONG SpareCounter0;
453 #if (NTDDI_VERSION < NTDDI_LONGHORN)
454 ULONG KeDcacheFlushCount;
455 ULONG KeExceptionDispatchCount;
456 ULONG KeFirstLevelTbFills;
457 ULONG KeFloatingEmulationCount;
458 ULONG KeIcacheFlushCount;
459 ULONG KeSecondLevelTbFills;
460 ULONG KeSystemCalls;
461 #endif
462 volatile ULONG IoReadOperationCount;
463 volatile ULONG IoWriteOperationCount;
464 volatile ULONG IoOtherOperationCount;
465 LARGE_INTEGER IoReadTransferCount;
466 LARGE_INTEGER IoWriteTransferCount;
467 LARGE_INTEGER IoOtherTransferCount;
468 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
469 ULONG CcFastMdlReadNoWait;
470 ULONG CcFastMdlReadWait;
471 ULONG CcFastMdlReadNotPossible;
472 ULONG CcMapDataNoWait;
473 ULONG CcMapDataWait;
474 ULONG CcPinMappedDataCount;
475 ULONG CcPinReadNoWait;
476 ULONG CcPinReadWait;
477 ULONG CcMdlReadNoWait;
478 ULONG CcMdlReadWait;
479 ULONG CcLazyWriteHotSpots;
480 ULONG CcLazyWriteIos;
481 ULONG CcLazyWritePages;
482 ULONG CcDataFlushes;
483 ULONG CcDataPages;
484 ULONG CcLostDelayedWrites;
485 ULONG CcFastReadResourceMiss;
486 ULONG CcCopyReadWaitMiss;
487 ULONG CcFastMdlReadResourceMiss;
488 ULONG CcMapDataNoWaitMiss;
489 ULONG CcMapDataWaitMiss;
490 ULONG CcPinReadNoWaitMiss;
491 ULONG CcPinReadWaitMiss;
492 ULONG CcMdlReadNoWaitMiss;
493 ULONG CcMdlReadWaitMiss;
494 ULONG CcReadAheadIos;
495 ULONG KeAlignmentFixupCount;
496 ULONG KeExceptionDispatchCount;
497 ULONG KeSystemCalls;
498 ULONG PrcbPad1[3];
499 #else
500 ULONG SpareCounter1[8];
501 #endif
502 PP_LOOKASIDE_LIST PPLookasideList[16];
503 PP_LOOKASIDE_LIST PPNPagedLookasideList[32];
504 PP_LOOKASIDE_LIST PPPagedLookasideList[32];
505 volatile ULONG PacketBarrier;
506 volatile ULONG ReverseStall;
507 PVOID IpiFrame;
508 UCHAR PrcbPad2[52];
509 volatile PVOID CurrentPacket[3];
510 volatile ULONG TargetSet;
511 volatile PKIPI_WORKER WorkerRoutine;
512 volatile ULONG IpiFrozen;
513 UCHAR PrcbPad3[40];
514 volatile ULONG RequestSummary;
515 volatile struct _KPRCB *SignalDone;
516 UCHAR PrcbPad4[56];
517 struct _KDPC_DATA DpcData[2];
518 PVOID DpcStack;
519 ULONG MaximumDpcQueueDepth;
520 ULONG DpcRequestRate;
521 ULONG MinimumDpcRate;
522 volatile UCHAR DpcInterruptRequested;
523 volatile UCHAR DpcThreadRequested;
524 volatile UCHAR DpcRoutineActive;
525 volatile UCHAR DpcThreadActive;
526 ULONG PrcbLock;
527 ULONG DpcLastCount;
528 volatile ULONG TimerHand;
529 volatile ULONG TimerRequest;
530 PVOID DpcThread;
531 KEVENT DpcEvent;
532 UCHAR ThreadDpcEnable;
533 volatile BOOLEAN QuantumEnd;
534 UCHAR PrcbPad50;
535 volatile UCHAR IdleSchedule;
536 LONG DpcSetEventRequest;
537 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
538 LONG Sleeping;
539 ULONG PeriodicCount;
540 ULONG PeriodicBias;
541 UCHAR PrcbPad5[6];
542 #else
543 UCHAR PrcbPad5[18];
544 #endif
545 LONG TickOffset;
546 KDPC CallDpc;
547 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
548 LONG ClockKeepAlive;
549 UCHAR ClockCheckSlot;
550 UCHAR ClockPollCycle;
551 UCHAR PrcbPad6[2];
552 LONG DpcWatchdogPeriod;
553 LONG DpcWatchDogCount;
554 LONG ThreadWatchdogPeriod;
555 LONG ThreadWatchDogCount;
556 ULONG PrcbPad70[2];
557 #else
558 ULONG PrcbPad7[8];
559 #endif
560 LIST_ENTRY WaitListHead;
561 ULONG ReadySummary;
562 ULONG QueueIndex;
563 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
564 SINGLE_LIST_ENTRY DeferredReadyListHead;
565 ULONGLONG StartCycles;
566 ULONGLONG CycleTime;
567 ULONGLONG PrcbPad71[3];
568 LIST_ENTRY DispatcherReadyListHead[32];
569 #else
570 LIST_ENTRY DispatcherReadyListHead[32];
571 SINGLE_LIST_ENTRY DeferredReadyListHead;
572 ULONG PrcbPad72[11];
573 #endif
574 PVOID ChainedInterruptList;
575 LONG LookasideIrpFloat;
576 volatile LONG MmPageFaultCount;
577 volatile LONG MmCopyOnWriteCount;
578 volatile LONG MmTransitionCount;
579 volatile LONG MmCacheTransitionCount;
580 volatile LONG MmDemandZeroCount;
581 volatile LONG MmPageReadCount;
582 volatile LONG MmPageReadIoCount;
583 volatile LONG MmCacheReadCount;
584 volatile LONG MmCacheIoCount;
585 volatile LONG MmDirtyPagesWriteCount;
586 volatile LONG MmDirtyWriteIoCount;
587 volatile LONG MmMappedPagesWriteCount;
588 volatile LONG MmMappedWriteIoCount;
589 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
590 ULONG CachedCommit;
591 ULONG CachedResidentAvailable;
592 PVOID HyperPte;
593 UCHAR CpuVendor;
594 UCHAR PrcbPad9[3];
595 #else
596 ULONG SpareFields0[1];
597 #endif
598 UCHAR VendorString[13];
599 UCHAR InitialApicId;
600 UCHAR LogicalProcessorsPerPhysicalProcessor;
601 ULONG MHz;
602 ULONG FeatureBits;
603 LARGE_INTEGER UpdateSignature;
604 volatile LARGE_INTEGER IsrTime;
605 LARGE_INTEGER SpareField1;
606 FX_SAVE_AREA NpxSaveArea;
607 PROCESSOR_POWER_STATE PowerState;
608 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
609 KDPC DpcWatchdogDoc;
610 KTIMER DpcWatchdogTimer;
611 PVOID WheaInfo;
612 PVOID EtwSupport;
613 SLIST_HEADER InterruptObjectPool;
614 LARGE_INTEGER HyperCallPagePhysical;
615 LARGE_INTEGER HyperCallPageVirtual;
616 PVOID RateControl;
617 CACHE_DESCRIPTOR Cache[5];
618 ULONG CacheCount;
619 ULONG CacheProcessorMask[5];
620 UCHAR LogicalProcessorsPerCore;
621 UCHAR PrcbPad8[3];
622 ULONG PackageProcessorSet;
623 ULONG CoreProcessorSet;
624 #endif
625 } KPRCB, *PKPRCB;
626
627 //
628 // Processor Control Region
629 //
630 typedef struct _KIPCR
631 {
632 union
633 {
634 NT_TIB NtTib;
635 struct
636 {
637 struct _EXCEPTION_REGISTRATION_RECORD *Used_ExceptionList;
638 PVOID Used_StackBase;
639 PVOID PerfGlobalGroupMask;
640 PVOID TssCopy;
641 ULONG ContextSwitches;
642 KAFFINITY SetMemberCopy;
643 PVOID Used_Self;
644 };
645 };
646 struct _KPCR *Self;
647 struct _KPRCB *Prcb;
648 KIRQL Irql;
649 ULONG IRR;
650 ULONG IrrActive;
651 ULONG IDR;
652 PVOID KdVersionBlock;
653 PKIDTENTRY IDT;
654 PKGDTENTRY GDT;
655 struct _KTSS *TSS;
656 USHORT MajorVersion;
657 USHORT MinorVersion;
658 KAFFINITY SetMember;
659 ULONG StallScaleFactor;
660 UCHAR SpareUnused;
661 UCHAR Number;
662 UCHAR Reserved;
663 UCHAR L2CacheAssociativity;
664 ULONG VdmAlert;
665 ULONG KernelReserved[14];
666 ULONG SecondLevelCacheSize;
667 ULONG HalReserved[16];
668 ULONG InterruptMode;
669 UCHAR Spare1;
670 ULONG KernelReserved2[17];
671 KPRCB PrcbData;
672 } KIPCR, *PKIPCR;
673 #pragma pack(pop)
674
675 //
676 // TSS Definition
677 //
678 typedef struct _KiIoAccessMap
679 {
680 UCHAR DirectionMap[32];
681 UCHAR IoMap[8196];
682 } KIIO_ACCESS_MAP;
683
684 typedef struct _KTSS
685 {
686 USHORT Backlink;
687 USHORT Reserved0;
688 ULONG Esp0;
689 USHORT Ss0;
690 USHORT Reserved1;
691 ULONG NotUsed1[4];
692 ULONG CR3;
693 ULONG Eip;
694 ULONG EFlags;
695 ULONG Eax;
696 ULONG Ecx;
697 ULONG Edx;
698 ULONG Ebx;
699 ULONG Esp;
700 ULONG Ebp;
701 ULONG Esi;
702 ULONG Edi;
703 USHORT Es;
704 USHORT Reserved2;
705 USHORT Cs;
706 USHORT Reserved3;
707 USHORT Ss;
708 USHORT Reserved4;
709 USHORT Ds;
710 USHORT Reserved5;
711 USHORT Fs;
712 USHORT Reserved6;
713 USHORT Gs;
714 USHORT Reserved7;
715 USHORT LDT;
716 USHORT Reserved8;
717 USHORT Flags;
718 USHORT IoMapBase;
719 KIIO_ACCESS_MAP IoMaps[1];
720 UCHAR IntDirectionMap[32];
721 } KTSS, *PKTSS;
722
723 //
724 // i386 CPUs don't have exception frames
725 //
726 typedef struct _KEXCEPTION_FRAME KEXCEPTION_FRAME, *PKEXCEPTION_FRAME;
727 #endif
728 #endif