HvCallPostMessage

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 页处于禁用状态。