HyperPlatform Programmer's Reference
Classes | Typedefs | Enumerations | Functions | Variables
ia32_type.h File Reference

Defines constants and structures defined by the x86-64 architecture. More...

#include <fltKernel.h>
#include <pshpack1.h>
#include <poppack.h>
Include dependency graph for ia32_type.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

union  FlagRegister
 See: SYSTEM FLAGS AND FIELDS IN THE EFLAGS REGISTER. More...
 
struct  GpRegistersX64
 Represents a stack layout after PUSHAQ. More...
 
struct  GpRegistersX86
 Represents a stack layout after PUSHAD. More...
 
struct  AllRegisters
 Represents a stack layout after a sequence of PUSHFx, PUSHAx. More...
 
union  Cr0
 See: CONTROL REGISTERS. More...
 
union  Cr4
 See: CONTROL REGISTERS. More...
 
union  Dr6
 See: Debug Status Register (DR6) More...
 
union  Dr7
 See: Debug Control Register (DR7) More...
 
struct  Idtr
 See: MEMORY-MANAGEMENT REGISTERS. More...
 
union  KidtEntry
 IDT entry (nt!_KIDTENTRY) More...
 
struct  KidtEntry64
 IDT entry for x64 (nt!_KIDTENTRY64) More...
 
union  SegmentSelector
 See: Segment Selectors. More...
 
union  SegmentDescriptor
 See: Segment Descriptor. More...
 
struct  SegmentDesctiptorX64
 See: Segment Descriptor. More...
 
union  CpuFeaturesEcx
 See: Feature Information Returned in the ECX Register. More...
 
union  CpuFeaturesEdx
 See: More on Feature Information Returned in the EDX Register. More...
 
struct  HardwarePteX86
 nt!_HARDWARE_PTE on x86 PAE-disabled Windows More...
 
struct  HardwarePteX86Pae
 nt!_HARDWARE_PTE on x86 PAE-enabled Windows More...
 
struct  HardwarePteX64
 nt!_HARDWARE_PTE on x64 Windows More...
 
struct  HardwarePteARM
 nt!_HARDWARE_PTE on ARM Windows More...
 
union  PaeCr3
 nt!_HARDWARE_PTE on the current platform More...
 
union  PdptrRegister
 See: PDPTE Registers. More...
 
union  Cpuid80000008Eax
 See: Information Returned by CPUID Instruction. More...
 
union  Ia32MtrrCapabilitiesMsr
 See: IA32_MTRRCAP Register. More...
 
union  Ia32MtrrDefaultTypeMsr
 See: IA32_MTRR_DEF_TYPE MSR. More...
 
union  Ia32MtrrFixedRangeMsr
 See: Fixed Range MTRRs. More...
 
union  Ia32MtrrPhysBaseMsr
 See: IA32_MTRR_PHYSBASEn and IA32_MTRR_PHYSMASKn Variable-Range Register Pair. More...
 
union  Ia32MtrrPhysMaskMsr
 See: IA32_MTRR_PHYSBASEn and IA32_MTRR_PHYSMASKn Variable-Range Register Pair. More...
 
union  Ia32ApicBaseMsr
 See: IA32_APIC_BASE MSR Supporting x2APIC. More...
 
union  PageFaultErrorCode
 See: Page-Fault Error Code. More...
 
struct  VmControlStructure
 See: Virtual-Machine Control Structures & FORMAT OF THE VMCS REGION. More...
 
union  VmxPinBasedControls
 See: Definitions of Pin-Based VM-Execution Controls. More...
 
union  VmxProcessorBasedControls
 See: Definitions of Primary Processor-Based VM-Execution Controls. More...
 
union  VmxSecondaryProcessorBasedControls
 See: Definitions of Secondary Processor-Based VM-Execution Controls. More...
 
union  VmxVmExitControls
 See: Definitions of VM-Exit Controls. More...
 
union  VmxVmEntryControls
 See: Definitions of VM-Entry Controls. More...
 
union  VmxRegmentDescriptorAccessRight
 See: Guest Register State. More...
 
union  Ia32FeatureControlMsr
 See: ARCHITECTURAL MSRS. More...
 
union  Ia32VmxBasicMsr
 See: BASIC VMX INFORMATION. More...
 
union  Ia32VmxMiscMsr
 See: MISCELLANEOUS DATA. More...
 
union  Ia32VmxVmcsEnumMsr
 See: VMCS ENUMERATION. More...
 
union  Ia32VmxEptVpidCapMsr
 See: VPID AND EPT CAPABILITIES. More...
 
union  VmExitInformation
 See: Format of Exit Reason in Basic VM-Exit Information. More...
 
union  InsOrOutsInstInformation
 See: Format of the VM-Exit Instruction-Information Field as Used for INS and OUTS. More...
 
union  InvEptOrPcidOrVpidInstInformation
 See: Format of the VM-Exit Instruction-Information Field as Used for INVEPT, INVPCID, and INVVPID. More...
 
union  GdtrOrIdtrInstInformation
 See: Format of the VM-Exit Instruction-Information Field as Used for LIDT, LGDT, SIDT, or SGDT. More...
 
union  LdtrOrTrInstInformation
 See: Format of the VM-Exit Instruction-Information Field as Used for LLDT, LTR, SLDT, and STR. More...
 
union  MovDrQualification
 See: Exit Qualification for MOV DR. More...
 
union  IoInstQualification
 See: Exit Qualification for I/O Instructions. More...
 
union  MovCrQualification
 See: Exit Qualification for Control-Register Accesses. More...
 
union  EptPointer
 See: Extended-Page-Table Pointer (EPTP) More...
 
union  EptPml4Entry
 See: Format of an EPT PML4 Entry (PML4E) that References an EPT Page-Directory-Pointer Table. More...
 
union  EptPdptSuperPageEntry
 See: Format of an EPT Page-Directory-Pointer-Table Entry (PDPTE) that Maps a 1-GByte Page. More...
 
union  EptPdptEntry
 See: Format of an EPT Page-Directory-Pointer-Table Entry (PDPTE) that References an EPT Page Directory. More...
 
union  EptPdLargePageEntry
 See: Format of an EPT Page-Directory Entry (PDE) that Maps a 2-MByte Page. More...
 
