Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
As mensagens SynIC são do tamanho fixo composto de um cabeçalho de mensagem (que inclui o tipo de mensagem e as informações sobre onde a mensagem foi originada) seguida pela carga. As mensagens enviadas em resposta a HvCallPostMessage contêm a ID da porta. As mensagens de interceptação contêm a ID da partição cujo processador virtual gerou a interceptação. As interceptações do temporizador não têm uma ID de origem (ou seja, a ID especificada é zero).
O sinalizador MessagePending indica se há alguma mensagem pendente na fila de mensagens da origem de interrupção sintética. Se houver, um "fim da mensagem" deve ser executado pelo convidado depois de esvaziar o slot de mensagem. Isso permite gravações oportunistas no EOM MSR (somente quando necessário). Observe que esse sinalizador pode ser definido pelo hipervisor na entrega de mensagens ou a qualquer momento depois. O sinalizador deve ser testado depois que o slot de mensagem foi esvaziado e, se definido, há uma ou mais mensagens pendentes e o "fim da mensagem" deve ser executado.
Sintaxe
#define HV_MESSAGE_SIZE 256
#define HV_MESSAGE_MAX_PAYLOAD_BYTE_COUNT 240
#define HV_MESSAGE_MAX_PAYLOAD_QWORD_COUNT 30
typedef struct
{
UINT8 MessagePending:1;
UINT8 Reserved:7;
} HV_MESSAGE_FLAGS;
typedef struct
{
HV_MESSAGE_TYPE MessageType;
UINT8 PayloadSize;
HV_MESSAGE_FLAGS MessageFlags;
UINT16 Reserved;
union
{
UINT64 OriginationId;
HV_PARTITION_ID Sender;
HV_PORT_ID Port;
};
} HV_MESSAGE_HEADER;
typedef struct
{
HV_MESSAGE_HEADER Header;
UINT64 Payload[HV_MESSAGE_MAX_PAYLOAD_QWORD_COUNT];
} HV_MESSAGE;