FN_VMB_PACKET_SEND_WITH_EXTERNAL_MDL回调函数 (vmbuskernelmodeclientlibapi.h)

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

VmbPacketSendWithExternalMdl 函数将数据发送到数据包缓冲区或外部数据内存描述符列表 (MDL) 。 函数将该数据与 VMBus 数据包对象相关联,该对象表示事务整个生存期的数据包。

语法

FN_VMB_PACKET_SEND_WITH_EXTERNAL_MDL FnVmbPacketSendWithExternalMdl;

NTSTATUS FnVmbPacketSendWithExternalMdl(
  __drv_aliasesMem VMBPACKET PacketObject,
  PVOID Buffer,
  UINT32 BufferLength,
  PMDL ExternalDataMdl,
  UINT32 MdlOffset,
  UINT32 MdlLength,
  UINT32 Flags
)
{...}

参数

PacketObject

VMBus 数据包对象的句柄。

Buffer

包含通过 VMBus 环形缓冲区发送的命令数据包的缓冲区。

BufferLength

Buffer 参数中缓冲区的长度(以字节为单位)。

ExternalDataMdl

描述与数据包关联的数据缓冲区的 MDL。

MdlOffset

数据开始位置的 MDL 所描述的缓冲区的偏移量。

MdlLength

要发送的子缓冲区的长度。 对整个 MDL 使用 0。

Flags

标志。 下面是相关的标志:

含义
VMBUS_CHANNEL_FORMAT_FLAG_WAIT_FOR_COMPLETION
在完成数据包从另一终结点返回之前,无法将此数据包视为已完成,并且无法释放其资源。 必须设置此标志。
VMBUS_CHANNEL_FORMAT_FLAG_FORCE_MDL_LENGTH
始终将 MdlLength 用于外部数据 MDL 的长度,即使此长度长于 MDL 的 ByteCount 字段也是如此。 这仅允许通过向上舍入到页边界来超过 MDL 的长度。 如果设置了此标志,则仅使用 MDL 链中的第一个 MDL。
VMBUS_CHANNEL_FORMAT_FLAG_PAGED_BUFFER
内联缓冲区是分页的,必须相应地进行处理,这意味着在进入 DPC 级别之前必须复制它。 探测用户模式缓冲区或处理访问冲突由调用方负责。

返回值

如果操作成功,则返回STATUS_SUCCESS,否则返回相应的 NTSTATUS 错误代码。

注解

此函数与 VmbPacketSend 函数的不同之处在于,它允许传递 MDL 偏移量和 MDL 长度。

重要

此函数通过 VMBus 内核模式客户端库 (Vmbkmcl.sys 总线驱动程序提供的 KMCL) 接口调用。 这是从 KMCL_CLIENT_INTERFACE_V1 结构访问 客户端函数。

有关详细信息,请参阅 KMCL_CLIENT_INTERFACE_V1的“备注”部分。

要求

要求
最低受支持的客户端 Windows 10 版本 1803
标头 vmbuskernelmodeclientlibapi.h

另请参阅

VmbPacketSend