union  EptPdEntry
 See: Format of an EPT Page-Directory Entry (PDE) that References an EPT Page Table. More...
 
union  EptPtEntry
 See: Format of an EPT Page-Table Entry that Maps a 4-KByte Page. More...
 
union  EptViolationQualification
 See: Exit Qualification for EPT Violations. More...
 
struct  InvEptDescriptor
 See: INVEPT Descriptor. More...
 
struct  InvVpidDescriptor
 See: INVVPID Descriptor. More...
 
union  VmExitInterruptionInformationField
 See: Format of the VM-Exit Interruption-Information Field. More...
 
union  VmEntryInterruptionInformationField
 See: Format of the VM-Entry Interruption-Information Field. More...
 

Typedefs

using GpRegisters = GpRegistersX86
 Represents a stack layout after PUSHAx. More...
 
using Gdtr = Idtr
 See: MEMORY-MANAGEMENT REGISTERS. More...
 

Enumerations

enum  Msr : unsigned int {
  Msr::kIa32ApicBase = 0x01B, Msr::kIa32FeatureControl = 0x03A, Msr::kIa32SysenterCs = 0x174, Msr::kIa32SysenterEsp = 0x175,
  Msr::kIa32SysenterEip = 0x176, Msr::kIa32Debugctl = 0x1D9, Msr::kIa32MtrrCap = 0xFE, Msr::kIa32MtrrDefType = 0x2FF,
  Msr::kIa32MtrrPhysBaseN = 0x200, Msr::kIa32MtrrPhysMaskN = 0x201, Msr::kIa32MtrrFix64k00000 = 0x250, Msr::kIa32MtrrFix16k80000 = 0x258,
  Msr::kIa32MtrrFix16kA0000 = 0x259, Msr::kIa32MtrrFix4kC0000 = 0x268, Msr::kIa32MtrrFix4kC8000 = 0x269, Msr::kIa32MtrrFix4kD0000 = 0x26A,
  Msr::kIa32MtrrFix4kD8000 = 0x26B, Msr::kIa32MtrrFix4kE0000 = 0x26C, Msr::kIa32MtrrFix4kE8000 = 0x26D, Msr::kIa32MtrrFix4kF0000 = 0x26E,
  Msr::kIa32MtrrFix4kF8000 = 0x26F, Msr::kIa32VmxBasic = 0x480, Msr::kIa32VmxPinbasedCtls = 0x481, Msr::kIa32VmxProcBasedCtls = 0x482,
  Msr::kIa32VmxExitCtls = 0x483, Msr::kIa32VmxEntryCtls = 0x484, Msr::kIa32VmxMisc = 0x485, Msr::kIa32VmxCr0Fixed0 = 0x486,
  Msr::kIa32VmxCr0Fixed1 = 0x487, Msr::kIa32VmxCr4Fixed0 = 0x488, Msr::kIa32VmxCr4Fixed1 = 0x489, Msr::kIa32VmxVmcsEnum = 0x48A,
  Msr::kIa32VmxProcBasedCtls2 = 0x48B, Msr::kIa32VmxEptVpidCap = 0x48C, Msr::kIa32VmxTruePinbasedCtls = 0x48D, Msr::kIa32VmxTrueProcBasedCtls = 0x48E,
  Msr::kIa32VmxTrueExitCtls = 0x48F, Msr::kIa32VmxTrueEntryCtls = 0x490, Msr::kIa32VmxVmfunc = 0x491, Msr::kIa32Efer = 0xC0000080,
  Msr::kIa32Star = 0xC0000081, Msr::kIa32Lstar = 0xC0000082, Msr::kIa32Fmask = 0xC0000084, Msr::kIa32FsBase = 0xC0000100,
  Msr::kIa32GsBase = 0xC0000101, Msr::kIa32KernelGsBase = 0xC0000102, Msr::kIa32TscAux = 0xC0000103
}
 See: MODEL-SPECIFIC REGISTERS (MSRS) More...
 
