Compartir a través de


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

[Cierta información se relaciona con el producto publicado previamente que puede modificarse sustancialmente antes de su publicación comercial. Microsoft no ofrece ninguna garantía, expresa o implícita, con respecto a la información proporcionada aquí.]

La función VmbChannelPacketGetExternalData obtiene cualquier lista externa de descriptores de memoria (MDL) asociada 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 volverá a llamar, 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.

Observaciones

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 MmGetSystemAddressForMdlSafey la función de desbloqueo correspondiente más adelante, como MmUnmapLockedPages. Una alternativa al uso de una dirección virtual sería simplemente pasar la MDL abajo 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 la MDL. No es válido al llamar a la función VmbChannelPacketComplete. La biblioteca cliente del modo kernel (KMCL) la publica más adelante.

Importante

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

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

Requisitos

Requisito Valor
cliente mínimo admitido Windows 10, versión 1803
encabezado de vmbuskernelmodeclientlibapi.h

Consulte también

MmGetSystemAddressForMdlSafe

MmMapLockedPagesSpecifyCache

mmProbeAndLockPages

MmUnmapLockedPages

VmbChannelPacketComplete