HV_MESSAGE

SynIC-Nachrichten haben eine feste Größe, die aus einem Nachrichtenheader (der den Nachrichtentyp und Informationen zum Ursprung der Nachricht enthält) gefolgt von der Nutzlast besteht. Nachrichten, die als Antwort auf HvCallPostMessage gesendet werden , enthalten die Port-ID. Abfangen von Nachrichten enthält die Partitions-ID der Partition, deren virtueller Prozessor den Intercept generiert hat. Timer-Intercepts haben keine Ursprungs-ID (d. h. die angegebene ID ist 0 (null).

Das MessagePending-Flag gibt an, ob in der Nachrichtenwarteschlange der synthetischen Interruptquelle nachrichten ausstehend sind. Wenn dies der Ist, muss vom Gast nach dem Leeren des Nachrichtenslots ein "Nachrichtenende" ausgeführt werden. Dies ermöglicht (nur bei Bedarf) deterministische Schreibvorgänge in die EOM MSR. Beachten Sie, dass dieses Flag beim Senden der Nachricht oder zu einem späteren Zeitpunkt vom Hypervisor festgelegt werden kann. Das Flag sollte getestet werden, nachdem der Nachrichtenslot geleert wurde. Wenn es festgelegt ist, gibt es mindestens eine ausstehende Nachricht, und das "Nachrichtenende" sollte ausgeführt werden.

Syntax

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