SynIC 메시지는 메시지 헤더(메시지 유형 및 메시지 시작 위치에 대한 정보 포함)와 페이로드로 구성된 고정 크기입니다. HvCallPostMessage에 대한 응답으로 전송되는 메시지에는 포트 ID가 포함됩니다. 인터셉트 메시지에는 가상 프로세서가 인터셉션을 생성한 파티션의 파티션 ID가 포함됩니다. 타이머 인터셉트에는 원본 ID가 없습니다(즉, 지정된 ID가 0임).
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;