HV_X64_SEGMENT_REGISTER
Состояние регистра сегмента кодируется следующим образом:
Синтаксис
typedef struct
{
UINT64 Base;
UINT32 Limit;
UINT16 Selector;
union
{
struct
{
UINT16 SegmentType:4;
UINT16 NonSystemSegment:1;
UINT16 DescriptorPrivilegeLevel:2;
UINT16 Present:1;
UINT16 Reserved:4;
UINT16 Available:1;
UINT16 Long:1;
UINT16 Default:1;
UINT16 Granularity:1;
};
UINT16 Attributes;
};
} HV_X64_SEGMENT_REGISTER;
Ограничение кодируется как 32-разрядное значение. Для сегментов x64 с длинным режимом ограничение игнорируется. Для устаревших сегментов x86 ограничение должно быть выражено в пределах архитектуры процессора x64. Например, если бит "G" (степень детализации) задан в атрибутах кода или сегмента данных, 12 битов нижнего порядка ограничения должны быть равны 1 с.
Бит "Present" определяет, действует ли сегмент как пустой сегмент (то есть, вызывает ли доступ к памяти через этот сегмент #GP ошибку).
MsR IA32_FS_BASE и IA32_GS_BASE не определены в списке регистров, так как они являются псевдонимами базового элемента структуры регистра сегмента. Используйте HvX64RegisterFs и HvX64RegisterGs и структуру выше.