функция обратного вызова 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. Возможные значения флагов:
Значение | Значение |
---|---|
|
Сопоставьте 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 |