- add some definitions to winddk.h
[reactos.git] / reactos / include / ndk / amd64 / ketypes.h
1 /*++ NDK Version: 0098
2
3 Copyright (c) Alex Ionescu. All rights reserved.
4 Copyright (c) Timo Kreuzer. All rights reserved.
5
6 Header Name:
7
8 ketypes.h (AMD64)
9
10 Abstract:
11
12 amd64 Type definitions for the Kernel services.
13
14 Author:
15
16 Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
17 Timo Kreuzer (timo.kreuzer@reactos.org) - Updated - 30-Jul-2008
18
19 --*/
20
21 #ifndef _AMD64_KETYPES_H
22 #define _AMD64_KETYPES_H
23
24 //
25 // Dependencies
26 //
27
28 //
29 // KPCR Access for non-IA64 builds
30 //
31 //#define K0IPCR ((ULONG_PTR)(KIP0PCRADDRESS))
32 //#define PCR ((volatile KPCR * const)K0IPCR)
33 #define PCR 0 // HACK
34 //#if defined(CONFIG_SMP) || defined(NT_BUILD)
35 //#undef KeGetPcr
36 //#define KeGetPcr() ((volatile KPCR * const)__readfsdword(0x1C))
37 //#endif
38
39 //
40 // Machine Types
41 //
42 #define MACHINE_TYPE_ISA 0x0000
43 #define MACHINE_TYPE_EISA 0x0001
44 #define MACHINE_TYPE_MCA 0x0002
45
46 //
47 // X86 80386 Segment Types
48 //
49 #define I386_TASK_GATE 0x5
50 #define I386_TSS 0x9
51 #define I386_ACTIVE_TSS 0xB
52 #define I386_CALL_GATE 0xC
53 #define I386_INTERRUPT_GATE 0xE
54 #define I386_TRAP_GATE 0xF
55
56 //
57 // Selector Names
58 //
59 #define RPL_MASK 0x0003
60 #define MODE_MASK 0x0001
61 #define KGDT_R0_CODE 0x8
62 #define KGDT_R0_DATA 0x10
63 #define KGDT_R3_CODE 0x18
64 #define KGDT_R3_DATA 0x20
65 #define KGDT_TSS 0x28
66 #define KGDT_R0_PCR 0x30
67 #define KGDT_R3_TEB 0x38
68 #define KGDT_LDT 0x48
69 #define KGDT_DF_TSS 0x50
70 #define KGDT_NMI_TSS 0x58
71
72 //
73 // CR4
74 //
75 #define CR4_VME 0x1
76 #define CR4_PVI 0x2
77 #define CR4_TSD 0x4
78 #define CR4_DE 0x8
79 #define CR4_PSE 0x10
80 #define CR4_PAE 0x20
81 #define CR4_MCE 0x40
82 #define CR4_PGE 0x80
83 #define CR4_FXSR 0x200
84 #define CR4_XMMEXCPT 0x400
85
86 //
87 // EFlags
88 //
89 #define EFLAGS_CF 0x01L
90 #define EFLAGS_ZF 0x40L
91 #define EFLAGS_TF 0x100L
92 #define EFLAGS_INTERRUPT_MASK 0x200L
93 #define EFLAGS_DF 0x400L
94 #define EFLAGS_NESTED_TASK 0x4000L
95 #define EFLAGS_V86_MASK 0x20000
96 #define EFLAGS_ALIGN_CHECK 0x40000
97 #define EFLAGS_VIF 0x80000
98 #define EFLAGS_VIP 0x100000
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 0xfffff80000000000ULL
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)__readgsqword(FIELD_OFFSET(KPCR, Prcb));
303 return 0;
304 }
305
306 //
307 // FN/FX (FPU) Save Area Structures
308 //
309 typedef struct _FNSAVE_FORMAT
310 {
311 ULONG ControlWord;
312 ULONG StatusWord;
313 ULONG TagWord;
314 ULONG ErrorOffset;
315 ULONG ErrorSelector;
316 ULONG DataOffset;
317 ULONG DataSelector;
318 UCHAR RegisterArea[80];
319 } FNSAVE_FORMAT, *PFNSAVE_FORMAT;
320
321 typedef struct _FXSAVE_FORMAT
322 {
323 USHORT ControlWord;
324 USHORT StatusWord;
325 USHORT TagWord;
326 USHORT ErrorOpcode;
327 ULONG ErrorOffset;
328 ULONG ErrorSelector;
329 ULONG DataOffset;
330 ULONG DataSelector;
331 ULONG MXCsr;
332 ULONG MXCsrMask;
333 UCHAR RegisterArea[128];
334 UCHAR Reserved3[128];
335 UCHAR Reserved4[224];
336 UCHAR Align16Byte[8];
337 } FXSAVE_FORMAT, *PFXSAVE_FORMAT;
338
339 typedef struct _FX_SAVE_AREA
340 {
341 union
342 {
343 FNSAVE_FORMAT FnArea;
344 FXSAVE_FORMAT FxArea;
345 } U;
346 ULONG NpxSavedCpu;
347 ULONG Cr0NpxState;
348 } FX_SAVE_AREA, *PFX_SAVE_AREA;
349
350 //
351 // Special Registers Structure (outside of CONTEXT)
352 //
353 typedef struct _KSPECIAL_REGISTERS
354 {
355 ULONG Cr0;
356 ULONG Cr2;
357 ULONG Cr3;
358 ULONG Cr4;
359 ULONG KernelDr0;
360 ULONG KernelDr1;
361 ULONG KernelDr2;
362 ULONG KernelDr3;
363 ULONG KernelDr6;
364 ULONG KernelDr7;
365 KDESCRIPTOR Gdtr;
366 KDESCRIPTOR Idtr;
367 USHORT Tr;
368 USHORT Ldtr;
369 ULONG Reserved[6];
370 } KSPECIAL_REGISTERS, *PKSPECIAL_REGISTERS;
371
372 //
373 // Processor State Data
374 //
375 typedef struct _KPROCESSOR_STATE
376 {
377 CONTEXT ContextFrame;
378 KSPECIAL_REGISTERS SpecialRegisters;
379 } KPROCESSOR_STATE, *PKPROCESSOR_STATE;
380
381 //
382 // Processor Region Control Block
383 //
384 #pragma pack(push,4)
385 typedef struct _KPRCB
386 {
387 USHORT MinorVersion;
388 USHORT MajorVersion;
389 struct _KTHREAD *CurrentThread;
390 struct _KTHREAD *NextThread;
391 struct _KTHREAD *IdleThread;
392 UCHAR Number;
393 UCHAR Reserved;
394 USHORT BuildType;
395 KAFFINITY SetMember;
396 UCHAR CpuType;
397 UCHAR CpuID;
398 USHORT CpuStep;
399 KPROCESSOR_STATE ProcessorState;
400 ULONG KernelReserved[16];
401 ULONG HalReserved[16];
402 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
403 ULONG CFlushSize;
404 UCHAR PrcbPad0[88];
405 #else
406 UCHAR PrcbPad0[92];
407 #endif
408 KSPIN_LOCK_QUEUE LockQueue[LockQueueMaximumLock];
409 struct _KTHREAD *NpxThread;
410 ULONG InterruptCount;
411 ULONG KernelTime;
412 ULONG UserTime;
413 ULONG DpcTime;
414 ULONG DebugDpcTime;
415 ULONG InterruptTime;
416 ULONG AdjustDpcThreshold;
417 ULONG PageColor;
418 UCHAR SkipTick;
419 UCHAR DebuggerSavedIRQL;
420 #if (NTDDI_VERSION >= NTDDI_WS03)
421 UCHAR NodeColor;
422 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
423 UCHAR PollSlot;
424 #else
425 UCHAR Spare1;
426 #endif
427 ULONG NodeShiftedColor;
428 #else
429 UCHAR Spare1[6];
430 #endif
431 struct _KNODE *ParentNode;
432 ULONG MultiThreadProcessorSet;
433 struct _KPRCB *MultiThreadSetMaster;
434 #if (NTDDI_VERSION >= NTDDI_WS03)
435 ULONG SecondaryColorMask;
436 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
437 ULONG DpcTimeLimit;
438 #else
439 LONG Sleeping;
440 #endif
441 #else
442 ULONG ThreadStartCount[2];
443 #endif
444 ULONG CcFastReadNoWait;
445 ULONG CcFastReadWait;
446 ULONG CcFastReadNotPossible;
447 ULONG CcCopyReadNoWait;
448 ULONG CcCopyReadWait;
449 ULONG CcCopyReadNoWaitMiss;
450 #if (NTDDI_VERSION < NTDDI_LONGHORN)
451 ULONG KeAlignmentFixupCount;
452 #endif
453 ULONG SpareCounter0;
454 #if (NTDDI_VERSION < NTDDI_LONGHORN)
455 ULONG KeDcacheFlushCount;
456 ULONG KeExceptionDispatchCount;
457 ULONG KeFirstLevelTbFills;
458 ULONG KeFloatingEmulationCount;
459 ULONG KeIcacheFlushCount;
460 ULONG KeSecondLevelTbFills;
461 ULONG KeSystemCalls;
462 #endif
463 volatile ULONG IoReadOperationCount;
464 volatile ULONG IoWriteOperationCount;
465 volatile ULONG IoOtherOperationCount;
466 LARGE_INTEGER IoReadTransferCount;
467 LARGE_INTEGER IoWriteTransferCount;
468 LARGE_INTEGER IoOtherTransferCount;
469 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
470 ULONG CcFastMdlReadNoWait;
471 ULONG CcFastMdlReadWait;
472 ULONG CcFastMdlReadNotPossible;
473 ULONG CcMapDataNoWait;
474 ULONG CcMapDataWait;
475 ULONG CcPinMappedDataCount;
476 ULONG CcPinReadNoWait;
477 ULONG CcPinReadWait;
478 ULONG CcMdlReadNoWait;
479 ULONG CcMdlReadWait;
480 ULONG CcLazyWriteHotSpots;
481 ULONG CcLazyWriteIos;
482 ULONG CcLazyWritePages;
483 ULONG CcDataFlushes;
484 ULONG CcDataPages;
485 ULONG CcLostDelayedWrites;
486 ULONG CcFastReadResourceMiss;
487 ULONG CcCopyReadWaitMiss;
488 ULONG CcFastMdlReadResourceMiss;
489 ULONG CcMapDataNoWaitMiss;
490 ULONG CcMapDataWaitMiss;
491 ULONG CcPinReadNoWaitMiss;
492 ULONG CcPinReadWaitMiss;
493 ULONG CcMdlReadNoWaitMiss;
494 ULONG CcMdlReadWaitMiss;
495 ULONG CcReadAheadIos;
496 ULONG KeAlignmentFixupCount;
497 ULONG KeExceptionDispatchCount;
498 ULONG KeSystemCalls;
499 ULONG PrcbPad1[3];
500 #else
501 ULONG SpareCounter1[8];
502 #endif
503 PP_LOOKASIDE_LIST PPLookasideList[16];
504 PP_LOOKASIDE_LIST PPNPagedLookasideList[32];
505 PP_LOOKASIDE_LIST PPPagedLookasideList[32];
506 volatile ULONG PacketBarrier;
507 volatile ULONG ReverseStall;
508 PVOID IpiFrame;
509 UCHAR PrcbPad2[52];
510 volatile PVOID CurrentPacket[3];
511 volatile ULONG TargetSet;
512 volatile PKIPI_WORKER WorkerRoutine;
513 volatile ULONG IpiFrozen;
514 UCHAR PrcbPad3[40];
515 volatile ULONG RequestSummary;
516 volatile struct _KPRCB *SignalDone;
517 UCHAR PrcbPad4[56];
518 struct _KDPC_DATA DpcData[2];
519 PVOID DpcStack;
520 ULONG MaximumDpcQueueDepth;
521 ULONG DpcRequestRate;
522 ULONG MinimumDpcRate;
523 volatile UCHAR DpcInterruptRequested;
524 volatile UCHAR DpcThreadRequested;
525 volatile UCHAR DpcRoutineActive;
526 volatile UCHAR DpcThreadActive;
527 ULONG PrcbLock;
528 ULONG DpcLastCount;
529 volatile ULONG TimerHand;
530 volatile ULONG TimerRequest;
531 PVOID DpcThread;
532 KEVENT DpcEvent;
533 UCHAR ThreadDpcEnable;
534 volatile BOOLEAN QuantumEnd;
535 UCHAR PrcbPad50;
536 volatile UCHAR IdleSchedule;
537 LONG DpcSetEventRequest;
538 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
539 LONG Sleeping;
540 ULONG PeriodicCount;
541 ULONG PeriodicBias;
542 UCHAR PrcbPad5[6];
543 #else
544 UCHAR PrcbPad5[18];
545 #endif
546 LONG TickOffset;
547 KDPC CallDpc;
548 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
549 LONG ClockKeepAlive;
550 UCHAR ClockCheckSlot;
551 UCHAR ClockPollCycle;
552 UCHAR PrcbPad6[2];
553 LONG DpcWatchdogPeriod;
554 LONG DpcWatchDogCount;
555 LONG ThreadWatchdogPeriod;
556 LONG ThreadWatchDogCount;
557 ULONG PrcbPad70[2];
558 #else
559 ULONG PrcbPad7[8];
560 #endif
561 LIST_ENTRY WaitListHead;
562 ULONG ReadySummary;
563 ULONG QueueIndex;
564 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
565 SINGLE_LIST_ENTRY DeferredReadyListHead;
566 ULONGLONG StartCycles;
567 ULONGLONG CycleTime;
568 ULONGLONG PrcbPad71[3];
569 LIST_ENTRY DispatcherReadyListHead[32];
570 #else
571 LIST_ENTRY DispatcherReadyListHead[32];
572 SINGLE_LIST_ENTRY DeferredReadyListHead;
573 ULONG PrcbPad72[11];
574 #endif
575 PVOID ChainedInterruptList;
576 LONG LookasideIrpFloat;
577 volatile LONG MmPageFaultCount;
578 volatile LONG MmCopyOnWriteCount;
579 volatile LONG MmTransitionCount;
580 volatile LONG MmCacheTransitionCount;
581 volatile LONG MmDemandZeroCount;
582 volatile LONG MmPageReadCount;
583 volatile LONG MmPageReadIoCount;
584 volatile LONG MmCacheReadCount;
585 volatile LONG MmCacheIoCount;
586 volatile LONG MmDirtyPagesWriteCount;
587 volatile LONG MmDirtyWriteIoCount;
588 volatile LONG MmMappedPagesWriteCount;
589 volatile LONG MmMappedWriteIoCount;
590 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
591 ULONG CachedCommit;
592 ULONG CachedResidentAvailable;
593 PVOID HyperPte;
594 UCHAR CpuVendor;
595 UCHAR PrcbPad9[3];
596 #else
597 ULONG SpareFields0[1];
598 #endif
599 CHAR VendorString[13];
600 UCHAR InitialApicId;
601 UCHAR LogicalProcessorsPerPhysicalProcessor;
602 ULONG MHz;
603 ULONG FeatureBits;
604 LARGE_INTEGER UpdateSignature;
605 volatile LARGE_INTEGER IsrTime;
606 LARGE_INTEGER SpareField1;
607 FX_SAVE_AREA NpxSaveArea;
608 PROCESSOR_POWER_STATE PowerState;
609 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
610 KDPC DpcWatchdogDoc;
611 KTIMER DpcWatchdogTimer;
612 PVOID WheaInfo;
613 PVOID EtwSupport;
614 SLIST_HEADER InterruptObjectPool;
615 LARGE_INTEGER HyperCallPagePhysical;
616 LARGE_INTEGER HyperCallPageVirtual;
617 PVOID RateControl;
618 CACHE_DESCRIPTOR Cache[5];
619 ULONG CacheCount;
620 ULONG CacheProcessorMask[5];
621 UCHAR LogicalProcessorsPerCore;
622 UCHAR PrcbPad8[3];
623 ULONG PackageProcessorSet;
624 ULONG CoreProcessorSet;
625 #endif
626 } KPRCB, *PKPRCB;
627
628 //
629 // Processor Control Region
630 //
631 typedef struct _KIPCR
632 {
633 union
634 {
635 NT_TIB NtTib;
636 struct
637 {
638 struct _EXCEPTION_REGISTRATION_RECORD *Used_ExceptionList;
639 PVOID Used_StackBase;
640 PVOID PerfGlobalGroupMask;
641 PVOID TssCopy;
642 ULONG ContextSwitches;
643 KAFFINITY SetMemberCopy;
644 PVOID Used_Self;
645 };
646 };
647 struct _KPCR *Self;
648 struct _KPRCB *Prcb;
649 KIRQL Irql;
650 ULONG IRR;
651 ULONG IrrActive;
652 ULONG IDR;
653 PVOID KdVersionBlock;
654 PKIDTENTRY IDT;
655 PKGDTENTRY GDT;
656 struct _KTSS *TSS;
657 USHORT MajorVersion;
658 USHORT MinorVersion;
659 KAFFINITY SetMember;
660 ULONG StallScaleFactor;
661 UCHAR SparedUnused;
662 UCHAR Number;
663 UCHAR Reserved;
664 UCHAR L2CacheAssociativity;
665 ULONG VdmAlert;
666 ULONG KernelReserved[14];
667 ULONG SecondLevelCacheSize;
668 ULONG HalReserved[16];
669 ULONG InterruptMode;
670 UCHAR Spare1;
671 ULONG KernelReserved2[17];
672 KPRCB PrcbData;
673 } KIPCR, *PKIPCR;
674 #pragma pack(pop)
675
676 //
677 // TSS Definition
678 //
679 typedef struct _KiIoAccessMap
680 {
681 UCHAR DirectionMap[32];
682 UCHAR IoMap[8196];
683 } KIIO_ACCESS_MAP;
684
685 typedef struct _KTSS
686 {
687 USHORT Backlink;
688 USHORT Reserved0;
689 ULONG Esp0;
690 USHORT Ss0;
691 USHORT Reserved1;
692 ULONG NotUsed1[4];
693 ULONG CR3;
694 ULONG Eip;
695 ULONG EFlags;
696 ULONG Eax;
697 ULONG Ecx;
698 ULONG Edx;
699 ULONG Ebx;
700 ULONG Esp;
701 ULONG Ebp;
702 ULONG Esi;
703 ULONG Edi;
704 USHORT Es;
705 USHORT Reserved2;
706 USHORT Cs;
707 USHORT Reserved3;
708 USHORT Ss;
709 USHORT Reserved4;
710 USHORT Ds;
711 USHORT Reserved5;
712 USHORT Fs;
713 USHORT Reserved6;
714 USHORT Gs;
715 USHORT Reserved7;
716 USHORT LDT;
717 USHORT Reserved8;
718 USHORT Flags;
719 USHORT IoMapBase;
720 KIIO_ACCESS_MAP IoMaps[1];
721 UCHAR IntDirectionMap[32];
722 } KTSS, *PKTSS;
723
724 //
725 // i386 CPUs don't have exception frames
726 //
727 typedef struct _KEXCEPTION_FRAME KEXCEPTION_FRAME, *PKEXCEPTION_FRAME;
728 #endif
729 #endif