enum  VmcsField : unsigned __int32 {
  VmcsField::kVirtualProcessorId = 0x00000000, VmcsField::kPostedInterruptNotification = 0x00000002, VmcsField::kEptpIndex = 0x00000004, VmcsField::kGuestEsSelector = 0x00000800,
  VmcsField::kGuestCsSelector = 0x00000802, VmcsField::kGuestSsSelector = 0x00000804, VmcsField::kGuestDsSelector = 0x00000806, VmcsField::kGuestFsSelector = 0x00000808,
  VmcsField::kGuestGsSelector = 0x0000080a, VmcsField::kGuestLdtrSelector = 0x0000080c, VmcsField::kGuestTrSelector = 0x0000080e, VmcsField::kGuestInterruptStatus = 0x00000810,
  VmcsField::kPmlIndex = 0x00000812, VmcsField::kHostEsSelector = 0x00000c00, VmcsField::kHostCsSelector = 0x00000c02, VmcsField::kHostSsSelector = 0x00000c04,
  VmcsField::kHostDsSelector = 0x00000c06, VmcsField::kHostFsSelector = 0x00000c08, VmcsField::kHostGsSelector = 0x00000c0a, VmcsField::kHostTrSelector = 0x00000c0c,
  VmcsField::kIoBitmapA = 0x00002000, VmcsField::kIoBitmapAHigh = 0x00002001, VmcsField::kIoBitmapB = 0x00002002, VmcsField::kIoBitmapBHigh = 0x00002003,
  VmcsField::kMsrBitmap = 0x00002004, VmcsField::kMsrBitmapHigh = 0x00002005, VmcsField::kVmExitMsrStoreAddr = 0x00002006, VmcsField::kVmExitMsrStoreAddrHigh = 0x00002007,
  VmcsField::kVmExitMsrLoadAddr = 0x00002008, VmcsField::kVmExitMsrLoadAddrHigh = 0x00002009, VmcsField::kVmEntryMsrLoadAddr = 0x0000200a, VmcsField::kVmEntryMsrLoadAddrHigh = 0x0000200b,
  VmcsField::kExecutiveVmcsPointer = 0x0000200c, VmcsField::kExecutiveVmcsPointerHigh = 0x0000200d, VmcsField::kTscOffset = 0x00002010, VmcsField::kTscOffsetHigh = 0x00002011,
  VmcsField::kVirtualApicPageAddr = 0x00002012, VmcsField::kVirtualApicPageAddrHigh = 0x00002013, VmcsField::kApicAccessAddr = 0x00002014, VmcsField::kApicAccessAddrHigh = 0x00002015,
  VmcsField::kEptPointer = 0x0000201a, VmcsField::kEptPointerHigh = 0x0000201b, VmcsField::kEoiExitBitmap0 = 0x0000201c, VmcsField::kEoiExitBitmap0High = 0x0000201d,
  VmcsField::kEoiExitBitmap1 = 0x0000201e, VmcsField::kEoiExitBitmap1High = 0x0000201f, VmcsField::kEoiExitBitmap2 = 0x00002020, VmcsField::kEoiExitBitmap2High = 0x00002021,
  VmcsField::kEoiExitBitmap3 = 0x00002022, VmcsField::kEoiExitBitmap3High = 0x00002023, VmcsField::kEptpListAddress = 0x00002024, VmcsField::kEptpListAddressHigh = 0x00002025,
  VmcsField::kVmreadBitmapAddress = 0x00002026, VmcsField::kVmreadBitmapAddressHigh = 0x00002027, VmcsField::kVmwriteBitmapAddress = 0x00002028, VmcsField::kVmwriteBitmapAddressHigh = 0x00002029,
  VmcsField::kVirtualizationExceptionInfoAddress = 0x0000202a, VmcsField::kVirtualizationExceptionInfoAddressHigh = 0x0000202b, VmcsField::kXssExitingBitmap = 0x0000202c, VmcsField::kXssExitingBitmapHigh = 0x0000202d,
  VmcsField::kEnclsExitingBitmap = 0x0000202e, VmcsField::kEnclsExitingBitmapHigh = 0x0000202f, VmcsField::kTscMultiplier = 0x00002032, VmcsField::kTscMultiplierHigh = 0x00002033,
  VmcsField::kGuestPhysicalAddress = 0x00002400, VmcsField::kGuestPhysicalAddressHigh = 0x00002401, VmcsField::kVmcsLinkPointer = 0x00002800, VmcsField::kVmcsLinkPointerHigh = 0x00002801,
  VmcsField::kGuestIa32Debugctl = 0x00002802, VmcsField::kGuestIa32DebugctlHigh = 0x00002803, VmcsField::kGuestIa32Pat = 0x00002804, VmcsField::kGuestIa32PatHigh = 0x00002805,
  VmcsField::kGuestIa32Efer = 0x00002806, VmcsField::kGuestIa32EferHigh = 0x00002807, VmcsField::kGuestIa32PerfGlobalCtrl = 0x00002808, VmcsField::kGuestIa32PerfGlobalCtrlHigh = 0x00002809,
  VmcsField::kGuestPdptr0 = 0x0000280a, VmcsField::kGuestPdptr0High = 0x0000280b, VmcsField::kGuestPdptr1 = 0x0000280c, VmcsField::kGuestPdptr1High = 0x0000280d,
  VmcsField::kGuestPdptr2 = 0x0000280e, VmcsField::kGuestPdptr2High = 0x0000280f, VmcsField::kGuestPdptr3 = 0x00002810, VmcsField::kGuestPdptr3High = 0x00002811,
  VmcsField::kGuestIa32Bndcfgs = 0x00002812, VmcsField::kGuestIa32BndcfgsHigh = 0x00002813, VmcsField::kHostIa32Pat = 0x00002c00, VmcsField::kHostIa32PatHigh = 0x00002c01,
  VmcsField::kHostIa32Efer = 0x00002c02, VmcsField::kHostIa32EferHigh = 0x00002c03, VmcsField::kHostIa32PerfGlobalCtrl = 0x00002c04, VmcsField::kHostIa32PerfGlobalCtrlHigh = 0x00002c05,
  VmcsField::kPinBasedVmExecControl = 0x00004000, VmcsField::kCpuBasedVmExecControl = 0x00004002, VmcsField::kExceptionBitmap = 0x00004004, VmcsField::kPageFaultErrorCodeMask = 0x00004006,
  VmcsField::kPageFaultErrorCodeMatch = 0x00004008, VmcsField::kCr3TargetCount = 0x0000400a, VmcsField::kVmExitControls = 0x0000400c, VmcsField::kVmExitMsrStoreCount = 0x0000400e,
  VmcsField::kVmExitMsrLoadCount = 0x00004010, VmcsField::kVmEntryControls = 0x00004012, VmcsField::kVmEntryMsrLoadCount = 0x00004014, VmcsField::kVmEntryIntrInfoField = 0x00004016,
  VmcsField::kVmEntryExceptionErrorCode = 0x00004018, VmcsField::kVmEntryInstructionLen = 0x0000401a, VmcsField::kTprThreshold = 0x0000401c, VmcsField::kSecondaryVmExecControl = 0x0000401e,
  VmcsField::kPleGap = 0x00004020, VmcsField::kPleWindow = 0x00004022, VmcsField::kVmInstructionError = 0x00004400, VmcsField::kVmExitReason = 0x00004402,
  VmcsField::kVmExitIntrInfo = 0x00004404, VmcsField::kVmExitIntrErrorCode = 0x00004406, VmcsField::kIdtVectoringInfoField = 0x00004408, VmcsField::kIdtVectoringErrorCode = 0x0000440a,
  VmcsField::kVmExitInstructionLen = 0x0000440c, VmcsField::kVmxInstructionInfo = 0x0000440e, VmcsField::kGuestEsLimit = 0x00004800, VmcsField::kGuestCsLimit = 0x00004802,
  VmcsField::kGuestSsLimit = 0x00004804, VmcsField::kGuestDsLimit = 0x00004806, VmcsField::kGuestFsLimit = 0x00004808, VmcsField::kGuestGsLimit = 0x0000480a,
  VmcsField::kGuestLdtrLimit = 0x0000480c, VmcsField::kGuestTrLimit = 0x0000480e, VmcsField::kGuestGdtrLimit = 0x00004810, VmcsField::kGuestIdtrLimit = 0x00004812,
  VmcsField::kGuestEsArBytes = 0x00004814, VmcsField::kGuestCsArBytes = 0x00004816, VmcsField::kGuestSsArBytes = 0x00004818, VmcsField::kGuestDsArBytes = 0x0000481a,
  VmcsField::kGuestFsArBytes = 0x0000481c, VmcsField::kGuestGsArBytes = 0x0000481e, VmcsField::kGuestLdtrArBytes = 0x00004820, VmcsField::kGuestTrArBytes = 0x00004822,
  VmcsField::kGuestInterruptibilityInfo = 0x00004824, VmcsField::kGuestActivityState = 0x00004826, VmcsField::kGuestSmbase = 0x00004828, VmcsField::kGuestSysenterCs = 0x0000482a,
  VmcsField::kVmxPreemptionTimerValue = 0x0000482e, VmcsField::kHostIa32SysenterCs = 0x00004c00, VmcsField::kCr0GuestHostMask = 0x00006000, VmcsField::kCr4GuestHostMask = 0x00006002,
  VmcsField::kCr0ReadShadow = 0x00006004, VmcsField::kCr4ReadShadow = 0x00006006, VmcsField::kCr3TargetValue0 = 0x00006008, VmcsField::kCr3TargetValue1 = 0x0000600a,
  VmcsField::kCr3TargetValue2 = 0x0000600c, VmcsField::kCr3TargetValue3 = 0x0000600e, VmcsField::kExitQualification = 0x00006400, VmcsField::kIoRcx = 0x00006402,
  VmcsField::kIoRsi = 0x00006404, VmcsField::kIoRdi = 0x00006406, VmcsField::kIoRip = 0x00006408, VmcsField::kGuestLinearAddress = 0x0000640a,
  VmcsField::kGuestCr0 = 0x00006800, VmcsField::kGuestCr3 = 0x00006802, VmcsField::kGuestCr4 = 0x00006804, VmcsField::kGuestEsBase = 0x00006806,
  VmcsField::kGuestCsBase = 0x00006808, VmcsField::kGuestSsBase = 0x0000680a, VmcsField::kGuestDsBase = 0x0000680c, VmcsField::kGuestFsBase = 0x0000680e,
  VmcsField::kGuestGsBase = 0x00006810, VmcsField::kGuestLdtrBase = 0x00006812, VmcsField::kGuestTrBase = 0x00006814, VmcsField::kGuestGdtrBase = 0x00006816,
  VmcsField::kGuestIdtrBase = 0x00006818, VmcsField::kGuestDr7 = 0x0000681a, VmcsField::kGuestRsp = 0x0000681c, VmcsField::kGuestRip = 0x0000681e,
  VmcsField::kGuestRflags = 0x00006820, VmcsField::kGuestPendingDbgExceptions = 0x00006822, VmcsField::kGuestSysenterEsp = 0x00006824, VmcsField::kGuestSysenterEip = 0x00006826,
  VmcsField::kHostCr0 = 0x00006c00, VmcsField::kHostCr3 = 0x00006c02, VmcsField::kHostCr4 = 0x00006c04, VmcsField::kHostFsBase = 0x00006c06,
  VmcsField::kHostGsBase = 0x00006c08, VmcsField::kHostTrBase = 0x00006c0a, VmcsField::kHostGdtrBase = 0x00006c0c, VmcsField::kHostIdtrBase = 0x00006c0e,
  VmcsField::kHostIa32SysenterEsp = 0x00006c10, VmcsField::kHostIa32SysenterEip = 0x00006c12, VmcsField::kHostRsp = 0x00006c14, VmcsField::kHostRip = 0x00006c16
}
 See: FIELD ENCODING IN VMCS. More...
 
