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 (AMD64)
00008 
00009 Abstract:
00010 
00011     amd64 Type definitions for the Kernel services.
00012 
00013 Author:
00014 
00015     Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
00016     Timo Kreuzer (timo.kreuzer@reactos.org) - Updated - 14-Aug-2008
00017 
00018 --*/
00019 
00020 #ifndef _AMD64_KETYPES_H
00021 #define _AMD64_KETYPES_H
00022 
00023 //
00024 // Dependencies
00025 //
00026 
00027 //
00028 // KPCR Access for non-IA64 builds
00029 //
00030 //#define K0IPCR                  ((ULONG_PTR)(KIP0PCRADDRESS))
00031 //#define PCR                     ((volatile KPCR * const)K0IPCR)
00032 #define PCR ((volatile KPCR * const)__readgsqword(FIELD_OFFSET(KPCR, Self)))
00033 //#if defined(CONFIG_SMP) || defined(NT_BUILD)
00034 //#undef  KeGetPcr
00035 //#define KeGetPcr()              ((volatile KPCR * const)__readfsdword(0x1C))
00036 //#endif
00037 
00038 //
00039 // Machine Types
00040 //
00041 #define MACHINE_TYPE_ISA        0x0000
00042 #define MACHINE_TYPE_EISA       0x0001
00043 #define MACHINE_TYPE_MCA        0x0002
00044 
00045 //
00046 // X86 80386 Segment Types
00047 //
00048 #define I386_TASK_GATE          0x5
00049 #define I386_TSS                0x9
00050 #define I386_ACTIVE_TSS         0xB
00051 #define I386_CALL_GATE          0xC
00052 #define I386_INTERRUPT_GATE     0xE
00053 #define I386_TRAP_GATE          0xF
00054 
00055 //
00056 // Selector Names
00057 //
00058 #define RPL_MASK                0x0003
00059 #define MODE_MASK               0x0001
00060 #define KGDT64_NULL             0x0000
00061 #define KGDT64_R0_CODE          0x0010
00062 #define KGDT64_R0_DATA          0x0018
00063 #define KGDT64_R3_CMCODE        0x0020
00064 #define KGDT64_R3_DATA          0x0028
00065 #define KGDT64_R3_CODE          0x0030
00066 #define KGDT64_SYS_TSS          0x0040
00067 #define KGDT64_R3_CMTEB         0x0050
00068 
00069 
00070 //
00071 // CR4
00072 //
00073 #define CR4_VME                 0x1
00074 #define CR4_PVI                 0x2
00075 #define CR4_TSD                 0x4
00076 #define CR4_DE                  0x8
00077 #define CR4_PSE                 0x10
00078 #define CR4_PAE                 0x20
00079 #define CR4_MCE                 0x40
00080 #define CR4_PGE                 0x80
00081 #define CR4_FXSR                0x200
00082 #define CR4_XMMEXCPT            0x400
00083 #define CR4_CHANNELS            0x800
00084 
00085 //
00086 // EFlags
00087 //
00088 #define EFLAGS_CF               0x01L
00089 #define EFLAGS_ZF               0x40L
00090 #define EFLAGS_TF               0x100L
00091 #define EFLAGS_INTERRUPT_MASK   0x200L
00092 #define EFLAGS_DF               0x400L
00093 #define EFLAGS_NESTED_TASK      0x4000L
00094 #define EFLAGS_V86_MASK         0x20000
00095 #define EFLAGS_ALIGN_CHECK      0x40000
00096 #define EFLAGS_VIF              0x80000
00097 #define EFLAGS_VIP              0x100000
00098 #define EFLAGS_USER_SANITIZE    0x3F4DD7
00099 #define EFLAG_SIGN              0x8000
00100 #define EFLAG_ZERO              0x4000
00101 #define EFLAGS_TF_MASK          0x0100
00102 #define EFLAGS_TF_SHIFT         0x0008
00103 #define EFLAGS_ID_MASK          0x200000
00104 #define EFLAGS_IF_MASK          0x0200
00105 #define EFLAGS_IF_SHIFT         0x0009
00106 
00107 //
00108 // Machine Specific Registers
00109 //
00110 #define MSR_MCG_STATUS          0x017A
00111 #define MSR_DEGUG_CTL           0x01D9
00112 #define MSR_LAST_BRANCH_FROM    0x01DB
00113 #define MSR_LAST_BRANCH_TO      0x01DC
00114 #define MSR_LAST_EXCEPTION_FROM 0x01DD
00115 #define MSR_LAST_EXCEPTION_TO   0x01DE
00116 #define MSR_PAT                 0x0277
00117 #define MSR_AMD_ACCESS      0x9C5A203A
00118 #define MSR_EFER            0xC0000080
00119 #define MSR_STAR            0xC0000081
00120 #define MSR_LSTAR           0xC0000082
00121 #define MSR_CSTAR           0xC0000083
00122 #define MSR_SYSCALL_MASK    0xC0000084
00123 #define MSR_FS_BASE         0xC0000100
00124 #define MSR_GS_BASE         0xC0000101
00125 #define MSR_GS_SWAP         0xC0000102
00126 
00127 //
00128 // Flags in MSR_EFER
00129 //
00130 #define MSR_LMA                 0x0400
00131 #define MSR_LME                 0x0100
00132 #define MSR_SCE                 0x0001
00133 #define MSR_NXE                 0x0800
00134 
00135 //
00136 // IPI Types
00137 //
00138 #define IPI_APC                 1
00139 #define IPI_DPC                 2
00140 #define IPI_FREEZE              4
00141 #define IPI_PACKET_READY        8
00142 #define IPI_SYNCH_REQUEST       16
00143 
00144 //
00145 // PRCB Flags
00146 //
00147 #define PRCB_MAJOR_VERSION      1
00148 #define PRCB_BUILD_DEBUG        1
00149 #define PRCB_BUILD_UNIPROCESSOR 2
00150 
00151 //
00152 // Service Table
00153 //
00154 #define NUMBER_SERVICE_TABLES 2
00155 #define SERVICE_NUMBER_MASK 0xFFF
00156 #define SERVICE_TABLE_SHIFT 7
00157 #define SERVICE_TABLE_MASK 0x20
00158 #define SERVICE_TABLE_TEST 0x20
00159 
00160 //
00161 // HAL Variables
00162 //
00163 #define INITIAL_STALL_COUNT     100
00164 #define HYPERSPACE_BASE         0xfffff70000000000ULL
00165 #define MM_HAL_VA_START         0xFFFFFFFFFFC00000ULL /* This is Vista+ */
00166 #define MM_HAL_VA_END           0xFFFFFFFFFFFFFFFFULL
00167 #define APIC_BASE               0xFFFFFFFFFFFE0000ULL
00168 
00169 //
00170 // IOPM Definitions
00171 //
00172 #define IO_ACCESS_MAP_NONE      0
00173 #define IOPM_OFFSET             FIELD_OFFSET(KTSS, IoMaps[0].IoMap)
00174 #define KiComputeIopmOffset(MapNumber)              \
00175     (MapNumber == IO_ACCESS_MAP_NONE) ?             \
00176         (USHORT)(sizeof(KTSS)) :                    \
00177         (USHORT)(FIELD_OFFSET(KTSS, IoMaps[MapNumber-1].IoMap))
00178 
00179 //
00180 // Static Kernel-Mode Address start (use MM_KSEG0_BASE for actual)
00181 //
00182 #define KSEG0_BASE 0xfffff80000000000ULL
00183 
00184 //
00185 // Synchronization-level IRQL
00186 //
00187 #define SYNCH_LEVEL 12
00188 
00189 #define NMI_STACK_SIZE 0x2000
00190 
00191 //
00192 // Trap Frame Definition
00193 //
00194 typedef struct _KTRAP_FRAME
00195 {
00196     UINT64 P1Home;
00197     UINT64 P2Home;
00198     UINT64 P3Home;
00199     UINT64 P4Home;
00200     UINT64 P5;
00201     CHAR PreviousMode;
00202     UCHAR PreviousIrql;
00203     UCHAR FaultIndicator;
00204     UCHAR ExceptionActive;
00205     ULONG MxCsr;
00206     UINT64 Rax;
00207     UINT64 Rcx;
00208     UINT64 Rdx;
00209     UINT64 R8;
00210     UINT64 R9;
00211     UINT64 R10;
00212     UINT64 R11;
00213     union
00214     {
00215         UINT64 GsBase;
00216         UINT64 GsSwap;
00217     };
00218     M128A Xmm0;
00219     M128A Xmm1;
00220     M128A Xmm2;
00221     M128A Xmm3;
00222     M128A Xmm4;
00223     M128A Xmm5;
00224     union
00225     {
00226         UINT64 FaultAddress;
00227         UINT64 ContextRecord;
00228         UINT64 TimeStampCKCL;
00229     };
00230     UINT64 Dr0;
00231     UINT64 Dr1;
00232     UINT64 Dr2;
00233     UINT64 Dr3;
00234     UINT64 Dr6;
00235     UINT64 Dr7;
00236     union
00237     {
00238         struct
00239         {
00240             UINT64 DebugControl;
00241             UINT64 LastBranchToRip;
00242             UINT64 LastBranchFromRip;
00243             UINT64 LastExceptionToRip;
00244             UINT64 LastExceptionFromRip;
00245         };
00246         struct
00247         {
00248             UINT64 LastBranchControl;
00249             ULONG LastBranchMSR;
00250         };
00251     };
00252     USHORT SegDs;
00253     USHORT SegEs;
00254     USHORT SegFs;
00255     USHORT SegGs;
00256     UINT64 TrapFrame;
00257     UINT64 Rbx;
00258     UINT64 Rdi;
00259     UINT64 Rsi;
00260     UINT64 Rbp;
00261     union
00262     {
00263         UINT64 ErrorCode;
00264         UINT64 ExceptionFrame;
00265         UINT64 TimeStampKlog;
00266     };
00267     UINT64 Rip;
00268     USHORT SegCs;
00269     UCHAR Fill0;
00270     UCHAR Logging;
00271     USHORT Fill1[2];
00272     ULONG EFlags;
00273     ULONG Fill2;
00274     UINT64 Rsp;
00275     USHORT SegSs;
00276     USHORT Fill3;
00277     LONG CodePatchCycle;
00278 } KTRAP_FRAME, *PKTRAP_FRAME;
00279 
00280 //
00281 // Defines the Callback Stack Layout for User Mode Callbacks
00282 //
00283 typedef struct _KCALLOUT_FRAME
00284 {
00285     ULONG64 InitialStack;
00286     ULONG64 TrapFrame;
00287     ULONG64 CallbackStack;
00288     ULONG64 Rdi;
00289     ULONG64 Rsi;
00290     ULONG64 Rbx;
00291     ULONG64 Rbp;
00292     ULONG64 ReturnAddress;
00293     ULONG64 Result;
00294     ULONG64 ResultLength;
00295 } KCALLOUT_FRAME, *PKCALLOUT_FRAME;
00296 
00297 //
00298 // Dummy LDT_ENTRY
00299 //
00300 #ifndef _LDT_ENTRY_DEFINED
00301 #define _LDT_ENTRY_DEFINED
00302 typedef ULONG LDT_ENTRY;
00303 #endif
00304 
00305 //
00306 // GDT Entry Definition
00307 //
00308 typedef union _KGDTENTRY64
00309 {
00310     struct
00311     {
00312         USHORT LimitLow;
00313         USHORT BaseLow;
00314         union
00315         {
00316             struct
00317             {
00318                 UCHAR BaseMiddle;
00319                 UCHAR Flags1;
00320                 UCHAR Flags2;
00321                 UCHAR BaseHigh;
00322             } Bytes;
00323             struct
00324             {
00325                 ULONG BaseMiddle:8;
00326                 ULONG Type:5;
00327                 ULONG Dpl:2;
00328                 ULONG Present:1;
00329                 ULONG LimitHigh:4;
00330                 ULONG System:1;
00331                 ULONG LongMode:1;
00332                 ULONG DefaultBig:1;
00333                 ULONG Granularity:1;
00334                 ULONG BaseHigh:8;
00335             } Bits;
00336         };
00337         ULONG BaseUpper;
00338         ULONG MustBeZero;
00339     };
00340     UINT64 Alignment;
00341 } KGDTENTRY64, *PKGDTENTRY64;
00342 #define KGDTENTRY KGDTENTRY64
00343 #define PKGDTENTRY PKGDTENTRY64
00344 
00345 //
00346 // IDT Entry Access Definition
00347 //
00348 typedef struct _KIDT_ACCESS
00349 {
00350     union
00351     {
00352         struct
00353         {
00354             UCHAR Reserved;
00355             UCHAR SegmentType:4;
00356             UCHAR SystemSegmentFlag:1;
00357             UCHAR Dpl:2;
00358             UCHAR Present:1;
00359         };
00360         USHORT Value;
00361     };
00362 } KIDT_ACCESS, *PKIDT_ACCESS;
00363 
00364 //
00365 // IDT Entry Definition
00366 //
00367 typedef union _KIDTENTRY64
00368 {
00369     struct
00370     {
00371         USHORT OffsetLow;
00372         USHORT Selector;
00373         USHORT IstIndex:3;
00374         USHORT Reserved0:5;
00375         USHORT Type:5;
00376         USHORT Dpl:2;
00377         USHORT Present:1;
00378         USHORT OffsetMiddle;
00379         ULONG OffsetHigh;
00380         ULONG Reserved1;
00381     };
00382     UINT64 Alignment;
00383 } KIDTENTRY64, *PKIDTENTRY64;
00384 #define KIDTENTRY KIDTENTRY64
00385 #define PKIDTENTRY PKIDTENTRY64
00386 
00387 typedef struct _KDESCRIPTOR
00388 {
00389     USHORT Pad[3];
00390     USHORT Limit;
00391     PVOID Base;
00392 } KDESCRIPTOR, *PKDESCRIPTOR;
00393 
00394 #ifndef NTOS_MODE_USER
00395 
00396 //
00397 // Special Registers Structure (outside of CONTEXT)
00398 //
00399 typedef struct _KSPECIAL_REGISTERS
00400 {
00401     UINT64 Cr0;
00402     UINT64 Cr2;
00403     UINT64 Cr3;
00404     UINT64 Cr4;
00405     UINT64 KernelDr0;
00406     UINT64 KernelDr1;
00407     UINT64 KernelDr2;
00408     UINT64 KernelDr3;
00409     UINT64 KernelDr6;
00410     UINT64 KernelDr7;
00411     struct _KDESCRIPTOR Gdtr;
00412     struct _KDESCRIPTOR Idtr;
00413     USHORT Tr;
00414     USHORT Ldtr;
00415     ULONG MxCsr;
00416     UINT64 DebugControl;
00417     UINT64 LastBranchToRip;
00418     UINT64 LastBranchFromRip;
00419     UINT64 LastExceptionToRip;
00420     UINT64 LastExceptionFromRip;
00421     UINT64 Cr8;
00422     UINT64 MsrGsBase;
00423     UINT64 MsrGsSwap;
00424     UINT64 MsrStar;
00425     UINT64 MsrLStar;
00426     UINT64 MsrCStar;
00427     UINT64 MsrSyscallMask;
00428 } KSPECIAL_REGISTERS, *PKSPECIAL_REGISTERS;
00429 
00430 //
00431 // Processor State Data
00432 //
00433 typedef struct _KPROCESSOR_STATE
00434 {
00435     KSPECIAL_REGISTERS SpecialRegisters;
00436     CONTEXT ContextFrame;
00437 } KPROCESSOR_STATE, *PKPROCESSOR_STATE;
00438 
00439 #if (NTDDI_VERSION < NTDDI_LONGHORN)
00440 #define GENERAL_LOOKASIDE_POOL PP_LOOKASIDE_LIST
00441 #endif
00442 
00443 typedef struct _KREQUEST_PACKET
00444 {
00445     PVOID CurrentPacket[3];
00446     PVOID WorkerRoutine;
00447 } KREQUEST_PACKET, *PKREQUEST_PACKET;
00448 
00449 typedef struct _REQUEST_MAILBOX
00450 {
00451     INT64 RequestSummary;
00452     KREQUEST_PACKET RequestPacket;
00453     PVOID Virtual[7];
00454 } REQUEST_MAILBOX, *PREQUEST_MAILBOX;
00455 
00456 //
00457 // Processor Region Control Block
00458 //
00459 #pragma pack(push,4)
00460 typedef struct _KPRCB
00461 {
00462     ULONG MxCsr;
00463 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00464     USHORT Number;
00465 #else
00466     UCHAR Number;
00467     UCHAR NestingLevel;
00468 #endif
00469     UCHAR InterruptRequest;
00470     UCHAR IdleHalt;
00471     struct _KTHREAD *CurrentThread;
00472     struct _KTHREAD *NextThread;
00473     struct _KTHREAD *IdleThread;
00474 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00475     UCHAR NestingLevel;
00476     UCHAR Group;
00477     UCHAR PrcbPad00[6];
00478 #else
00479     UINT64 UserRsp;
00480 #endif
00481     UINT64 RspBase;
00482     UINT64 PrcbLock;
00483     UINT64 SetMember;
00484     KPROCESSOR_STATE ProcessorState;
00485     CHAR CpuType;
00486     CHAR CpuID;
00487 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00488     union
00489     {
00490         USHORT CpuStep;
00491         struct
00492         {
00493             UCHAR CpuStepping;
00494             UCHAR CpuModel;
00495         };
00496     };
00497 #else
00498     USHORT CpuStep;
00499 #endif
00500     ULONG MHz;
00501     UINT64 HalReserved[8];
00502     USHORT MinorVersion;
00503     USHORT MajorVersion;
00504     UCHAR BuildType;
00505     UCHAR CpuVendor;
00506 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00507     UCHAR CoresPerPhysicalProcessor;
00508     UCHAR LogicalProcessorsPerCore;
00509 #else
00510     UCHAR InitialApicId;
00511     UCHAR LogicalProcessorsPerPhysicalProcessor;
00512 #endif
00513     ULONG ApicMask;
00514 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00515     ULONG CFlushSize;
00516 #else
00517     UCHAR CFlushSize;
00518     UCHAR PrcbPad0x[3];
00519 #endif
00520     PVOID AcpiReserved;
00521 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00522     ULONG InitialApicId;
00523     ULONG Stride;
00524     UINT64 PrcbPad01[3];
00525 #else
00526     UINT64 PrcbPad00[4];
00527 #endif
00528     KSPIN_LOCK_QUEUE LockQueue[LockQueueMaximumLock]; // 2003: 33, vista:49
00529     PP_LOOKASIDE_LIST PPLookasideList[16];
00530     GENERAL_LOOKASIDE_POOL PPNPagedLookasideList[32];
00531     GENERAL_LOOKASIDE_POOL PPPagedLookasideList[32];
00532     UINT64 PacketBarrier;
00533     SINGLE_LIST_ENTRY DeferredReadyListHead;
00534     LONG MmPageFaultCount;
00535     LONG MmCopyOnWriteCount;
00536     LONG MmTransitionCount;
00537 #if (NTDDI_VERSION < NTDDI_LONGHORN)
00538     LONG MmCacheTransitionCount;
00539 #endif
00540     LONG MmDemandZeroCount;
00541     LONG MmPageReadCount;
00542     LONG MmPageReadIoCount;
00543 #if (NTDDI_VERSION < NTDDI_LONGHORN)
00544     LONG MmCacheReadCount;
00545     LONG MmCacheIoCount;
00546 #endif
00547     LONG MmDirtyPagesWriteCount;
00548     LONG MmDirtyWriteIoCount;
00549     LONG MmMappedPagesWriteCount;
00550     LONG MmMappedWriteIoCount;
00551 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00552     ULONG KeSystemCalls;
00553     ULONG KeContextSwitches;
00554     ULONG CcFastReadNoWait;
00555     ULONG CcFastReadWait;
00556     ULONG CcFastReadNotPossible;
00557     ULONG CcCopyReadNoWait;
00558     ULONG CcCopyReadWait;
00559     ULONG CcCopyReadNoWaitMiss;
00560     LONG LookasideIrpFloat;
00561 #else
00562     LONG LookasideIrpFloat;
00563     ULONG KeSystemCalls;
00564 #endif
00565     LONG IoReadOperationCount;
00566     LONG IoWriteOperationCount;
00567     LONG IoOtherOperationCount;
00568     LARGE_INTEGER IoReadTransferCount;
00569     LARGE_INTEGER IoWriteTransferCount;
00570     LARGE_INTEGER IoOtherTransferCount;
00571 #if (NTDDI_VERSION < NTDDI_LONGHORN)
00572     ULONG KeContextSwitches;
00573     UCHAR PrcbPad2[12];
00574 #endif
00575     UINT64 TargetSet;
00576     ULONG IpiFrozen;
00577     UCHAR PrcbPad3[116];
00578     REQUEST_MAILBOX RequestMailbox[64];
00579     UINT64 SenderSummary;
00580     UCHAR PrcbPad4[120];
00581     KDPC_DATA DpcData[2];
00582     PVOID DpcStack;
00583 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00584     PVOID SparePtr0;
00585 #else
00586     PVOID SavedRsp;
00587 #endif
00588     LONG MaximumDpcQueueDepth;
00589     ULONG DpcRequestRate;
00590     ULONG MinimumDpcRate;
00591     UCHAR DpcInterruptRequested;
00592     UCHAR DpcThreadRequested;
00593     UCHAR DpcRoutineActive;
00594     UCHAR DpcThreadActive;
00595     UINT64 TimerHand;
00596     UINT64 TimerRequest;
00597     LONG TickOffset;
00598     LONG MasterOffset;
00599     ULONG DpcLastCount;
00600     UCHAR ThreadDpcEnable;
00601     UCHAR QuantumEnd;
00602     UCHAR PrcbPad50;
00603     UCHAR IdleSchedule;
00604     LONG DpcSetEventRequest;
00605 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00606     ULONG KeExceptionDispatchCount;
00607 #else
00608     LONG PrcbPad40;
00609     PVOID DpcThread;
00610 #endif
00611     KEVENT DpcEvent;
00612 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00613     PVOID PrcbPad51;
00614 #endif
00615     KDPC CallDpc;
00616 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00617     LONG ClockKeepAlive;
00618     UCHAR ClockCheckSlot;
00619     UCHAR ClockPollCycle;
00620     UCHAR PrcbPad6[2];
00621     LONG DpcWatchdogPeriod;
00622     LONG DpcWatchdogCount;
00623     UINT64 PrcbPad70[2];
00624 #else
00625     UINT64 PrcbPad7[4];
00626 #endif
00627     LIST_ENTRY WaitListHead;
00628 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00629     UINT64 WaitLock;
00630 #endif
00631     ULONG ReadySummary;
00632     ULONG QueueIndex;
00633 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00634     UINT64 PrcbPad71[12];
00635 #endif
00636     LIST_ENTRY DispatcherReadyListHead[32];
00637     ULONG InterruptCount;
00638     ULONG KernelTime;
00639     ULONG UserTime;
00640     ULONG DpcTime;
00641     ULONG InterruptTime;
00642     ULONG AdjustDpcThreshold;
00643     UCHAR SkipTick;
00644     UCHAR DebuggerSavedIRQL;
00645     UCHAR PollSlot;
00646 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00647     UCHAR PrcbPad80[5];
00648     ULONG DpcTimeCount;
00649     ULONG DpcTimeLimit;
00650     ULONG PeriodicCount;
00651     ULONG PeriodicBias;
00652     UINT64 PrcbPad81[2];
00653 #else
00654     UCHAR PrcbPad8[13];
00655 #endif
00656     struct _KNODE *ParentNode;
00657     UINT64 MultiThreadProcessorSet;
00658     struct _KPRCB *MultiThreadSetMaster;
00659 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00660     UINT64 StartCycles;
00661     LONG MmSpinLockOrdering;
00662     ULONG PageColor;
00663     ULONG NodeColor;
00664     ULONG NodeShiftedColor;
00665     ULONG SecondaryColorMask;
00666 #endif
00667     LONG Sleeping;
00668 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00669     UINT64 CycleTime;
00670     ULONG CcFastMdlReadNoWait;
00671     ULONG CcFastMdlReadWait;
00672     ULONG CcFastMdlReadNotPossible;
00673     ULONG CcMapDataNoWait;
00674     ULONG CcMapDataWait;
00675     ULONG CcPinMappedDataCount;
00676     ULONG CcPinReadNoWait;
00677     ULONG CcPinReadWait;
00678     ULONG CcMdlReadNoWait;
00679     ULONG CcMdlReadWait;
00680     ULONG CcLazyWriteHotSpots;
00681     ULONG CcLazyWriteIos;
00682     ULONG CcLazyWritePages;
00683     ULONG CcDataFlushes;
00684     ULONG CcDataPages;
00685     ULONG CcLostDelayedWrites;
00686     ULONG CcFastReadResourceMiss;
00687     ULONG CcCopyReadWaitMiss;
00688     ULONG CcFastMdlReadResourceMiss;
00689     ULONG CcMapDataNoWaitMiss;
00690     ULONG CcMapDataWaitMiss;
00691     ULONG CcPinReadNoWaitMiss;
00692     ULONG CcPinReadWaitMiss;
00693     ULONG CcMdlReadNoWaitMiss;
00694     ULONG CcMdlReadWaitMiss;
00695     ULONG CcReadAheadIos;
00696     LONG MmCacheTransitionCount;
00697     LONG MmCacheReadCount;
00698     LONG MmCacheIoCount;
00699     ULONG PrcbPad91[3];
00700     PROCESSOR_POWER_STATE PowerState;
00701     ULONG KeAlignmentFixupCount;
00702     UCHAR VendorString[13];
00703     UCHAR PrcbPad10[3];
00704     ULONG FeatureBits;
00705     LARGE_INTEGER UpdateSignature;
00706     KDPC DpcWatchdogDpc;
00707     KTIMER DpcWatchdogTimer;
00708     CACHE_DESCRIPTOR Cache[5];
00709     ULONG CacheCount;
00710     ULONG CachedCommit;
00711     ULONG CachedResidentAvailable;
00712     PVOID HyperPte;
00713     PVOID WheaInfo;
00714     PVOID EtwSupport;
00715     SLIST_HEADER InterruptObjectPool;
00716     SLIST_HEADER HypercallPageList;
00717     PVOID HypercallPageVirtual;
00718     PVOID VirtualApicAssist;
00719     UINT64* StatisticsPage;
00720     PVOID RateControl;
00721     UINT64 CacheProcessorMask[5];
00722     UINT64 PackageProcessorSet;
00723     UINT64 CoreProcessorSet;
00724 #else
00725     ULONG PrcbPad90[1];
00726     ULONG DebugDpcTime;
00727     ULONG PageColor;
00728     ULONG NodeColor;
00729     ULONG NodeShiftedColor;
00730     ULONG SecondaryColorMask;
00731     UCHAR PrcbPad9[12];
00732     ULONG CcFastReadNoWait;
00733     ULONG CcFastReadWait;
00734     ULONG CcFastReadNotPossible;
00735     ULONG CcCopyReadNoWait;
00736     ULONG CcCopyReadWait;
00737     ULONG CcCopyReadNoWaitMiss;
00738     ULONG KeAlignmentFixupCount;
00739     ULONG KeDcacheFlushCount;
00740     ULONG KeExceptionDispatchCount;
00741     ULONG KeFirstLevelTbFills;
00742     ULONG KeFloatingEmulationCount;
00743     ULONG KeIcacheFlushCount;
00744     ULONG KeSecondLevelTbFills;
00745     UCHAR VendorString[13];
00746     UCHAR PrcbPad10[2];
00747     ULONG FeatureBits;
00748     LARGE_INTEGER UpdateSignature;
00749     PROCESSOR_POWER_STATE PowerState;
00750     CACHE_DESCRIPTOR Cache[5];
00751     ULONG CacheCount;
00752 #endif
00753 }
00754  KPRCB, *PKPRCB;
00755 
00756 //
00757 // Processor Control Region
00758 //
00759 typedef struct _KIPCR
00760 {
00761     union
00762     {
00763         NT_TIB NtTib;
00764         struct
00765         {
00766             union _KGDTENTRY64 *GdtBase;
00767             struct _KTSS64 *TssBase;
00768             ULONG64 UserRsp;
00769             struct _KPCR *Self;
00770             struct _KPRCB *CurrentPrcb;
00771             PKSPIN_LOCK_QUEUE LockArray;
00772             PVOID Used_Self;
00773         };
00774     };
00775     union _KIDTENTRY64 *IdtBase;
00776     ULONG64 Unused[2];
00777     KIRQL Irql;
00778     UCHAR SecondLevelCacheAssociativity;
00779     UCHAR ObsoleteNumber;
00780     UCHAR Fill0;
00781     ULONG Unused0[3];
00782     USHORT MajorVersion;
00783     USHORT MinorVersion;
00784     ULONG StallScaleFactor;
00785     PVOID Unused1[3];
00786     ULONG KernelReserved[15];
00787     ULONG SecondLevelCacheSize;
00788     ULONG HalReserved[16];
00789     ULONG Unused2;
00790     ULONG Fill1;
00791     PVOID KdVersionBlock; // 0x108
00792     PVOID Unused3;
00793     ULONG PcrAlign1[24];
00794     ULONG Fill2[2]; // 0x178
00795     KPRCB Prcb; // 0x180
00796 
00797     // hack:
00798     ULONG ContextSwitches;
00799 
00800 } KIPCR, *PKIPCR;
00801 #pragma pack(pop)
00802 
00803 //
00804 // TSS Definition
00805 //
00806 typedef struct _KiIoAccessMap
00807 {
00808     UCHAR DirectionMap[32];
00809     UCHAR IoMap[8196];
00810 } KIIO_ACCESS_MAP;
00811 
00812 
00813 #pragma pack(push,4)
00814 typedef struct _KTSS64
00815 {
00816  /* 000 */  ULONG Reserved0;
00817  /* 004 */  UINT64 Rsp0;
00818  /* 00c */  UINT64 Rsp1;
00819  /* 014 */  UINT64 Rsp2;
00820  /* 01c */  UINT64 Ist[8];
00821  /* 05c */  UINT64 Reserved1;
00822  /* 064 */  USHORT Reserved2;
00823  /* 066 */  USHORT IoMapBase;
00824 } KTSS64, *PKTSS64;
00825 #pragma pack(pop)
00826 #define KTSS KTSS64
00827 #define PKTSS PKTSS64
00828 
00829 //
00830 // KEXCEPTION_FRAME
00831 //
00832 typedef struct _KEXCEPTION_FRAME
00833 {
00834     UINT64 P1Home;
00835     UINT64 P2Home;
00836     UINT64 P3Home;
00837     UINT64 P4Home;
00838     UINT64 P5;
00839     UINT64 InitialStack;
00840     M128A Xmm6;
00841     M128A Xmm7;
00842     M128A Xmm8;
00843     M128A Xmm9;
00844     M128A Xmm10;
00845     M128A Xmm11;
00846     M128A Xmm12;
00847     M128A Xmm13;
00848     M128A Xmm14;
00849     M128A Xmm15;
00850     UINT64 TrapFrame;
00851     UINT64 CallbackStack;
00852     UINT64 OutputBuffer;
00853     UINT64 OutputLength;
00854     UINT64 MxCsr;
00855     UINT64 Rbp;
00856     UINT64 Rbx;
00857     UINT64 Rdi;
00858     UINT64 Rsi;
00859     UINT64 R12;
00860     UINT64 R13;
00861     UINT64 R14;
00862     UINT64 R15;
00863     UINT64 Return;
00864 } KEXCEPTION_FRAME, *PKEXCEPTION_FRAME;
00865 
00866 typedef struct _DISPATCHER_CONTEXT
00867 {
00868     ULONG64 ControlPc;
00869     PVOID ImageBase;
00870     PVOID FunctionEntry;
00871     PVOID EstablisherFrame;
00872     ULONG64 TargetIp;
00873     PVOID ContextRecord;
00874     PVOID LanguageHandler;
00875     PVOID HandlerData;
00876     PVOID HistoryTable;
00877     ULONG ScopeIndex;
00878 } DISPATCHER_CONTEXT, *PDISPATCHER_CONTEXT;
00879 
00880 
00881 typedef struct _KSTART_FRAME
00882 {
00883     ULONG64 P1Home;
00884     ULONG64 P2Home;
00885     ULONG64 P3Home;
00886     ULONG64 P4Home;
00887     ULONG64 P5Home;
00888     ULONG64 Return;
00889 } KSTART_FRAME, *PKSTART_FRAME;
00890 
00891 typedef struct _KSWITCH_FRAME
00892 {
00893     ULONG64 P1Home;
00894     ULONG64 P2Home;
00895     ULONG64 P3Home;
00896     ULONG64 P4Home;
00897     ULONG64 P5Home;
00898     ULONG64 ApcBypass;
00899     ULONG64 Rbp;
00900     ULONG64 Return;
00901 } KSWITCH_FRAME, *PKSWITCH_FRAME;
00902 
00903 #if 0
00904 typedef struct _KTIMER_TABLE_ENTRY
00905 {
00906     ULONG_PTR Lock;
00907     LIST_ENTRY Entry;
00908     ULARGE_INTEGER Time;
00909 } KTIMER_TABLE_ENTRY, *PKTIMER_TABLE_ENTRY;
00910 
00911 typedef struct _KTIMER_TABLE
00912 {
00913     KTIMER* TimerExpiry[64];
00914     KTIMER_TABLE_ENTRY TimerEntries[256];
00915 } KTIMER_TABLE, *PKTIMER_TABLE;
00916 #endif
00917 
00918 //
00919 // Inline function to get current KPRCB
00920 //
00921 FORCEINLINE
00922 struct _KPRCB *
00923 KeGetCurrentPrcb(VOID)
00924 {
00925     return (struct _KPRCB *)__readgsqword(FIELD_OFFSET(KIPCR, CurrentPrcb));
00926 }
00927 
00928 #endif
00929 #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.