Поделиться через


функция обратного вызова FN_VMB_PACKET_SEND_WITH_EXTERNAL_MDL (vmbuskernelmodeclientlibapi.h)

[Некоторые сведения связаны с предварительно выпущенным продуктом, который может быть существенно изменен до его коммерческого выпуска. Корпорация Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых в отношении информации, предоставленной здесь.]

Функция 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

Длина буфера в байтах в параметре буфера.

ExternalDataMdl

MDL, описывающий буфер данных, связанный с пакетом.

MdlOffset

Смещение из буфера, описанного MDL, в котором начинаются данные.

MdlLength

Длина вложенного буфера для отправки. Используйте 0 для всего MDL.

Flags

Флаги. Ниже приведены соответствующие флаги:

Ценность Значение
VMBUS_CHANNEL_FORMAT_FLAG_WAIT_FOR_COMPLETION
Этот пакет нельзя считать полным, и его ресурсы не могут быть освобождены до тех пор, пока пакет завершения не возвращается из противоположной конечной точки. Этот флаг должен быть задан.
VMBUS_CHANNEL_FORMAT_FLAG_FORCE_MDL_LENGTH
Всегда используйте MdlLength для длины MDL внешних данных, даже если длина этой длины превышает значение ByteCount поля MDL. Это позволяет превышать длину MDL путем округления до границы страницы. Если этот флаг задан, используется только первый MDL в цепочке MDL.
VMBUS_CHANNEL_FORMAT_FLAG_PAGED_BUFFER
Встроенный буфер страницы и должен обрабатываться соответствующим образом, что означает, что его необходимо скопировать перед вводом уровня DPC. Проверка буферов пользовательского режима или обработка нарушений доступа является ответственностью вызывающего объекта.

Возвращаемое значение

Возвращает STATUS_SUCCESS, если операция выполнена успешно, или соответствующий код ошибки NTSTATUS в противном случае.

Замечания

Эта функция отличается от функции VmbPacketSend, которая позволяет передавать смещение MDL и длину MDL.

Важный

Эта функция вызывается через клиентский интерфейс клиентской библиотеки режима ядра VMBus (KMCL), предоставляемый драйвером шины Vmbkmcl.sys. Это клиентская функция, доступ к ней осуществляется из структуры KMCL_CLIENT_INTERFACE_V1.

Дополнительные сведения см. в разделе "Примечания" KMCL_CLIENT_INTERFACE_V1.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 10 версии 1803
заголовка vmbuskernelmodeclientlibapi.h

См. также

VmbPacketSend