enum  VmxExitReason : unsigned __int16 {
  VmxExitReason::kExceptionOrNmi = 0, VmxExitReason::kExternalInterrupt = 1, VmxExitReason::kTripleFault = 2, VmxExitReason::kInit = 3,
  VmxExitReason::kSipi = 4, VmxExitReason::kIoSmi = 5, VmxExitReason::kOtherSmi = 6, VmxExitReason::kPendingInterrupt = 7,
  VmxExitReason::kNmiWindow = 8, VmxExitReason::kTaskSwitch = 9, VmxExitReason::kCpuid = 10, VmxExitReason::kGetSec = 11,
  VmxExitReason::kHlt = 12, VmxExitReason::kInvd = 13, VmxExitReason::kInvlpg = 14, VmxExitReason::kRdpmc = 15,
  VmxExitReason::kRdtsc = 16, VmxExitReason::kRsm = 17, VmxExitReason::kVmcall = 18, VmxExitReason::kVmclear = 19,
  VmxExitReason::kVmlaunch = 20, VmxExitReason::kVmptrld = 21, VmxExitReason::kVmptrst = 22, VmxExitReason::kVmread = 23,
  VmxExitReason::kVmresume = 24, VmxExitReason::kVmwrite = 25, VmxExitReason::kVmoff = 26, VmxExitReason::kVmon = 27,
  VmxExitReason::kCrAccess = 28, VmxExitReason::kDrAccess = 29, VmxExitReason::kIoInstruction = 30, VmxExitReason::kMsrRead = 31,
  VmxExitReason::kMsrWrite = 32, VmxExitReason::kInvalidGuestState = 33, VmxExitReason::kMsrLoading = 34, VmxExitReason::kUndefined35 = 35,
  VmxExitReason::kMwaitInstruction = 36, VmxExitReason::kMonitorTrapFlag = 37, VmxExitReason::kUndefined38 = 38, VmxExitReason::kMonitorInstruction = 39,
  VmxExitReason::kPauseInstruction = 40, VmxExitReason::kMachineCheck = 41, VmxExitReason::kUndefined42 = 42, VmxExitReason::kTprBelowThreshold = 43,
  VmxExitReason::kApicAccess = 44, VmxExitReason::kVirtualizedEoi = 45, VmxExitReason::kGdtrOrIdtrAccess = 46, VmxExitReason::kLdtrOrTrAccess = 47,
  VmxExitReason::kEptViolation = 48, VmxExitReason::kEptMisconfig = 49, VmxExitReason::kInvept = 50, VmxExitReason::kRdtscp = 51,
  VmxExitReason::kVmxPreemptionTime = 52, VmxExitReason::kInvvpid = 53, VmxExitReason::kWbinvd = 54, VmxExitReason::kXsetbv = 55,
  VmxExitReason::kApicWrite = 56, VmxExitReason::kRdrand = 57, VmxExitReason::kInvpcid = 58, VmxExitReason::kVmfunc = 59,
  VmxExitReason::kUndefined60 = 60, VmxExitReason::kRdseed = 61, VmxExitReason::kUndefined62 = 62, VmxExitReason::kXsaves = 63,
  VmxExitReason::kXrstors = 64
}
 See: VMX BASIC EXIT REASONS. More...
 
