ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

ketypes.h
Go to the documentation of this file.
00001 /*++ NDK Version: 0098
00002 
00003 Copyright (c) Alex Ionescu.  All rights reserved.
00004 
00005 Header Name:
00006 
00007     ketypes.h (X86)
00008 
00009 Abstract:
00010 
00011     i386 Type definitions for the Kernel services.
00012 
00013 Author:
00014 
00015     Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
00016 
00017 --*/
00018 
00019 #ifndef _I386_KETYPES_H
00020 #define _I386_KETYPES_H
00021 
00022 //
00023 // Dependencies
00024 //
00025 
00026 //
00027 // KPCR Access for non-IA64 builds
00028 //
00029 #define K0IPCR                  ((ULONG_PTR)(KIP0PCRADDRESS))
00030 #define PCR                     ((KPCR *)K0IPCR)
00031 #if defined(CONFIG_SMP) || defined(NT_BUILD)
00032 #undef  KeGetPcr
00033 #define KeGetPcr()              ((KPCR *)__readfsdword(FIELD_OFFSET(KPCR, SelfPcr)))
00034 #endif
00035 
00036 //
00037 // Machine Types
00038 //
00039 #define MACHINE_TYPE_ISA        0x0000
00040 #define MACHINE_TYPE_EISA       0x0001
00041 #define MACHINE_TYPE_MCA        0x0002
00042 
00043 //
00044 // X86 80386 Segment Types
00045 //
00046 #define I386_TASK_GATE          0x5
00047 #define I386_TSS                0x9
00048 #define I386_ACTIVE_TSS         0xB
00049 #define I386_CALL_GATE          0xC
00050 #define I386_INTERRUPT_GATE     0xE
00051 #define I386_TRAP_GATE          0xF
00052 
00053 //
00054 // Selector Names
00055 //
00056 #define RPL_MASK                0x0003
00057 #define MODE_MASK               0x0001
00058 #define KGDT_R0_CODE            0x8
00059 #define KGDT_R0_DATA            0x10
00060 #define KGDT_R3_CODE            0x18
00061 #define KGDT_R3_DATA            0x20
00062 #define KGDT_TSS                0x28
00063 #define KGDT_R0_PCR             0x30
00064 #define KGDT_R3_TEB             0x38
00065 #define KGDT_LDT                0x48
00066 #define KGDT_DF_TSS             0x50
00067 #define KGDT_NMI_TSS            0x58
00068 
00069 //
00070 // Define the number of GDTs that can be queried by user mode
00071 //
00072 #define KGDT_NUMBER             10
00073 
00074 //
00075 // CR4
00076 //
00077 #define CR4_VME                 0x1
00078 #define CR4_PVI                 0x2
00079 #define CR4_TSD                 0x4
00080 #define CR4_DE                  0x8
00081 #define CR4_PSE                 0x10
00082 #define CR4_PAE                 0x20
00083 #define CR4_MCE                 0x40
00084 #define CR4_PGE                 0x80
00085 #define CR4_FXSR                0x200
00086 #define CR4_XMMEXCPT            0x400
00087 
00088 //
00089 // EFlags
00090 //
00091 #define EFLAGS_CF               0x01L
00092 #define EFLAGS_ZF               0x40L
00093 #define EFLAGS_TF               0x100L
00094 #define EFLAGS_INTERRUPT_MASK   0x200L
00095 #define EFLAGS_DF               0x400L
00096 #define EFLAGS_IOPL             0x3000L
00097 #define EFLAGS_NESTED_TASK      0x4000L
00098 #define EFLAGS_RF               0x10000
00099 #define EFLAGS_V86_MASK         0x20000
00100 #define EFLAGS_ALIGN_CHECK      0x40000
00101 #define EFLAGS_VIF              0x80000
00102 #define EFLAGS_VIP              0x100000
00103 #define EFLAGS_ID               0x200000
00104 #define EFLAGS_USER_SANITIZE    0x3F4DD7
00105 #define EFLAG_SIGN              0x8000
00106 #define EFLAG_ZERO              0x4000
00107 
00108 //
00109 // Legacy floating status word bit masks.
00110 //
00111 #define FSW_INVALID_OPERATION   0x1
00112 #define FSW_DENORMAL            0x2
00113 #define FSW_ZERO_DIVIDE         0x4
00114 #define FSW_OVERFLOW            0x8
00115 #define FSW_UNDERFLOW           0x10
00116 #define FSW_PRECISION           0x20
00117 #define FSW_STACK_FAULT         0x40
00118 
00119 //
00120 // IPI Types
00121 //
00122 #define IPI_APC                 1
00123 #define IPI_DPC                 2
00124 #define IPI_FREEZE              4
00125 #define IPI_PACKET_READY        8
00126 #define IPI_SYNCH_REQUEST       16
00127 
00128 //
00129 // PRCB Flags
00130 //
00131 #define PRCB_MAJOR_VERSION      1
00132 #define PRCB_BUILD_DEBUG        1
00133 #define PRCB_BUILD_UNIPROCESSOR 2
00134 
00135 //
00136 // HAL Variables
00137 //
00138 #define INITIAL_STALL_COUNT     100
00139 #ifdef PAE
00140 #define HYPERSPACE_BASE         0xc0400000
00141 #else
00142 #define HYPERSPACE_BASE         0xc0800000
00143 #endif
00144 #define MM_HAL_VA_START         0xFFC00000
00145 #define MM_HAL_VA_END           0xFFFFFFFF
00146 #define APIC_BASE               0xFFFE0000
00147 
00148 //
00149 // IOPM Definitions
00150 //
00151 #define IOPM_COUNT              1
00152 #define IOPM_SIZE               8192
00153 #define IOPM_FULL_SIZE          8196
00154 #define IO_ACCESS_MAP_NONE      0
00155 #define IOPM_DIRECTION_MAP_SIZE 32
00156 #define IOPM_OFFSET             FIELD_OFFSET(KTSS, IoMaps[0].IoMap)
00157 #define KiComputeIopmOffset(MapNumber)              \
00158     (MapNumber == IO_ACCESS_MAP_NONE) ?             \
00159         (USHORT)(sizeof(KTSS)) :                    \
00160         (USHORT)(FIELD_OFFSET(KTSS, IoMaps[MapNumber-1].IoMap))
00161 
00162 typedef UCHAR KIO_ACCESS_MAP[IOPM_SIZE];
00163 
00164 typedef KIO_ACCESS_MAP *PKIO_ACCESS_MAP;
00165 
00166 //
00167 // Size of the XMM register save area in the FXSAVE format
00168 //
00169 #define SIZE_OF_FX_REGISTERS    128
00170 
00171 //
00172 // Static Kernel-Mode Address start (use MM_KSEG0_BASE for actual)
00173 //
00174 #define KSEG0_BASE              0x80000000
00175 
00176 //
00177 // Synchronization-level IRQL
00178 //
00179 #ifndef CONFIG_SMP
00180 #define SYNCH_LEVEL             DISPATCH_LEVEL
00181 #else
00182 #if (NTDDI_VERSION < NTDDI_WS03)
00183 #define SYNCH_LEVEL             (IPI_LEVEL - 1)
00184 #else
00185 #define SYNCH_LEVEL             (IPI_LEVEL - 2)
00186 #endif
00187 #endif
00188 
00189 //
00190 // Trap Frame Definition
00191 //
00192 typedef struct _KTRAP_FRAME
00193 {
00194     ULONG DbgEbp;
00195     ULONG DbgEip;
00196     ULONG DbgArgMark;
00197     ULONG DbgArgPointer;
00198     ULONG TempSegCs;
00199     ULONG TempEsp;
00200     ULONG Dr0;
00201     ULONG Dr1;
00202     ULONG Dr2;
00203     ULONG Dr3;
00204     ULONG Dr6;
00205     ULONG Dr7;
00206     ULONG SegGs;
00207     ULONG SegEs;
00208     ULONG SegDs;
00209     ULONG Edx;
00210     ULONG Ecx;
00211     ULONG Eax;
00212     ULONG PreviousPreviousMode;
00213     struct _EXCEPTION_REGISTRATION_RECORD FAR *ExceptionList;
00214     ULONG SegFs;
00215     ULONG Edi;
00216     ULONG Esi;
00217     ULONG Ebx;
00218     ULONG Ebp;
00219     ULONG ErrCode;
00220     ULONG Eip;
00221     ULONG SegCs;
00222     ULONG EFlags;
00223     ULONG HardwareEsp;
00224     ULONG HardwareSegSs;
00225     ULONG V86Es;
00226     ULONG V86Ds;
00227     ULONG V86Fs;
00228     ULONG V86Gs;
00229 } KTRAP_FRAME, *PKTRAP_FRAME;
00230 
00231 //
00232 // Defines the Callback Stack Layout for User Mode Callbacks
00233 //
00234 typedef struct _KCALLOUT_FRAME
00235 {
00236     ULONG InitialStack;
00237     ULONG TrapFrame;
00238     ULONG CallbackStack;
00239     ULONG Edi;
00240     ULONG Esi;
00241     ULONG Ebx;
00242     ULONG Ebp;
00243     ULONG ReturnAddress;
00244     ULONG Result;
00245     ULONG ResultLength;
00246 } KCALLOUT_FRAME, *PKCALLOUT_FRAME;
00247 
00248 //
00249 // LDT Entry Definition
00250 //
00251 #ifndef _LDT_ENTRY_DEFINED
00252 #define _LDT_ENTRY_DEFINED
00253 typedef struct _LDT_ENTRY
00254 {
00255     USHORT LimitLow;
00256     USHORT BaseLow;
00257     union
00258     {
00259         struct
00260         {
00261             UCHAR BaseMid;
00262             UCHAR Flags1;
00263             UCHAR Flags2;
00264             UCHAR BaseHi;
00265         } Bytes;
00266         struct
00267         {
00268             ULONG BaseMid:8;
00269             ULONG Type:5;
00270             ULONG Dpl:2;
00271             ULONG Pres:1;
00272             ULONG LimitHi:4;
00273             ULONG Sys:1;
00274             ULONG Reserved_0:1;
00275             ULONG Default_Big:1;
00276             ULONG Granularity:1;
00277             ULONG BaseHi:8;
00278         } Bits;
00279     } HighWord;
00280 } LDT_ENTRY, *PLDT_ENTRY, *LPLDT_ENTRY;
00281 #endif
00282 
00283 //
00284 // GDT Entry Definition
00285 //
00286 typedef struct _KGDTENTRY
00287 {
00288     USHORT LimitLow;
00289     USHORT BaseLow;
00290     union
00291     {
00292         struct
00293         {
00294             UCHAR BaseMid;
00295             UCHAR Flags1;
00296             UCHAR Flags2;
00297             UCHAR BaseHi;
00298         } Bytes;
00299         struct
00300         {
00301             ULONG BaseMid:8;
00302             ULONG Type:5;
00303             ULONG Dpl:2;
00304             ULONG Pres:1;
00305             ULONG LimitHi:4;
00306             ULONG Sys:1;
00307             ULONG Reserved_0:1;
00308             ULONG Default_Big:1;
00309             ULONG Granularity:1;
00310             ULONG BaseHi:8;
00311         } Bits;
00312     } HighWord;
00313 } KGDTENTRY, *PKGDTENTRY;
00314 
00315 //
00316 // IDT Entry Access Definition
00317 //
00318 typedef struct _KIDT_ACCESS
00319 {
00320     union
00321     {
00322         struct
00323         {
00324             UCHAR Reserved;
00325             UCHAR SegmentType:4;
00326             UCHAR SystemSegmentFlag:1;
00327             UCHAR Dpl:2;
00328             UCHAR Present:1;
00329         };
00330         USHORT Value;
00331     };
00332 } KIDT_ACCESS, *PKIDT_ACCESS;
00333 
00334 //
00335 // IDT Entry Definition
00336 //
00337 typedef struct _KIDTENTRY
00338 {
00339     USHORT Offset;
00340     USHORT Selector;
00341     USHORT Access;
00342     USHORT ExtendedOffset;
00343 } KIDTENTRY, *PKIDTENTRY;
00344 
00345 typedef struct _DESCRIPTOR
00346 {
00347     USHORT Pad;
00348     USHORT Limit;
00349     ULONG Base;
00350 } KDESCRIPTOR, *PKDESCRIPTOR;
00351 
00352 #ifndef NTOS_MODE_USER
00353 //
00354 // Macro to get current KPRCB
00355 //
00356 FORCEINLINE
00357 struct _KPRCB *
00358 KeGetCurrentPrcb(VOID)
00359 {
00360     return (struct _KPRCB *)(ULONG_PTR)__readfsdword(FIELD_OFFSET(KPCR, Prcb));
00361 }
00362 
00363 //
00364 // FN/FX (FPU) Save Area Structures
00365 //
00366 typedef struct _FNSAVE_FORMAT
00367 {
00368     ULONG ControlWord;
00369     ULONG StatusWord;
00370     ULONG TagWord;
00371     ULONG ErrorOffset;
00372     ULONG ErrorSelector;
00373     ULONG DataOffset;
00374     ULONG DataSelector;
00375     UCHAR RegisterArea[80];
00376 } FNSAVE_FORMAT, *PFNSAVE_FORMAT;
00377 
00378 typedef struct _FXSAVE_FORMAT
00379 {
00380     USHORT ControlWord;
00381     USHORT StatusWord;
00382     USHORT TagWord;
00383     USHORT ErrorOpcode;
00384     ULONG ErrorOffset;
00385     ULONG ErrorSelector;
00386     ULONG DataOffset;
00387     ULONG DataSelector;
00388     ULONG MXCsr;
00389     ULONG MXCsrMask;
00390     UCHAR RegisterArea[SIZE_OF_FX_REGISTERS];
00391     UCHAR Reserved3[128];
00392     UCHAR Reserved4[224];
00393     UCHAR Align16Byte[8];
00394 } FXSAVE_FORMAT, *PFXSAVE_FORMAT;
00395 
00396 typedef struct _FX_SAVE_AREA
00397 {
00398     union
00399     {
00400         FNSAVE_FORMAT FnArea;
00401         FXSAVE_FORMAT FxArea;
00402     } U;
00403     ULONG NpxSavedCpu;
00404     ULONG Cr0NpxState;
00405 } FX_SAVE_AREA, *PFX_SAVE_AREA;
00406 
00407 //
00408 // Special Registers Structure (outside of CONTEXT)
00409 //
00410 typedef struct _KSPECIAL_REGISTERS
00411 {
00412     ULONG Cr0;
00413     ULONG Cr2;
00414     ULONG Cr3;
00415     ULONG Cr4;
00416     ULONG KernelDr0;
00417     ULONG KernelDr1;
00418     ULONG KernelDr2;
00419     ULONG KernelDr3;
00420     ULONG KernelDr6;
00421     ULONG KernelDr7;
00422     KDESCRIPTOR Gdtr;
00423     KDESCRIPTOR Idtr;
00424     USHORT Tr;
00425     USHORT Ldtr;
00426     ULONG Reserved[6];
00427 } KSPECIAL_REGISTERS, *PKSPECIAL_REGISTERS;
00428 
00429 //
00430 // Processor State Data
00431 //
00432 typedef struct _KPROCESSOR_STATE
00433 {
00434     CONTEXT ContextFrame;
00435     KSPECIAL_REGISTERS SpecialRegisters;
00436 } KPROCESSOR_STATE, *PKPROCESSOR_STATE;
00437 
00438 //
00439 // Processor Region Control Block
00440 //
00441 #pragma pack(push,4)
00442 typedef struct _KPRCB
00443 {
00444     USHORT MinorVersion;
00445     USHORT MajorVersion;
00446     struct _KTHREAD *CurrentThread;
00447     struct _KTHREAD *NextThread;
00448     struct _KTHREAD *IdleThread;
00449     UCHAR Number;
00450     UCHAR Reserved;
00451     USHORT BuildType;
00452     KAFFINITY SetMember;
00453     UCHAR CpuType;
00454     UCHAR CpuID;
00455     USHORT CpuStep;
00456     KPROCESSOR_STATE ProcessorState;
00457     ULONG KernelReserved[16];
00458     ULONG HalReserved[16];
00459 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00460     ULONG CFlushSize;
00461     UCHAR PrcbPad0[88];
00462 #else
00463     UCHAR PrcbPad0[92];
00464 #endif
00465     KSPIN_LOCK_QUEUE LockQueue[LockQueueMaximumLock];
00466     struct _KTHREAD *NpxThread;
00467     ULONG InterruptCount;
00468     ULONG KernelTime;
00469     ULONG UserTime;
00470     ULONG DpcTime;
00471     ULONG DebugDpcTime;
00472     ULONG InterruptTime;
00473     ULONG AdjustDpcThreshold;
00474     ULONG PageColor;
00475     UCHAR SkipTick;
00476     UCHAR DebuggerSavedIRQL;
00477 #if (NTDDI_VERSION >= NTDDI_WS03)
00478     UCHAR NodeColor;
00479 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00480     UCHAR PollSlot;
00481 #else
00482     UCHAR Spare1;
00483 #endif
00484     ULONG NodeShiftedColor;
00485 #else
00486     UCHAR Spare1[6];
00487 #endif
00488     struct _KNODE *ParentNode;
00489     ULONG MultiThreadProcessorSet;
00490     struct _KPRCB *MultiThreadSetMaster;
00491 #if (NTDDI_VERSION >= NTDDI_WS03)
00492     ULONG SecondaryColorMask;
00493 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00494     ULONG DpcTimeLimit;
00495 #else
00496     LONG Sleeping;
00497 #endif
00498 #else
00499     ULONG ThreadStartCount[2];
00500 #endif
00501     ULONG CcFastReadNoWait;
00502     ULONG CcFastReadWait;
00503     ULONG CcFastReadNotPossible;
00504     ULONG CcCopyReadNoWait;
00505     ULONG CcCopyReadWait;
00506     ULONG CcCopyReadNoWaitMiss;
00507 #if (NTDDI_VERSION < NTDDI_LONGHORN)
00508     ULONG KeAlignmentFixupCount;
00509 #endif
00510     ULONG SpareCounter0;
00511 #if (NTDDI_VERSION < NTDDI_LONGHORN)
00512     ULONG KeDcacheFlushCount;
00513     ULONG KeExceptionDispatchCount;
00514     ULONG KeFirstLevelTbFills;
00515     ULONG KeFloatingEmulationCount;
00516     ULONG KeIcacheFlushCount;
00517     ULONG KeSecondLevelTbFills;
00518     ULONG KeSystemCalls;
00519 #endif
00520     volatile ULONG IoReadOperationCount;
00521     volatile ULONG IoWriteOperationCount;
00522     volatile ULONG IoOtherOperationCount;
00523     LARGE_INTEGER IoReadTransferCount;
00524     LARGE_INTEGER IoWriteTransferCount;
00525     LARGE_INTEGER IoOtherTransferCount;
00526 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00527     ULONG CcFastMdlReadNoWait;
00528     ULONG CcFastMdlReadWait;
00529     ULONG CcFastMdlReadNotPossible;
00530     ULONG CcMapDataNoWait;
00531     ULONG CcMapDataWait;
00532     ULONG CcPinMappedDataCount;
00533     ULONG CcPinReadNoWait;
00534     ULONG CcPinReadWait;
00535     ULONG CcMdlReadNoWait;
00536     ULONG CcMdlReadWait;
00537     ULONG CcLazyWriteHotSpots;
00538     ULONG CcLazyWriteIos;
00539     ULONG CcLazyWritePages;
00540     ULONG CcDataFlushes;
00541     ULONG CcDataPages;
00542     ULONG CcLostDelayedWrites;
00543     ULONG CcFastReadResourceMiss;
00544     ULONG CcCopyReadWaitMiss;
00545     ULONG CcFastMdlReadResourceMiss;
00546     ULONG CcMapDataNoWaitMiss;
00547     ULONG CcMapDataWaitMiss;
00548     ULONG CcPinReadNoWaitMiss;
00549     ULONG CcPinReadWaitMiss;
00550     ULONG CcMdlReadNoWaitMiss;
00551     ULONG CcMdlReadWaitMiss;
00552     ULONG CcReadAheadIos;
00553     ULONG KeAlignmentFixupCount;
00554     ULONG KeExceptionDispatchCount;
00555     ULONG KeSystemCalls;
00556     ULONG PrcbPad1[3];
00557 #else
00558     ULONG SpareCounter1[8];
00559 #endif
00560     PP_LOOKASIDE_LIST PPLookasideList[16];
00561     PP_LOOKASIDE_LIST PPNPagedLookasideList[32];
00562     PP_LOOKASIDE_LIST PPPagedLookasideList[32];
00563     volatile ULONG PacketBarrier;
00564     volatile ULONG ReverseStall;
00565     PVOID IpiFrame;
00566     UCHAR PrcbPad2[52];
00567     volatile PVOID CurrentPacket[3];
00568     volatile ULONG TargetSet;
00569     volatile PKIPI_WORKER WorkerRoutine;
00570     volatile ULONG IpiFrozen;
00571     UCHAR PrcbPad3[40];
00572     volatile ULONG RequestSummary;
00573     volatile struct _KPRCB *SignalDone;
00574     UCHAR PrcbPad4[56];
00575     struct _KDPC_DATA DpcData[2];
00576     PVOID DpcStack;
00577     ULONG MaximumDpcQueueDepth;
00578     ULONG DpcRequestRate;
00579     ULONG MinimumDpcRate;
00580     volatile UCHAR DpcInterruptRequested;
00581     volatile UCHAR DpcThreadRequested;
00582     volatile UCHAR DpcRoutineActive;
00583     volatile UCHAR DpcThreadActive;
00584     ULONG PrcbLock;
00585     ULONG DpcLastCount;
00586     volatile ULONG TimerHand;
00587     volatile ULONG TimerRequest;
00588     PVOID DpcThread;
00589     KEVENT DpcEvent;
00590     UCHAR ThreadDpcEnable;
00591     volatile BOOLEAN QuantumEnd;
00592     UCHAR PrcbPad50;
00593     volatile UCHAR IdleSchedule;
00594     LONG DpcSetEventRequest;
00595 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00596     LONG Sleeping;
00597     ULONG PeriodicCount;
00598     ULONG PeriodicBias;
00599     UCHAR PrcbPad5[6];
00600 #else
00601     UCHAR PrcbPad5[18];
00602 #endif
00603     LONG TickOffset;
00604     KDPC CallDpc;
00605 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00606     LONG ClockKeepAlive;
00607     UCHAR ClockCheckSlot;
00608     UCHAR ClockPollCycle;
00609     UCHAR PrcbPad6[2];
00610     LONG DpcWatchdogPeriod;
00611     LONG DpcWatchDogCount;
00612     LONG ThreadWatchdogPeriod;
00613     LONG ThreadWatchDogCount;
00614     ULONG PrcbPad70[2];
00615 #else
00616     ULONG PrcbPad7[8];
00617 #endif
00618     LIST_ENTRY WaitListHead;
00619     ULONG ReadySummary;
00620     ULONG QueueIndex;
00621 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00622     SINGLE_LIST_ENTRY DeferredReadyListHead;
00623     ULONGLONG StartCycles;
00624     ULONGLONG CycleTime;
00625     ULONGLONG PrcbPad71[3];
00626     LIST_ENTRY DispatcherReadyListHead[32];
00627 #else
00628     LIST_ENTRY DispatcherReadyListHead[32];
00629     SINGLE_LIST_ENTRY DeferredReadyListHead;
00630     ULONG PrcbPad72[11];
00631 #endif
00632     PVOID ChainedInterruptList;
00633     LONG LookasideIrpFloat;
00634     volatile LONG MmPageFaultCount;
00635     volatile LONG MmCopyOnWriteCount;
00636     volatile LONG MmTransitionCount;
00637     volatile LONG MmCacheTransitionCount;
00638     volatile LONG MmDemandZeroCount;
00639     volatile LONG MmPageReadCount;
00640     volatile LONG MmPageReadIoCount;
00641     volatile LONG MmCacheReadCount;
00642     volatile LONG MmCacheIoCount;
00643     volatile LONG MmDirtyPagesWriteCount;
00644     volatile LONG MmDirtyWriteIoCount;
00645     volatile LONG MmMappedPagesWriteCount;
00646     volatile LONG MmMappedWriteIoCount;
00647 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00648     ULONG CachedCommit;
00649     ULONG CachedResidentAvailable;
00650     PVOID HyperPte;
00651     UCHAR CpuVendor;
00652     UCHAR PrcbPad9[3];
00653 #else
00654     ULONG SpareFields0[1];
00655 #endif
00656     CHAR VendorString[13];
00657     UCHAR InitialApicId;
00658     UCHAR LogicalProcessorsPerPhysicalProcessor;
00659     ULONG MHz;
00660     ULONG FeatureBits;
00661     LARGE_INTEGER UpdateSignature;
00662     volatile LARGE_INTEGER IsrTime;
00663     LARGE_INTEGER SpareField1;
00664     FX_SAVE_AREA NpxSaveArea;
00665     PROCESSOR_POWER_STATE PowerState;
00666 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00667     KDPC DpcWatchdogDoc;
00668     KTIMER DpcWatchdogTimer;
00669     PVOID WheaInfo;
00670     PVOID EtwSupport;
00671     SLIST_HEADER InterruptObjectPool;
00672     LARGE_INTEGER HyperCallPagePhysical;
00673     LARGE_INTEGER HyperCallPageVirtual;
00674     PVOID RateControl;
00675     CACHE_DESCRIPTOR Cache[5];
00676     ULONG CacheCount;
00677     ULONG CacheProcessorMask[5];
00678     UCHAR LogicalProcessorsPerCore;
00679     UCHAR PrcbPad8[3];
00680     ULONG PackageProcessorSet;
00681     ULONG CoreProcessorSet;
00682 #endif
00683 } KPRCB, *PKPRCB;
00684 
00685 //
00686 // Processor Control Region
00687 //
00688 typedef struct _KIPCR
00689 {
00690     union
00691     {
00692         NT_TIB NtTib;
00693         struct
00694         {
00695             struct _EXCEPTION_REGISTRATION_RECORD *Used_ExceptionList;
00696             PVOID Used_StackBase;
00697             PVOID PerfGlobalGroupMask;
00698             PVOID TssCopy;
00699             ULONG ContextSwitches;
00700             KAFFINITY SetMemberCopy;
00701             PVOID Used_Self;
00702         };
00703     };
00704     struct _KPCR *Self;
00705     struct _KPRCB *Prcb;
00706     KIRQL Irql;
00707     ULONG IRR;
00708     ULONG IrrActive;
00709     ULONG IDR;
00710     PVOID KdVersionBlock;
00711     PKIDTENTRY IDT;
00712     PKGDTENTRY GDT;
00713     struct _KTSS *TSS;
00714     USHORT MajorVersion;
00715     USHORT MinorVersion;
00716     KAFFINITY SetMember;
00717     ULONG StallScaleFactor;
00718     UCHAR SpareUnused;
00719     UCHAR Number;
00720     UCHAR Spare0;
00721     UCHAR SecondLevelCacheAssociativity;
00722     ULONG VdmAlert;
00723     ULONG KernelReserved[14];
00724     ULONG SecondLevelCacheSize;
00725     ULONG HalReserved[16];
00726     ULONG InterruptMode;
00727     UCHAR Spare1;
00728     ULONG KernelReserved2[17];
00729     KPRCB PrcbData;
00730 } KIPCR, *PKIPCR;
00731 #pragma pack(pop)
00732 
00733 //
00734 // TSS Definition
00735 //
00736 typedef struct _KiIoAccessMap
00737 {
00738     UCHAR DirectionMap[IOPM_DIRECTION_MAP_SIZE];
00739     UCHAR IoMap[IOPM_FULL_SIZE];
00740 } KIIO_ACCESS_MAP;
00741 
00742 typedef struct _KTSS
00743 {
00744     USHORT Backlink;
00745     USHORT Reserved0;
00746     ULONG Esp0;
00747     USHORT Ss0;
00748     USHORT Reserved1;
00749     ULONG NotUsed1[4];
00750     ULONG CR3;
00751     ULONG Eip;
00752     ULONG EFlags;
00753     ULONG Eax;
00754     ULONG Ecx;
00755     ULONG Edx;
00756     ULONG Ebx;
00757     ULONG Esp;
00758     ULONG Ebp;
00759     ULONG Esi;
00760     ULONG Edi;
00761     USHORT Es;
00762     USHORT Reserved2;
00763     USHORT Cs;
00764     USHORT Reserved3;
00765     USHORT Ss;
00766     USHORT Reserved4;
00767     USHORT Ds;
00768     USHORT Reserved5;
00769     USHORT Fs;
00770     USHORT Reserved6;
00771     USHORT Gs;
00772     USHORT Reserved7;
00773     USHORT LDT;
00774     USHORT Reserved8;
00775     USHORT Flags;
00776     USHORT IoMapBase;
00777     KIIO_ACCESS_MAP IoMaps[IOPM_COUNT];
00778     UCHAR IntDirectionMap[IOPM_DIRECTION_MAP_SIZE];
00779 } KTSS, *PKTSS;
00780 
00781 //
00782 // i386 CPUs don't have exception frames
00783 //
00784 typedef struct _KEXCEPTION_FRAME KEXCEPTION_FRAME, *PKEXCEPTION_FRAME;
00785 #endif
00786 #endif

Generated on Sun May 27 2012 04:30:47 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.