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