enum  VmxInstructionError {
  VmxInstructionError::kVmcallInVmxRootOperation = 1, VmxInstructionError::kVmclearInvalidAddress = 2, VmxInstructionError::kVmclearVmxonPoiner = 3, VmxInstructionError::kVmlaunchNonclearVmcs = 4,
  VmxInstructionError::kVmresumeNonlaunchedVmcs = 5, VmxInstructionError::kVmresumeAfterVmxoff = 6, VmxInstructionError::kEntryInvalidControlField = 7, VmxInstructionError::kEntryInvalidHostStateField = 8,
  VmxInstructionError::kVmptrldInvalidAddress = 9, VmxInstructionError::kVmptrldVmxonPointer = 10, VmxInstructionError::kVmptrldIncorrectVmcsRevisionId = 11, VmxInstructionError::kUnsupportedVmcsComponent = 12,
  VmxInstructionError::kVmwriteReadOnlyVmcsComponent = 13, VmxInstructionError::kVmxonInVmxRootOperation = 15, VmxInstructionError::kEntryInvalidExecutiveVmcsPointer = 16, VmxInstructionError::kEntryNonlaunchedExecutiveVmcs = 17,
  VmxInstructionError::kEntryExecutiveVmcsPointerNonVmxonPointer = 18, VmxInstructionError::kVmcallNonClearVmcs = 19, VmxInstructionError::kVmcallInvalidVmExitControlFields = 20, VmxInstructionError::kVmcallIncorrectMsegRevisionId = 22,
  VmxInstructionError::kVmxoffUnderDualMonitorTreatmentOfSmisAndSmm = 23, VmxInstructionError::kVmcallInvalidSmmMonitorFeatures = 24, VmxInstructionError::kEntryInvalidVmExecutionControlFieldsInExecutiveVmcs = 25, VmxInstructionError::kEntryEventsBlockedByMovSs = 26,
  VmxInstructionError::kInvalidOperandToInveptInvvpid = 28
}
 See: VM-instruction error numbers. More...
 
enum  memory_type : unsigned __int8 {
  memory_type::kUncacheable = 0, memory_type::kWriteCombining = 1, memory_type::kWriteThrough = 4, memory_type::kWriteProtected = 5,
  memory_type::kWriteBack = 6, memory_type::kUncached = 7
}
 See: Memory Types That Can Be Encoded With PAT Memory Types Recommended for VMCS and Related Data Structures. More...
 
enum  Scaling { Scaling::kNoScaling = 0, Scaling::kScaleBy2, Scaling::kScaleBy4, Scaling::kScaleBy8 }
 See: Format of the VM-Exit Instruction-Information Field as Used for LIDT, LGDT, SIDT, or SGDT. More...
 
enum  AddressSize { AddressSize::k16bit = 0, AddressSize::k32bit, AddressSize::k64bit }
 See: Format of the VM-Exit Instruction-Information Field as Used for LIDT, LGDT, SIDT, or SGDT. More...
 
enum  SegmentRegisters {
  SegmentRegisters::kEs = 0, SegmentRegisters::kCs, SegmentRegisters::kSs, SegmentRegisters::kDs,
  SegmentRegisters::kFs, SegmentRegisters::kGs
}
 See: Format of the VM-Exit Instruction-Information Field as Used for LIDT, LGDT, SIDT, or SGDT. More...
 
enum  GdtrOrIdtrInstructionIdentity { GdtrOrIdtrInstructionIdentity::kSgdt = 0, GdtrOrIdtrInstructionIdentity::kSidt, GdtrOrIdtrInstructionIdentity::kLgdt, GdtrOrIdtrInstructionIdentity::kLidt }
 See: Format of the VM-Exit Instruction-Information Field as Used for LIDT, LGDT, SIDT, or SGDT. More...
 
enum  LdtrOrTrInstructionIdentity { LdtrOrTrInstructionIdentity::kSldt = 0, LdtrOrTrInstructionIdentity::kStr, LdtrOrTrInstructionIdentity::kLldt, LdtrOrTrInstructionIdentity::kLtr }
 See: Format of the VM-Exit Instruction-Information Field as Used for LLDT, LTR, SLDT, and STR. More...
 
enum  MovDrDirection { MovDrDirection::kMoveToDr = 0, MovDrDirection::kMoveFromDr }
 See: Exit Qualification for MOV DR. More...
 
enum  IoInstSizeOfAccess { IoInstSizeOfAccess::k1Byte = 0, IoInstSizeOfAccess::k2Byte = 1, IoInstSizeOfAccess::k4Byte = 3 }
 See: Exit Qualification for I/O Instructions. More...
 
enum  MovCrAccessType { MovCrAccessType::kMoveToCr = 0, MovCrAccessType::kMoveFromCr, MovCrAccessType::kClts, MovCrAccessType::kLmsw }
 See: Exit Qualification for Control-Register Accesses. More...
 
enum  InvEptType : ULONG_PTR { InvEptType::kSingleContextInvalidation = 1, InvEptType::kGlobalInvalidation = 2 }
 See: INVEPT Descriptor. More...
 
enum  InvVpidType : ULONG_PTR { InvVpidType::kIndividualAddressInvalidation = 0, InvVpidType::kSingleContextInvalidation = 1, InvVpidType::kAllContextInvalidation = 2, InvVpidType::kSingleContextInvalidationExceptGlobal = 3 }
 See: INVVPID Descriptor. More...
 
