функция обратного вызова 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 |