Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenketypes.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
1.7.6.1
|