enum  InterruptionType {
  InterruptionType::kExternalInterrupt = 0, InterruptionType::kReserved = 1, InterruptionType::kNonMaskableInterrupt = 2, InterruptionType::kHardwareException = 3,
  InterruptionType::kSoftwareInterrupt = 4, InterruptionType::kPrivilegedSoftwareException = 5, InterruptionType::kSoftwareException = 6, InterruptionType::kOtherEvent = 7
}
 See: Format of the VM-Entry Interruption-Information Field. More...
 
enum  InterruptionVector {
  InterruptionVector::kDivideErrorException = 0, InterruptionVector::kDebugException = 1, InterruptionVector::kNmiInterrupt = 2, InterruptionVector::kBreakpointException = 3,
  InterruptionVector::kOverflowException = 4, InterruptionVector::kBoundRangeExceededException = 5, InterruptionVector::kInvalidOpcodeException = 6, InterruptionVector::kDeviceNotAvailableException = 7,
  InterruptionVector::kDoubleFaultException = 8, InterruptionVector::kCoprocessorSegmentOverrun = 9, InterruptionVector::kInvalidTssException = 10, InterruptionVector::kSegmentNotPresent = 11,
  InterruptionVector::kStackFaultException = 12, InterruptionVector::kGeneralProtectionException = 13, InterruptionVector::kPageFaultException = 14, InterruptionVector::kx87FpuFloatingPointError = 16,
  InterruptionVector::kAlignmentCheckException = 17, InterruptionVector::kMachineCheckException = 18, InterruptionVector::kSimdFloatingPointException = 19, InterruptionVector::kVirtualizationException = 20
}
 See: Format of the VM-Entry Interruption-Information Field. More...
 

Functions

constexpr unsigned int operator<< (_In_ unsigned int lhs, _In_ InterruptionVector rhs)
 Provides << operator for VmEntryInterruptionInformationField. More...
 

Variables

static const SIZE_T kVmxMaxVmcsSize = 4096
 See: OVERVIEW. More...
 
static const ULONG32 kHyperVCpuidInterface = 0x40000001
 A majority of modern hypervisors expose their signatures through CPUID with this CPUID function code to indicate their existence. More...
 

Detailed Description

Defines constants and structures defined by the x86-64 architecture.

Definition in file ia32_type.h.

Typedef Documentation

◆ Gdtr

using Gdtr = Idtr

See: MEMORY-MANAGEMENT REGISTERS.

Definition at line 229 of file ia32_type.h.

◆ GpRegisters

Represents a stack layout after PUSHAx.

Definition at line 107 of file ia32_type.h.

Enumeration Type Documentation

◆ AddressSize

enum AddressSize
strong

See: Format of the VM-Exit Instruction-Information Field as Used for LIDT, LGDT, SIDT, or SGDT.

Enumerator
k16bit 
k32bit 
k64bit 

Definition at line 1297 of file ia32_type.h.

◆ GdtrOrIdtrInstructionIdentity

See: Format of the VM-Exit Instruction-Information Field as Used for LIDT, LGDT, SIDT, or SGDT.

Enumerator
kSgdt 
kSidt 
kLgdt 
kLidt 

Definition at line 1314 of file ia32_type.h.

◆ InterruptionType

enum InterruptionType
strong

See: Format of the VM-Entry Interruption-Information Field.

Enumerator
kExternalInterrupt 
kReserved 
kNonMaskableInterrupt 
kHardwareException 
kSoftwareInterrupt 
kPrivilegedSoftwareException 
kSoftwareException 
kOtherEvent 

Definition at line 1647 of file ia32_type.h.

◆ InterruptionVector

enum InterruptionVector
strong

See: Format of the VM-Entry Interruption-Information Field.

Enumerator
kDivideErrorException 

Error code: None.

kDebugException 

Error code: None.

kNmiInterrupt 

Error code: N/A.

kBreakpointException 

Error code: None.

kOverflowException 

Error code: None.

kBoundRangeExceededException 

Error code: None.

kInvalidOpcodeException 

Error code: None.

kDeviceNotAvailableException 

Error code: None.

kDoubleFaultException 

Error code: Yes.

kCoprocessorSegmentOverrun 

Error code: None.

kInvalidTssException 

Error code: Yes.

kSegmentNotPresent 

Error code: Yes.

kStackFaultException 

Error code: Yes.

kGeneralProtectionException 

Error code: Yes.

kPageFaultException 

Error code: Yes.

kx87FpuFloatingPointError 

Error code: None.

kAlignmentCheckException 

Error code: Yes.

kMachineCheckException 

Error code: None.

kSimdFloatingPointException 

Error code: None.

kVirtualizationException 

Error code: None.

Definition at line 1659 of file ia32_type.h.

◆ InvEptType

enum InvEptType : ULONG_PTR
strong

See: INVEPT Descriptor.

Enumerator
kSingleContextInvalidation 
kGlobalInvalidation 

Definition at line 1597 of file ia32_type.h.

◆ InvVpidType

enum InvVpidType : ULONG_PTR
strong

See: INVVPID Descriptor.

Enumerator
kIndividualAddressInvalidation 
kSingleContextInvalidation 
kAllContextInvalidation 
kSingleContextInvalidationExceptGlobal 

Definition at line 1612 of file ia32_type.h.

◆ IoInstSizeOfAccess

enum IoInstSizeOfAccess
strong

See: Exit Qualification for I/O Instructions.

Enumerator
k1Byte 
k2Byte 
k4Byte 

Definition at line 1388 of file ia32_type.h.

◆ LdtrOrTrInstructionIdentity

See: Format of the VM-Exit Instruction-Information Field as Used for LLDT, LTR, SLDT, and STR.

Enumerator
kSldt 
kStr 
kLldt 
kLtr 

Definition at line 1344 of file ia32_type.h.

◆ memory_type

enum memory_type : unsigned __int8
strong

See: Memory Types That Can Be Encoded With PAT Memory Types Recommended for VMCS and Related Data Structures.

Enumerator
kUncacheable 
kWriteCombining 
kWriteThrough 
kWriteProtected 
kWriteBack 
kUncached 

Definition at line 955 of file ia32_type.h.

◆ MovCrAccessType

enum MovCrAccessType
strong

See: Exit Qualification for Control-Register Accesses.

Enumerator
kMoveToCr 
kMoveFromCr 
kClts 
kLmsw 

Definition at line 1395 of file ia32_type.h.

◆ MovDrDirection

