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 и структуру выше.