Compartir a través de


NDK_FN_REGISTER_MR función de devolución de llamada (ndkpi.h)

La función NdkRegisterMr (NDK_FN_REGISTER_MR) registra una región de memoria prácticamente contigua con un adaptador NDK.

Sintaxis

NDK_FN_REGISTER_MR NdkFnRegisterMr;

NTSTATUS NdkFnRegisterMr(
  [in]           NDK_MR *pNdkMr,
  [in]           MDL *Mdl,
  [in]           SIZE_T Length,
  [in]           ULONG Flags,
  [in]           NDK_FN_REQUEST_COMPLETION RequestCompletion,
  [in, optional] PVOID RequestContext
)
{...}

Parámetros

[in] pNdkMr

Puntero a un objeto de región de memoria NDK (MR) (NDK_MR).

[in] Mdl

MdL o cadena de MDL que representan una región de memoria prácticamente contigua desde la dirección virtual inicial hasta el número de bytes especificados en el parámetro Length.

[in] Length

Número de bytes que se van a registrar a partir de la primera dirección virtual de MDL. La primera dirección virtual de MDL se puede obtener llamando a la macro MmGetMdlVirtualAddress. La longitud no debe superar el número total de bytes representados por la cadena MDL.

[in] Flags

Máscara de bits de marcas que especifican los permisos de acceso para la región de memoria registrada. Se pueden establecer las marcas siguientes:

Valor Significado
NDK_MR_FLAG_ALLOW_LOCAL_READ
0x00000000
NDK_MR_FLAG_ALLOW_LOCAL_WRITE
0x00000001
NDK_MR_FLAG_ALLOW_REMOTE_READ
0x00000002
NDK_MR_FLAG_ALLOW_REMOTE_WRITE
0x00000005
NDK_MR_FLAG_RDMA_READ_SINK
0x00000008

[in] RequestCompletion

Puntero a una rutina de devolución de llamada de finalización de solicitudes NdkRequestCompletion (NDK_FN_REQUEST_COMPLETION).

[in, optional] RequestContext

Valor de contexto que se va a pasar al parámetro context de de la función de devolución de llamada especificada en el parámetro RequestCompletion de.

Valor devuelto

La función NdkRegisterMr devuelve uno de los siguientes códigos NTSTATUS.

Código devuelto Descripción
STATUS_SUCCESS
El registro de MR se completó correctamente.
STATUS_PENDING
La operación está pendiente y se completará más adelante. El controlador llamará a la función RequestCompletion especificada (NDK_FN_REQUEST_COMPLETION) para completar la operación pendiente.
STATUS_INVALID_PARAMETER
La parte de la cadena MDL desde la dirección virtual inicial hasta la longitud en bytes no representa una región de memoria prácticamente contigua.
STATUS_INSUFFICIENT_RESOURCES
Error en la solicitud debido a recursos insuficientes.
Importante La solicitud puede producir un error en línea, así como de forma asincrónica con este código de estado.
 
otros códigos de estado
Error.

Observaciones

En un objeto NDK_MR que se creó con el parámetro fastRegister establecido en FALSE, NdkRegisterMr se usa para registrar una región de memoria prácticamente contigua con el adaptador.

El consumidor de NDK debe pasar una MDL o una cadena de MDL que representen una región de memoria prácticamente contigua anclada en memoria física. La dirección virtual base de la región de memoria que se está registrando es la dirección virtual indicada por la macro MmGetMdlVirtualAddress. Si la cadena MDL no representa una región de memoria prácticamente contigua desde la dirección virtual inicial hasta la longitud especificada en bytes, el proveedor NDK debe producir un error en la solicitud.

El proveedor debe tratar la dirección virtual que MmGetMdlVirtualAddress devuelve como índice al inicio de la región de memoria que se está registrando. El proveedor no debe usar la dirección virtual como una dirección virtual válida para leer o escribir contenido del búfer.

El consumidor de NDK no debe usar la cadena MDL mientras la solicitud de registro está pendiente.

NdkRegisterMr no admite direcciones virtuales basadas en cero.

Un consumidor de NDK debe pasar la marca de NDK_MR_FLAG_RDMA_READ_SINK cuando registra la memoria que podría usarse como búfer receptor para una solicitud de lectura de RDMA. Algunos proveedores de NDK podrían requerir habilitar derechos de acceso especiales en el búfer del receptor para una solicitud de lectura RDMA en adaptadores para los que la marca de NDK_ADAPTER_FLAG_RDMA_READ_SINK_NOT_REQUIRED no está establecida en el AdapterFlags miembro de la estructura de NDK_ADAPTER_INFO. La marca NDK_MR_FLAG_RDMA_READ_SINK permite que dichos proveedores admitan las solicitudes de registro de forma adecuada.

Nota Búferes se pueden registrar con varios fines. Por lo tanto, la marca NDK_MR_FLAG_RDMA_READ_SINK puede ir acompañada de otras marcas.
 
Si un consumidor de NDK pasa la marca NDK_MR_FLAG_RDMA_READ_SINK en un adaptador para el que se establece la marca NDK_ADAPTER_FLAG_RDMA_READ_SINK_NOT_REQUIRED en el AdapterFlags miembro de la estructura de NDK_ADAPTER_INFO, el proveedor no debe controlar la marca NDK_MR_FLAG_RDMA_READ_SINK y no debe producir un error en la solicitud debido a la presencia. de esta marca.

Para anular el registro de la región de memoria, use la función NdkDeregisterMr (NDK_FN_DEREGISTER_MR).

Requisitos

Requisito Valor
cliente mínimo admitido Ninguna compatible, compatible con NDIS 6.30 y versiones posteriores.
servidor mínimo admitido Windows Server 2012
de la plataforma de destino de Windows
encabezado de ndkpi.h (incluya Ndkpi.h)
irQL <=DISPATCH_LEVEL

Consulte también

MmGetMdlVirtualAddress

requisitos de duración de objetos NDKPI

NDK_ADAPTER_INFO

NDK_FN_DEREGISTER_MR

NDK_FN_REQUEST_COMPLETION

NDK_MR