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 (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
1.7.6.1
|