enum MovDrDirection
strong

See: Exit Qualification for MOV DR.

Enumerator
kMoveToDr 
kMoveFromDr 

Definition at line 1352 of file ia32_type.h.

◆ Msr

enum Msr : unsigned int
strong

See: MODEL-SPECIFIC REGISTERS (MSRS)

Enumerator
kIa32ApicBase 
kIa32FeatureControl 
kIa32SysenterCs 
kIa32SysenterEsp 
kIa32SysenterEip 
kIa32Debugctl 
kIa32MtrrCap 
kIa32MtrrDefType 
kIa32MtrrPhysBaseN 
kIa32MtrrPhysMaskN 
kIa32MtrrFix64k00000 
kIa32MtrrFix16k80000 
kIa32MtrrFix16kA0000 
kIa32MtrrFix4kC0000 
kIa32MtrrFix4kC8000 
kIa32MtrrFix4kD0000 
kIa32MtrrFix4kD8000 
kIa32MtrrFix4kE0000 
kIa32MtrrFix4kE8000 
kIa32MtrrFix4kF0000 
kIa32MtrrFix4kF8000 
kIa32VmxBasic 
kIa32VmxPinbasedCtls 
kIa32VmxProcBasedCtls 
kIa32VmxExitCtls 
kIa32VmxEntryCtls 
kIa32VmxMisc 
kIa32VmxCr0Fixed0 
kIa32VmxCr0Fixed1 
kIa32VmxCr4Fixed0 
kIa32VmxCr4Fixed1 
kIa32VmxVmcsEnum 
kIa32VmxProcBasedCtls2 
kIa32VmxEptVpidCap 
kIa32VmxTruePinbasedCtls 
kIa32VmxTrueProcBasedCtls 
kIa32VmxTrueExitCtls 
kIa32VmxTrueEntryCtls 
kIa32VmxVmfunc 
kIa32Efer 
kIa32Star 
kIa32Lstar 
kIa32Fmask 
kIa32FsBase 
kIa32GsBase 
kIa32KernelGsBase 
kIa32TscAux 

Definition at line 576 of file ia32_type.h.

◆ Scaling

enum Scaling
strong

See: Format of the VM-Exit Instruction-Information Field as Used for LIDT, LGDT, SIDT, or SGDT.

Enumerator
kNoScaling 
kScaleBy2 
kScaleBy4 
kScaleBy8 

Definition at line 1289 of file ia32_type.h.

◆ SegmentRegisters

enum SegmentRegisters
strong

See: Format of the VM-Exit Instruction-Information Field as Used for LIDT, LGDT, SIDT, or SGDT.

Enumerator
kEs 
kCs 
kSs 
kDs 
kFs 
kGs 

Definition at line 1304 of file ia32_type.h.

◆ VmcsField

enum VmcsField : unsigned __int32
strong

See: FIELD ENCODING IN VMCS.

Enumerator
kVirtualProcessorId 
kPostedInterruptNotification 
kEptpIndex 
kGuestEsSelector 
kGuestCsSelector 
kGuestSsSelector 
kGuestDsSelector 
kGuestFsSelector 
kGuestGsSelector 
kGuestLdtrSelector 
kGuestTrSelector 
kGuestInterruptStatus 
kPmlIndex 
kHostEsSelector 
kHostCsSelector 
kHostSsSelector 
kHostDsSelector 
kHostFsSelector 
kHostGsSelector 
kHostTrSelector 
kIoBitmapA 
kIoBitmapAHigh 
kIoBitmapB 
kIoBitmapBHigh 
kMsrBitmap 
kMsrBitmapHigh 
kVmExitMsrStoreAddr 
kVmExitMsrStoreAddrHigh 
kVmExitMsrLoadAddr 
kVmExitMsrLoadAddrHigh 
kVmEntryMsrLoadAddr 
kVmEntryMsrLoadAddrHigh 
kExecutiveVmcsPointer 
kExecutiveVmcsPointerHigh 
kTscOffset 
kTscOffsetHigh 
kVirtualApicPageAddr 
kVirtualApicPageAddrHigh 
kApicAccessAddr 
kApicAccessAddrHigh 
kEptPointer 
kEptPointerHigh 
kEoiExitBitmap0 
kEoiExitBitmap0High 
kEoiExitBitmap1 
kEoiExitBitmap1High 
kEoiExitBitmap2 
kEoiExitBitmap2High 
kEoiExitBitmap3 
kEoiExitBitmap3High 
kEptpListAddress 
kEptpListAddressHigh 
kVmreadBitmapAddress 
kVmreadBitmapAddressHigh 
kVmwriteBitmapAddress 
kVmwriteBitmapAddressHigh 
kVirtualizationExceptionInfoAddress 
kVirtualizationExceptionInfoAddressHigh 
kXssExitingBitmap 
kXssExitingBitmapHigh 
kEnclsExitingBitmap 
kEnclsExitingBitmapHigh 
kTscMultiplier 
kTscMultiplierHigh 
kGuestPhysicalAddress 
kGuestPhysicalAddressHigh 
kVmcsLinkPointer 
kVmcsLinkPointerHigh 
kGuestIa32Debugctl 
kGuestIa32DebugctlHigh 
kGuestIa32Pat 
kGuestIa32PatHigh 
kGuestIa32Efer 
kGuestIa32EferHigh 
kGuestIa32PerfGlobalCtrl 
kGuestIa32PerfGlobalCtrlHigh 
kGuestPdptr0 
kGuestPdptr0High 
kGuestPdptr1 
kGuestPdptr1High 
kGuestPdptr2 
kGuestPdptr2High 
kGuestPdptr3 
kGuestPdptr3High 
kGuestIa32Bndcfgs 
kGuestIa32BndcfgsHigh 
kHostIa32Pat 
kHostIa32PatHigh 
kHostIa32Efer 
kHostIa32EferHigh 
kHostIa32PerfGlobalCtrl 
kHostIa32PerfGlobalCtrlHigh 
kPinBasedVmExecControl 
kCpuBasedVmExecControl 
kExceptionBitmap 
kPageFaultErrorCodeMask 
kPageFaultErrorCodeMatch 
kCr3TargetCount 
kVmExitControls 
kVmExitMsrStoreCount 
kVmExitMsrLoadCount 
kVmEntryControls 
kVmEntryMsrLoadCount 
kVmEntryIntrInfoField 
kVmEntryExceptionErrorCode 
kVmEntryInstructionLen 
kTprThreshold 
kSecondaryVmExecControl 
kPleGap 
kPleWindow 
kVmInstructionError 
kVmExitReason 
kVmExitIntrInfo 
kVmExitIntrErrorCode 
kIdtVectoringInfoField 
kIdtVectoringErrorCode 
kVmExitInstructionLen 
kVmxInstructionInfo 
kGuestEsLimit 
kGuestCsLimit 
kGuestSsLimit 
kGuestDsLimit 
kGuestFsLimit 
kGuestGsLimit 
kGuestLdtrLimit 
kGuestTrLimit 
kGuestGdtrLimit 
kGuestIdtrLimit 
kGuestEsArBytes 
kGuestCsArBytes 
kGuestSsArBytes 
kGuestDsArBytes 
kGuestFsArBytes 
kGuestGsArBytes 
kGuestLdtrArBytes 
kGuestTrArBytes 
kGuestInterruptibilityInfo 
kGuestActivityState 
kGuestSmbase 
kGuestSysenterCs 
kVmxPreemptionTimerValue 
kHostIa32SysenterCs 
kCr0GuestHostMask 
kCr4GuestHostMask 
kCr0ReadShadow 
kCr4ReadShadow 
kCr3TargetValue0 
kCr3TargetValue1 
kCr3TargetValue2 
kCr3TargetValue3 
kExitQualification 
kIoRcx 
kIoRsi 
kIoRdi 
kIoRip 
kGuestLinearAddress 
kGuestCr0 
kGuestCr3 
kGuestCr4 
kGuestEsBase 
kGuestCsBase 
kGuestSsBase 
kGuestDsBase 
kGuestFsBase 
kGuestGsBase 
kGuestLdtrBase 
kGuestTrBase 
kGuestGdtrBase 
kGuestIdtrBase 
kGuestDr7 
kGuestRsp 
kGuestRip 
kGuestRflags 
kGuestPendingDbgExceptions 
kGuestSysenterEsp 
kGuestSysenterEip 
kHostCr0 
kHostCr3 
kHostCr4 
kHostFsBase 
kHostGsBase 
kHostTrBase 
kHostGdtrBase 
kHostIdtrBase 
kHostIa32SysenterEsp 
kHostIa32SysenterEip 
kHostRsp 
kHostRip 

