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 virtualmente 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 la función de devolución de llamada especificada en el parámetro RequestCompletion .

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 (NDK_FN_REQUEST_COMPLETION) especificada 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
Se produjo un error.

Comentarios

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 virtualmente contigua con el adaptador.

El consumidor de NDK debe pasar una MDL o cadena de MDL que represente una región de memoria virtualmente 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 un í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 pueden requerir la habilitación de derechos de acceso especiales en el búfer del receptor para una solicitud de lectura de RDMA en adaptadores para los que la marca de NDK_ADAPTER_FLAG_RDMA_READ_SINK_NOT_REQUIRED no está establecida en el miembro AdapterFlags de la estructura de NDK_ADAPTER_INFO . La marca NDK_MR_FLAG_RDMA_READ_SINK permite a estos proveedores admitir las solicitudes de registro correctamente.

Nota Los búferes se pueden registrar con varios fines. Por lo tanto, la marca NDK_MR_FLAG_RDMA_READ_SINK podría ir acompañada de otras marcas.
 
Si un consumidor de NDK pasa la marca de NDK_MR_FLAG_RDMA_READ_SINK en un adaptador para el que se establece la marca de NDK_ADAPTER_FLAG_RDMA_READ_SINK_NOT_REQUIRED en el miembro AdapterFlags de la estructura NDK_ADAPTER_INFO , el proveedor no es necesario para controlar la marca de 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 Value
Cliente mínimo compatible Ninguno compatible, compatible con NDIS 6.30 y versiones posteriores.
Servidor mínimo compatible Windows Server 2012
Plataforma de destino Windows
Encabezado ndkpi.h (incluya Ndkpi.h)
IRQL <=DISPATCH_LEVEL

Consulte también

MmGetMdlVirtualAddress

Requisitos de duración del objeto NDKPI

NDK_ADAPTER_INFO

NDK_FN_DEREGISTER_MR

NDK_FN_REQUEST_COMPLETION

NDK_MR