HV_MESSAGE

SynIC 消息是由消息标头组成的固定大小 (其中包括消息类型以及消息的起源位置) 后跟有效负载的信息。 为响应 HvCallPostMessage 而发送的消息包含端口 ID。 截获消息包含其虚拟处理器生成截获的分区的分区 ID。 计时器截获没有源 ID (即指定的 ID 为零) 。

MessagePending 标志指示在综合中断源的消息队列中是否有任何挂起的消息。 如果有,则在清空消息槽后,来宾必须执行 "消息结束"。 这仅在需要时才允许向 EOM MSR (提供) 。 请注意,在消息传递或之后的任何时间,虚拟机监控程序可能会设置此标志。 标记应在消息槽已清空后进行测试,如果已设置,则应执行一个或多个挂起消息和 "结尾消息"。

语法

#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;