Definition at line 648 of file ia32_type.h.

◆ VmxExitReason

enum VmxExitReason : unsigned __int16
strong

See: VMX BASIC EXIT REASONS.

Enumerator
kExceptionOrNmi 
kExternalInterrupt 
kTripleFault 
kInit 
kSipi 
kIoSmi 
kOtherSmi 
kPendingInterrupt 
kNmiWindow 
kTaskSwitch 
kCpuid 
kGetSec 
kHlt 
kInvd 
kInvlpg 
kRdpmc 
kRdtsc 
kRsm 
kVmcall 
kVmclear 
kVmlaunch 
kVmptrld 
kVmptrst 
kVmread 
kVmresume 
kVmwrite 
kVmoff 
kVmon 
kCrAccess 
kDrAccess 
kIoInstruction 
kMsrRead 
kMsrWrite 
kInvalidGuestState 
kMsrLoading 
kUndefined35 
kMwaitInstruction 
kMonitorTrapFlag 
kUndefined38 
kMonitorInstruction 
kPauseInstruction 
kMachineCheck 
kUndefined42 
kTprBelowThreshold 
kApicAccess 
kVirtualizedEoi 
kGdtrOrIdtrAccess 
kLdtrOrTrAccess 
kEptViolation 
kEptMisconfig 
kInvept 
kRdtscp 
kVmxPreemptionTime 
kInvvpid 
kWbinvd 
kXsetbv 
kApicWrite 
kRdrand 
kInvpcid 
kVmfunc 
kUndefined60 
kRdseed 
kUndefined62 
kXsaves 
kXrstors 

Definition at line 855 of file ia32_type.h.

◆ VmxInstructionError

enum VmxInstructionError
strong

See: VM-instruction error numbers.

Enumerator
kVmcallInVmxRootOperation 
kVmclearInvalidAddress 
kVmclearVmxonPoiner 
kVmlaunchNonclearVmcs 
kVmresumeNonlaunchedVmcs 
kVmresumeAfterVmxoff 
kEntryInvalidControlField 
kEntryInvalidHostStateField 
kVmptrldInvalidAddress 
kVmptrldVmxonPointer 
kVmptrldIncorrectVmcsRevisionId 
kUnsupportedVmcsComponent 
kVmwriteReadOnlyVmcsComponent 
kVmxonInVmxRootOperation 
kEntryInvalidExecutiveVmcsPointer 
kEntryNonlaunchedExecutiveVmcs 
kEntryExecutiveVmcsPointerNonVmxonPointer 
kVmcallNonClearVmcs 
kVmcallInvalidVmExitControlFields 
kVmcallIncorrectMsegRevisionId 
kVmxoffUnderDualMonitorTreatmentOfSmisAndSmm 
kVmcallInvalidSmmMonitorFeatures 
kEntryInvalidVmExecutionControlFieldsInExecutiveVmcs 
kEntryEventsBlockedByMovSs 
kInvalidOperandToInveptInvvpid 

Definition at line 925 of file ia32_type.h.

Function Documentation

◆ operator<<()

constexpr unsigned int operator<< ( _In_ unsigned int  lhs,
_In_ InterruptionVector  rhs 
)

Provides << operator for VmEntryInterruptionInformationField.

Definition at line 1683 of file ia32_type.h.

Variable Documentation

◆ kHyperVCpuidInterface

const ULONG32 kHyperVCpuidInterface = 0x40000001
static

A majority of modern hypervisors expose their signatures through CPUID with this CPUID function code to indicate their existence.

HyperPlatform follows this convention.

Definition at line 29 of file ia32_type.h.

◆ kVmxMaxVmcsSize

const SIZE_T kVmxMaxVmcsSize = 4096
static

See: OVERVIEW.

Definition at line 24 of file ia32_type.h.