EVT_VMB_CHANNEL_SUSPEND回调函数 (vmbuskernelmodeclientlibapi.h)

[一些信息与预发布产品相关,在商业发行之前可能发生实质性修改。 Microsoft 对于此处提供的信息不作任何明示或默示的担保。]

当通道被客户端终结点关闭或删除时,会在服务器终结点调用 EvtVmbChannelSuspend 回调函数,这将将服务器移动到“已停止”状态。

语法

EVT_VMB_CHANNEL_SUSPEND EvtVmbChannelSuspend;

void EvtVmbChannelSuspend(
  [in] VMBCHANNEL Channel
)
{...}

参数

[in] Channel

暂停的通道。

返回值

备注

创建通道后,客户端驱动程序可以使用 VMB_CHANNEL_STATE_CHANGE_CALLBACKS_INIT 函数为状态更改指定回调函数,包括 EvtVmbChannelSuspend

如果使用 VmbChannelPause 函数挂起正在运行的通道,或者通过使用 VmbChannelDisable 函数或通过相反终结点关闭,则内核模式客户端库 (KMCL) 调用 EvtVmbChannelSuspend。 此回调保证不再运行或排队的 EvtVmbChannelProcessPacket 回调。

EvtVmbChannelSuspend 还通知 KMCL 客户端最终必须完成使用 EvtVmbChannelProcessPacket 指示的所有未完成数据包,这些数据包不必同步完成。 KMCL 阻止,直到它们完成。

KMCL 客户端还必须通过使用 VmbPacketSendVmbPacketSendWithExternalMdlVmbPacketSendWithExternalPfns 函数停止发送数据包。

在调用 EvtVmbChannelSuspend 之前,对活动通道上的 VmbChannelPause 的调用将阻止,并且不再存在未完成的传入数据包。
调用 VmbChannelDisable 块,直到通道暂停和关闭。

此函数可以保证完成未完成的事务。 客户端可能是 bug、恶意的,或者来宾虚拟机可能已崩溃。 服务器必须停用任何未完成的事务(可能通过取消这些事务)。

要求

要求
目标平台 Windows
标头 vmbuskernelmodeclientlibapi.h (包括 VmbusKernelModeClientLibApi.h)
IRQL PASSIVE_LEVEL

另请参阅

EvtVmbChannelProcessPacket

VMB_CHANNEL_STATE_CHANGE_CALLBACKS_INIT

VmbChannelDisable

VmbChannelPause

VmbPacketSend

VmbPacketSendWithExternalMdl

VmbPacketSendWithExternalPfns