Partilhar via


HV_X64_SEGMENT_REGISTER

O estado de registro do segmento é codificado da seguinte maneira:

Sintaxe

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;

O limite é codificado como um valor de 32 bits. Para segmentos de modo longo X64, o limite é ignorado. Para segmentos x86 herdados, o limite deve ser expressível dentro dos limites da arquitetura do processador x64. Por exemplo, se o bit "G" (granularidade) for definido dentro dos atributos de um código ou segmento de dados, os 12 bits de ordem baixa do limite deverão ser 1s.

O bit "Present" controla se o segmento age como um segmento nulo (ou seja, se um acesso à memória executado por meio desse segmento gera uma falha de #GP).

Os IA32_FS_BASE e IA32_GS_BASE msrs não são definidos na lista de registros, pois são aliases para o elemento base da estrutura de registro de segmento. Use HvX64RegisterFs e HvX64RegisterGs e a estrutura acima.