FN_VMB_CHANNEL_PACKET_GET_EXTERNAL_DATA función de devolución de llamada (vmbuskernelmodeclientlibapi.h)

[Parte de la información hace referencia a la versión preliminar del producto, el cual puede sufrir importantes modificaciones antes de que se publique la versión comercial. Microsoft no ofrece ninguna garantía, expresa o implícita, con respecto a la información que se ofrece aquí].

La función VmbChannelPacketGetExternalData obtiene cualquier descriptor de memoria externo Listas (MDL) asociado a un paquete durante el procesamiento de paquetes.

Sintaxis

FN_VMB_CHANNEL_PACKET_GET_EXTERNAL_DATA FnVmbChannelPacketGetExternalData;

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

Parámetros

PacketCompletionContext

Identificador que identifica el paquete entrante y se usa para hacer referencia al paquete una vez finalizado el procesamiento.

Flags

Marcas que controlan cómo se asigna la MDL. Los valores de marca posibles son:

Valor Significado
VMBUS_CHANNEL_PACKET_EXTERNAL_DATA_FLAG_READ_ONLY
Asigne MDL como de solo lectura.

Mdl

Puntero al MDL asignado.

Valor devuelto

VmbChannelPacketGetExternalData devuelve un código de estado. Si esta función devuelve STATUS_PENDING, el autor de la llamada debe devolver de la devolución de llamada de procesamiento de paquetes, que se llamará de nuevo, posiblemente en otro IRQL, cuando los datos externos estén listos. En este momento, una llamada a esta función se realizará correctamente y devolverá los datos externos.

Comentarios

La creación de una MDL que representa la memoria descrita por esta transacción hace que estas regiones de la máquina virtual se anclen en memoria durante el resto de la duración de la transacción. Esto es lo que puede hacer que la función devuelva STATUS_PENDING, ya que es posible que las regiones de la máquina virtual deban paginarse.

La MDL devuelta por esta función describe la memoria que ya está bloqueada. Por lo tanto, no es necesario llamar a la función MmProbeAndLockPages . Sin embargo, MDL no tendrá ninguna dirección virtual en modo de usuario ni una dirección virtual en modo kernel. Si el controlador que llama a esta función requiere una dirección virtual para manipular la memoria dentro de la máquina virtual, ese controlador debe llamar a MmMapLockedPagesSpecifyCache o MmGetSystemAddressForMdlSafe y la función de desbloqueo correspondiente más adelante, como MmUnmapLockedPages. Una alternativa al uso de una dirección virtual sería simplemente pasar mdl a un controlador que lo usa para el acceso directo a la memoria.

El controlador que llama a esta función no es necesario para liberar mdl. Se convierte en no válido al llamar a la función VmbChannelPacketComplete . La biblioteca cliente del modo kernel (KMCL) la libera más adelante.

Importante

Esta función se llama a través de la interfaz biblioteca cliente del modo kernel (KMCL) de VMBus, proporcionada por el controlador de bus de Vmbkmcl.sys. Se trata de una función de cliente a la que se accede desde la estructura KMCL_CLIENT_INTERFACE_V1 .

Para obtener más información, vea la sección Comentarios del KMCL_CLIENT_INTERFACE_V1.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 10, versión 1803
Encabezado vmbuskernelmodeclientlibapi.h

Consulte también

MmGetSystemAddressForMdlSafe

MmMapLockedPagesSpecifyCache

MmProbeAndLockPages

MmUnmapLockedPages

VmbChannelPacketComplete