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

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

Функция VmbChannelPacketGetExternalData получает любой внешний дескриптор памяти Списки (MDLs), связанный с пакетом во время обработки пакета.

Синтаксис

FN_VMB_CHANNEL_PACKET_GET_EXTERNAL_DATA FnVmbChannelPacketGetExternalData;

NTSTATUS FnVmbChannelPacketGetExternalData(
  VMBPACKETCOMPLETION PacketCompletionContext,
  UINT32 Flags,
  PMDL *Mdl
)
{...}

Параметры

PacketCompletionContext

Дескриптор, который идентифицирует входящий пакет и используется для ссылки на пакет после завершения обработки.

Flags

Флаги, управляющие способом сопоставления MDL. Возможные значения флагов:

Значение Значение
VMBUS_CHANNEL_PACKET_EXTERNAL_DATA_FLAG_READ_ONLY
Сопоставьте MDL как доступный только для чтения.

Mdl

Указатель на сопоставленный MDL.

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

VmbChannelPacketGetExternalData возвращает код состояния. Если эта функция возвращает STATUS_PENDING, вызывающий объект должен вернуться из обратного вызова обработки пакетов, который будет вызываться снова, возможно, в другом IRQL, когда внешние данные будут готовы. На этом этапе вызов этой функции будет выполнен успешно и возвратит внешние данные.

Комментарии

Создание MDL, представляющего память, описанную этой транзакцией, приводит к закреплению этих областей виртуальной машины в памяти на оставшуюся часть времени существования транзакции. Это может привести к тому, что функция возвращает STATUS_PENDING, так как регионы виртуальной машины, возможно, потребуется выстраивать.

MDL, возвращаемый этой функцией, описывает память, которая уже заблокирована на месте. Поэтому нет необходимости вызывать функцию MmProbeAndLockPages . Однако MDL не будет иметь ни виртуального адреса в пользовательском режиме, ни виртуального адреса в режиме ядра. Если драйверу, который вызывает эту функцию, требуется виртуальный адрес для управления памятью в виртуальной машине, этот драйвер должен вызвать MmMapLockedPagesSpecifyCache или MmGetSystemAddressForMdlSafe и соответствующую функцию разблокировки позже, например MmUnmapLockedPages. Вместо использования виртуального адреса можно просто передать MDL в драйвер, который использует его для прямого доступа к памяти.

Драйвер, вызывающий эту функцию, не требуется для выпуска MDL. Она становится недопустимой при вызове функции VmbChannelPacketComplete . Клиентская библиотека режима ядра (KMCL) позже выпускает его.

Важно!

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

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

Требования

Требование Значение
Минимальная версия клиента Windows 10 версии 1803
Верхняя часть vmbuskernelmodeclientlibapi.h

См. также раздел

MmGetSystemAddressForMdlSafe

MmMapLockedPagesSpecifyCache

MmProbeAndLockPages

MmUnmapLockedPages

VmbChannelPacketComplete