HvCallPostMessage hypercall 尝试 post (也就是说,将消息) 异步发送到指定的连接,该连接具有关联的目标端口。 如果成功发布消息,则会将其排队等候传递到与端口关联的分区中的虚拟处理器。
接口
HV_STATUS
HvCallPostMessage(
   _In_ HV_CONNECTION_ID ConnectionId,
   _In_ HV_MESSAGE_TYPE MessageType,
   _In_ UINT32 PayloadSize,
   _In_reads_bytes_(PayloadSize) PCVOID Message
   );
调用代码
0x005C (简单) 
输入参数
| 名称 | Offset | 大小 | 提供的信息 | 
|---|---|---|---|
| ConnectionId | 0 | 4 | 指定连接的 ID。 | 
| RsvdZ | 4 | 4 | |
| MessageType | 8 | 4 | 指定将显示在消息头中的消息类型。 调用方可以指定任何32位消息类型,该类型的最高有效位被清除,但零除外。 | 
| PayloadSize | 12 | 4 | 指定包含在消息中的字节数。 | 
| Message | 16 | 240 | 指定消息的负载,最大为240字节。 只有前 n 个字节会实际发送到目标分区,其中 n 在 PayloadSize 参数中提供。 | 
返回值
| 状态代码 | 错误条件 | 
|---|---|
| HV_STATUS_ACCESS_DENIED | 调用方的分区不具有 PostMessages 特权。 | 
| HV_STATUS_INVALID_CONNECTION_ID | 指定的连接 ID 无效。 | 
| HV_STATUS_INVALID_PORT_ID | 与指定连接关联的端口已被删除。 | 
| 与指定连接关联的端口属于未处于 "活动" 状态的分区。 | |
| 与指定连接关联的端口不是 "message" 类型端口。 | |
| HV_STATUS_INVALID_PARAMETER | 设置指定消息类型的最高有效位。 | 
| MessageType 参数指定的值为零。 | |
| 指定的有效负载大小超过240个字节。 | |
| HV_STATUS_INSUFFICIENT_BUFFERS | 端口没有可用的来宾消息缓冲区。 | 
| HV_STATUS_INVALID_VP_INDEX | 目标副总裁不再存在,或者没有可向其发送消息的可用 VPs。 | 
| HV_STATUS_INVALID_SYNIC_STATE | 目标副总裁的 SynIC 已禁用,无法接受已发布的消息。 | 
| 目标副总裁的 SIM 页处于禁用状态。 |