HV_VMX_ENLIGHTENED_VMCS
Ниже приведено определение типа для просвещенного VMCS.
Синтаксис
#define HV_VMX_ENLIGHTENED_CLEAN_FIELD_NONE (0)
#define HV_VMX_ENLIGHTENED_CLEAN_FIELD_IO_BITMAP (1 << 0)
#define HV_VMX_ENLIGHTENED_CLEAN_FIELD_MSR_BITMAP (1 << 1)
#define HV_VMX_ENLIGHTENED_CLEAN_FIELD_CONTROL_GRP2 (1 << 2)
#define HV_VMX_ENLIGHTENED_CLEAN_FIELD_CONTROL_GRP1 (1 << 3)
#define HV_VMX_ENLIGHTENED_CLEAN_FIELD_CONTROL_PROC (1 << 4)
#define HV_VMX_ENLIGHTENED_CLEAN_FIELD_CONTROL_EVENT (1 << 5)
#define HV_VMX_ENLIGHTENED_CLEAN_FIELD_CONTROL_ENTRY (1 << 6)
#define HV_VMX_ENLIGHTENED_CLEAN_FIELD_CONTROL_EXCPN (1 << 7)
#define HV_VMX_ENLIGHTENED_CLEAN_FIELD_CRDR (1 << 8)
#define HV_VMX_ENLIGHTENED_CLEAN_FIELD_CONTROL_XLAT (1 << 9)
#define HV_VMX_ENLIGHTENED_CLEAN_FIELD_GUEST_BASIC (1 << 10)
#define HV_VMX_ENLIGHTENED_CLEAN_FIELD_GUEST_GRP1 (1 << 11)
#define HV_VMX_ENLIGHTENED_CLEAN_FIELD_GUEST_GRP2 (1 << 12)
#define HV_VMX_ENLIGHTENED_CLEAN_FIELD_HOST_POINTER (1 << 13)
#define HV_VMX_ENLIGHTENED_CLEAN_FIELD_HOST_GRP1 (1 << 14)
#define HV_VMX_ENLIGHTENED_CLEAN_FIELD_ENLIGHTENMENTSCONTROL (1 << 15)
typedef struct
{
UINT32 VersionNumber;
UINT32 AbortIndicator;
UINT16 HostEsSelector;
UINT16 HostCsSelector;
UINT16 HostSsSelector;
UINT16 HostDsSelector;
UINT16 HostFsSelector;
UINT16 HostGsSelector;
UINT16 HostTrSelector;
UINT64 HostPat;
UINT64 HostEfer;
UINT64 HostCr0;
UINT64 HostCr3;
UINT64 HostCr4;
UINT64 HostSysenterEspMsr;
UINT64 HostSysenterEipMsr;
UINT64 HostRip;
UINT32 HostSysenterCsMsr;
UINT32 PinControls;
UINT32 ExitControls;
UINT32 SecondaryProcessorControls;
HV_GPA IoBitmapA;
HV_GPA IoBitmapB;
HV_GPA MsrBitmap;
UINT16 GuestEsSelector;
UINT16 GuestCsSelector;
UINT16 GuestSsSelector;
UINT16 GuestDsSelector;
UINT16 GuestFsSelector;
UINT16 GuestGsSelector;
UINT16 GuestLdtrSelector;
UINT16 GuestTrSelector;
UINT32 GuestEsLimit;
UINT32 GuestCsLimit;
UINT32 GuestSsLimit;
UINT32 GuestDsLimit;
UINT32 GuestFsLimit;
UINT32 GuestGsLimit;
UINT32 GuestLdtrLimit;
UINT32 GuestTrLimit;
UINT32 GuestGdtrLimit;
UINT32 GuestIdtrLimit;
UINT32 GuestEsAttributes;
UINT32 GuestCsAttributes;
UINT32 GuestSsAttributes;
UINT32 GuestDsAttributes;
UINT32 GuestFsAttributes;
UINT32 GuestGsAttributes;
UINT32 GuestLdtrAttributes;
UINT32 GuestTrAttributes;
UINT64 GuestEsBase;
UINT64 GuestCsBase;
UINT64 GuestSsBase;
UINT64 GuestDsBase;
UINT64 GuestFsBase;
UINT64 GuestGsBase;
UINT64 GuestLdtrBase;
UINT64 GuestTrBase;
UINT64 GuestGdtrBase;
UINT64 GuestIdtrBase;
UINT64 Rsvd1[3];
HV_GPA ExitMsrStoreAddress;
HV_GPA ExitMsrLoadAddress;
HV_GPA EntryMsrLoadAddress;
UINT64 Cr3Target0;
UINT64 Cr3Target1;
UINT64 Cr3Target2;
UINT64 Cr3Target3;
UINT32 PfecMask;
UINT32 PfecMatch;
UINT32 Cr3TargetCount;
UINT32 ExitMsrStoreCount;
UINT32 ExitMsrLoadCount;
UINT32 EntryMsrLoadCount;
UINT64 TscOffset;
HV_GPA VirtualApicPage;
HV_GPA GuestWorkingVmcsPtr;
UINT64 GuestIa32DebugCtl;
UINT64 GuestPat;
UINT64 GuestEfer;
UINT64 GuestPdpte0;
UINT64 GuestPdpte1;
UINT64 GuestPdpte2;
UINT64 GuestPdpte3;
UINT64 GuestPendingDebugExceptions;
UINT64 GuestSysenterEspMsr;
UINT64 GuestSysenterEipMsr;
UINT32 GuestSleepState;
UINT32 GuestSysenterCsMsr;
UINT64 Cr0GuestHostMask;
UINT64 Cr4GuestHostMask;
UINT64 Cr0ReadShadow;
UINT64 Cr4ReadShadow;
UINT64 GuestCr0;
UINT64 GuestCr3;
UINT64 GuestCr4;
UINT64 GuestDr7;
UINT64 HostFsBase;
UINT64 HostGsBase;
UINT64 HostTrBase;
UINT64 HostGdtrBase;
UINT64 HostIdtrBase;
UINT64 HostRsp;
UINT64 EptRoot;
UINT16 Vpid;
UINT16 Rsvd2[3];
UINT64 Rsvd3[5];
UINT64 ExitEptFaultGpa;
UINT32 ExitInstructionError;
UINT32 ExitReason;
UINT32 ExitInterruptionInfo;
UINT32 ExitExceptionErrorCode;
UINT32 ExitIdtVectoringInfo;
UINT32 ExitIdtVectoringErrorCode;
UINT32 ExitInstructionLength;
UINT32 ExitInstructionInfo;
UINT64 ExitQualification;
UINT64 ExitIoInstructionEcx;
UINT64 ExitIoInstructionEsi;
UINT64 ExitIoInstructionEdi;
UINT64 ExitIoInstructionEip;
UINT64 GuestLinearAddress;
UINT64 GuestRsp;
UINT64 GuestRflags;
UINT32 GuestInterruptibility;
UINT32 ProcessorControls;
UINT32 ExceptionBitmap;
UINT32 EntryControls;
UINT32 EntryInterruptInfo;
UINT32 EntryExceptionErrorCode;
UINT32 EntryInstructionLength;
UINT32 TprThreshold;
UINT64 GuestRip;
UINT32 CleanFields;
UINT32 Rsvd4;
UINT32 SyntheticControls;
union
{
UINT32 AsUINT32;
struct
{
UINT32 NestedFlushVirtualHypercall : 1;
UINT32 MsrBitmap : 1;
UINT32 Reserved : 30;
};
} EnlightenmentsControl;
UINT32 VpId;
UINT32 Rsvd5;
UINT64 VmId;
UINT64 PartitionAssistPage;
UINT64 Rsvd6[4];
UINT64 GuestBndcfgs;
UINT64 GuestPerfGlobalCtrl;
UINT64 GuestSCet;
UINT64 GuestSsp;
UINT64 GuestInterruptSspTableAddr;
UINT64 GuestLbrCtl;
UINT64 Rsvd7[2];
UINT64 XssExitingBitmap;
UINT64 EnclsExitingBitmap;
UINT64 HostPerfGlobalCtrl;
UINT64 TscMultiplier;
UINT64 HostSCet;
UINT64 HostSsp;
UINT64 HostInterruptSspTableAddr;
UINT64 Rsvd8;
} HV_VMX_ENLIGHTENED_VMCS;
Физическая кодировка VMCS
В следующей таблице сопоставляется кодировка Intel physical VMCS с соответствующим просвещенным именем поля VMCS, а также соответствующим именем чистого поля. Обратите внимание, что некоторые просвещенные поля VMCS являются искусственными и, следовательно, не имеют соответствующей физической кодировки VMCS.
Кодировка VMCS | Просвещенное имя | Размер | Чистое имя поля |
---|---|---|---|
0x0000681e | GuestRip | 8 | None |
0x0000401c | TprThreshold | 4 | None |
0x0000681c | GuestRsp | 8 | GUEST_BASIC |
0x00006820 | GuestRflags | 8 | GUEST_BASIC |
0x00004824 | GuestInterruptibility | 4 | GUEST_BASIC |
0x00004002 | ProcessorControls | 4 | CONTROL_PROC |
0x00004004 | ExceptionBitmap | 4 | CONTROL_EXCPN |
0x00004012 | EntryControls | 4 | CONTROL_ENTRY |
0x00004016 | EntryInterruptInfo | 4 | CONTROL_EVENT |
0x00004018 | EntryExceptionErrorCode | 4 | CONTROL_EVENT |
0x0000401a | EntryInstructionLength | 4 | CONTROL_EVENT |
0x00000c00 | HostEsSelector | 2 | HOST_GRP1 |
0x00000c02 | HostCsSelector | 2 | HOST_GRP1 |
0x00000c04 | HostSsSelector | 2 | HOST_GRP1 |
0x00000c06 | HostDsSelector | 2 | HOST_GRP1 |
0x00000c08 | HostFsSelector | 2 | HOST_GRP1 |
0x00000c0a | HostGsSelector | 2 | HOST_GRP1 |
0x00000c0c | HostTrSelector | 2 | HOST_GRP1 |
0x00002c00 | HostPat | 8 | HOST_GRP1 |
0x00002c02 | HostEfer | 8 | HOST_GRP1 |
0x00006c00 | HostCr0 | 8 | HOST_GRP1 |
0x00006c02 | HostCr3 | 8 | HOST_GRP1 |
0x00006c04 | HostCr4 | 8 | HOST_GRP1 |
0x00006c10 | HostSysenterEspMsr | 8 | HOST_GRP1 |
0x00006c12 | HostSysenterEipMsr | 8 | HOST_GRP1 |
0x00006c16 | HostSysenterCsMsr | 4 | HOST_GRP1 |
0x00004000 | PinControls | 4 | CONTROL_GRP1 |
0x0000400c | ExitControls | 4 | CONTROL_GRP1 |
0x0000401e | SecondaryProcessorControls | 4 | CONTROL_GRP1 |
0x00002000 | IoBitmapA | 8 | IO_BITMAP |
0x00002002 | IoBitmapB | 8 | IO_BITMAP |
0x00002004 | MsrBitmap | 8 | MSR_BITMAP |
0x00000800 | GuestEsSelector | 2 | GUEST_GRP2 |
0x00000802 | GuestCsSelector | 2 | GUEST_GRP2 |
0x00000804 | GuestSsSelector | 2 | GUEST_GRP2 |
0x00000806 | GuestDsSelector | 2 | GUEST_GRP2 |
0x00000808 | GuestFsSelector | 2 | GUEST_GRP2 |
0x0000080a | GuestGsSelector | 2 | GUEST_GRP2 |
0x0000080c | GuestLdtrSelector | 2 | GUEST_GRP2 |
0x0000080e | GuestTrSelector | 2 | GUEST_GRP2 |
0x00004800 | GuestEsLimit | 4 | GUEST_GRP2 |
0x00004802 | GuestCsLimit | 4 | GUEST_GRP2 |
0x00004804 | GuestSsLimit | 4 | GUEST_GRP2 |
0x00004806 | GuestDsLimit | 4 | GUEST_GRP2 |
0x00004808 | GuestFsLimit | 4 | GUEST_GRP2 |
0x0000480a | GuestGsLimit | 4 | GUEST_GRP2 |
0x0000480c | GuestLdtrLimit | 4 | GUEST_GRP2 |
0x0000480e | GuestTrLimit | 4 | GUEST_GRP2 |
0x00004810 | GuestGdtrLimit | 4 | GUEST_GRP2 |
0x00004812 | GuestIdtrLimit | 4 | GUEST_GRP2 |
0x00004814 | GuestEsAttributes | 4 | GUEST_GRP2 |
0x00004816 | GuestCsAttributes | 4 | GUEST_GRP2 |
0x00004818 | GuestSsAttributes | 4 | GUEST_GRP2 |
0x0000481a | GuestDsAttributes | 4 | GUEST_GRP2 |
0x0000481c | GuestFsAttributes | 4 | GUEST_GRP2 |
0x0000481e | GuestGsAttributes | 4 | GUEST_GRP2 |
0x00004820 | GuestLdtrAttributes | 4 | GUEST_GRP2 |
0x00004822 | GuestTrAttributes | 4 | GUEST_GRP2 |
0x00006806 | GuestEsBase | 8 | GUEST_GRP2 |
0x00006808 | GuestCsBase | 8 | GUEST_GRP2 |
0x0000680a | GuestSsBase | 8 | GUEST_GRP2 |
0x0000680c | GuestDsBase | 8 | GUEST_GRP2 |
0x0000680e | GuestFsBase | 8 | GUEST_GRP2 |
0x00006810 | GuestGsBase | 8 | GUEST_GRP2 |
0x00006812 | GuestLdtrBase | 8 | GUEST_GRP2 |
0x00006814 | GuestTrBase | 8 | GUEST_GRP2 |
0x00006816 | GuestGdtrBase | 8 | GUEST_GRP2 |
0x00006818 | GuestIdtrBase | 8 | GUEST_GRP2 |
0x00002010 | TscOffset | 8 | CONTROL_GRP2 |
0x00002012 | VirtualApicPage | 8 | CONTROL_GRP2 |
0x00002800 | GuestWorkingVmcsPtr | 8 | GUEST_GRP1 |
0x00002802 | GuestIa32DebugCtl | 8 | GUEST_GRP1 |
0x00002804 | GuestPat | 8 | GUEST_GRP1 |
0x00002806 | GuestEfer | 8 | GUEST_GRP1 |
0x0000280a | GuestPdpte0 | 8 | GUEST_GRP1 |
0x0000280c | GuestPdpte1 | 8 | GUEST_GRP1 |
0x0000280e | GuestPdpte2 | 8 | GUEST_GRP1 |
0x00002810 | GuestPdpte3 | 8 | GUEST_GRP1 |
0x00006822 | GuestPendingDebugExceptions | 8 | GUEST_GRP1 |
0x00006824 | GuestSysenterEspMsr | 8 | GUEST_GRP1 |
0x00006826 | GuestSysenterEipMsr | 8 | GUEST_GRP1 |
0x00004826 | GuestSleepState | 4 | GUEST_GRP1 |
0x0000482a | GuestSysenterCsMsr | 4 | GUEST_GRP1 |
0x00006000 | Cr0GuestHostMask | 8 | CRDR |
0x00006002 | Cr4GuestHostMask | 8 | CRDR |
0x00006004 | Cr0ReadShadow | 8 | CRDR |
0x00006006 | Cr4ReadShadow | 8 | CRDR |
0x00006800 | GuestCr0 | 8 | CRDR |
0x00006802 | GuestCr3 | 8 | CRDR |
0x00006804 | GuestCr4 | 8 | CRDR |
0x0000681a | GuestDr7 | 8 | CRDR |
0x00006c06 | HostFsBase | 8 | HOST_POINTER |
0x00006c08 | HostGsBase | 8 | HOST_POINTER |
0x00006c0a | HostTrBase | 8 | HOST_POINTER |
0x00006c0c | HostGdtrBase | 8 | HOST_POINTER |
0x00006c0e | HostIdtrBase | 8 | HOST_POINTER |
0x00006c14 | HostRsp | 8 | HOST_POINTER |
0x00000000 | Vpid | 2 | CONTROL_XLAT |
0x0000201a | EptRoot | 8 | CONTROL_XLAT |
0x00002812 | GuestBndcfgs | 8 | GUEST_GRP1 |
0x00002808 | GuestPerfGlobalCtrl | 8 | GUEST_GRP1 |
0x00006828 | GuestSCet | 8 | GUEST_GRP1 |
0x0000682A | GuestSsp | 8 | GUEST_BASIC |
0x0000682C | GuestInterruptSspTableAddr | 8 | GUEST_GRP1 |
0x00002816 | GuestLbrCtl | 8 | GUEST_GRP1 |
0x0000202c | XssExitingBitmap | 8 | CONTROL_GRP2 |
0x0000202e | EnclsExitingBitmap | 8 | CONTROL_GRP2 |
0x00002C04 | HostPerfGlobalCtrl | 8 | HOST_GRP1 |
0x00002032 | TscMultiplier | 8 | CONTROL_GRP2 |
0x00006C18 | HostSCet | 8 | HOST_GRP1 |
0x00006C1A | HostSsp | 8 | HOST_GRP1 |
0x00006C1C | HostInterruptSspTableAddr | 8 | HOST_GRP1 |
0x00002400 | ExitEptFaultGpa | 8 | NONE (только для чтения) |
0x00004400 | ExitInstructionError | 4 | NONE (только для чтения) |
0x00004402 | ExitReason | 4 | NONE (только для чтения) |
0x00004404 | ExitInterruptionInfo | 4 | NONE (только для чтения) |
0x00004406 | ExitExceptionErrorCode | 4 | NONE (только для чтения) |
0x00004408 | ExitIdtVectoringInfo | 4 | NONE (только для чтения) |
0x0000440a | ExitIdtVectoringErrorCode | 4 | NONE (только для чтения) |
0x0000440c | ExitInstructionLength | 4 | NONE (только для чтения) |
0x0000440e | ExitInstructionInfo | 4 | NONE (только для чтения) |
0x00006400 | ExitQualification | 8 | NONE (только для чтения) |
0x00006402 | ExitIoInstructionEcx | 8 | NONE (только для чтения) |
0x00006404 | ExitIoInstructionEsi | 8 | NONE (только для чтения) |
0x00006406 | ExitIoInstructionEdi | 8 | NONE (только для чтения) |
0x00006408 | ExitIoInstructionEip | 8 | NONE (только для чтения) |
0x0000640a | GuestLinearAddress | 8 | NONE (только для чтения) |